public RawFloatTexture ExtractFloatTexture(string channelName) { var texture = new RawFloatTexture { image = ExtractImage(channelName), value = ExtractFloat(channelName) * ExtractScale(channelName) }; return(texture); }
public FloatTexture ImportFloatTexture(RawFloatTexture rawTexture) { FloatTexture texture = new FloatTexture { image = ExtractImage(rawTexture.image, TextureProcessingType.SingleChannel), value = rawTexture.value }; return(texture); }
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()); }