public RawFloatTexture ExtractFloatTexture(string channelName)
    {
        var texture = new RawFloatTexture {
            image = ExtractImage(channelName),
            value = ExtractFloat(channelName) * ExtractScale(channelName)
        };

        return(texture);
    }
Example #2
0
    public FloatTexture ImportFloatTexture(RawFloatTexture rawTexture)
    {
        FloatTexture texture = new FloatTexture {
            image = ExtractImage(rawTexture.image, TextureProcessingType.SingleChannel),
            value = rawTexture.value
        };

        return(texture);
    }
Example #3
0
    public FloatTexture ImportBumpTexture(RawFloatTexture rawTexture)
    {
        FloatTexture texture = new FloatTexture()
        {
            image = ExtractImage(rawTexture.image, TextureProcessingType.Bump),
            value = rawTexture.value
        };

        return(texture);
    }
 public void ProcessSurface(int surfaceIdx, string uvSet, RawFloatTexture opacityTexture)
 {
     if (opacityTexture.image == null)
     {
         ProcessConstantSurface(surfaceIdx, opacityTexture.value);
     }
     else
     {
         bool isLinear = TextureImporter.IsLinear(opacityTexture.image, TextureProcessingType.SingleChannel);
         ProcessTexturedSurface(surfaceIdx, uvSet, opacityTexture.image.file, isLinear);
     }
 }
    public FloatTexture ImportNormalTexture(RawFloatTexture rawTexture)
    {
        FloatTexture texture = new FloatTexture()
        {
            image = ExtractImage(rawTexture.image, TextureProcessingType.Normal),
            value = rawTexture.value
        };

        if (texture.value != 1)
        {
            Console.WriteLine("warning: normal map with non-unity multiplier");
            texture.value = 1;
        }
        return(texture);
    }
    public void Run()
    {
        var loader = new FigureRecipeLoader(fileLocator, objectLocator, pathManager);

        FigureRecipe genesis3FemaleRecipe = loader.LoadFigureRecipe("genesis-3-female", null);
        FigureRecipe genitaliaRecipe      = loader.LoadFigureRecipe("genesis-3-female-genitalia", genesis3FemaleRecipe);
        FigureRecipe genesis3FemaleWithGenitaliaRecipe = new FigureRecipeMerger(genesis3FemaleRecipe, genitaliaRecipe).Merge();
        Figure       genesis3FemaleWithGenitalia       = genesis3FemaleWithGenitaliaRecipe.Bake(fileLocator, null);

        Figure parentFigure = genesis3FemaleWithGenitalia;

        FigureRecipe livHairRecipe = loader.LoadFigureRecipe("liv-hair", null);
        var          livHairFigure = livHairRecipe.Bake(fileLocator, parentFigure);

        var surfaceProperties = SurfacePropertiesJson.Load(pathManager, livHairFigure);
        var processor         = new FaceTransparencyProcessor(device, shaderCache, livHairFigure, surfaceProperties);

        for (int surfaceIdx = 0; surfaceIdx < livHairFigure.Geometry.SurfaceCount; ++surfaceIdx)
        {
            string surfaceName = livHairFigure.Geometry.SurfaceNames[surfaceIdx];

            FileInfo textureFile;
            if (surfaceName == "Hairband")
            {
                continue;
            }
            else if (surfaceName == "Cap")
            {
                textureFile = fileLocator.Locate("/Runtime/Textures/outoftouch/!hair/OOTHairblending2/Liv/OOTUtilityLivCapT.jpg").File;
            }
            else
            {
                textureFile = fileLocator.Locate("/Runtime/Textures/outoftouch/!hair/OOTHairblending2/Liv/OOTUtilityLivHairT.png").File;
            }

            RawFloatTexture opacityTexture = new RawFloatTexture {
                value = 1,
                image = new RawImageInfo {
                    file  = textureFile,
                    gamma = 1
                }
            };

            processor.ProcessSurface(surfaceIdx, livHairFigure.DefaultUvSet.Name, opacityTexture);
        }

        var transparencies = processor.FaceTransparencies;

        for (int i = 0; i < 10; ++i)
        {
            int    faceIdx     = i * 3000;
            int    surfaceIdx  = livHairFigure.Geometry.SurfaceMap[faceIdx];
            string surfaceName = livHairFigure.Geometry.SurfaceNames[surfaceIdx];

            var  uvSet = livHairFigure.DefaultUvSet;
            Quad face  = uvSet.Faces[faceIdx];

            Console.WriteLine("face {0}: ", faceIdx);
            Console.WriteLine("  transparency: " + transparencies[faceIdx]);
            Console.WriteLine("  surface: " + surfaceName);
            Console.WriteLine("  uv 0: {0}", uvSet.Uvs[face.Index0]);
            Console.WriteLine("  uv 1: {0}", uvSet.Uvs[face.Index1]);
            Console.WriteLine("  uv 2: {0}", uvSet.Uvs[face.Index2]);
            Console.WriteLine("  uv 3: {0}", uvSet.Uvs[face.Index3]);
            Console.WriteLine();
        }
        Console.WriteLine("min = " + transparencies.Min());
        Console.WriteLine("avg = " + transparencies.Average());
        Console.WriteLine("max = " + transparencies.Max());
    }