public void Run() { var fileLocator = new ContentFileLocator(); var objectLocator = new DsonObjectLocator(fileLocator); var contentPackConfs = ContentPackImportConfiguration.LoadAll(CommonPaths.ConfDir); var pathManager = ImporterPathManager.Make(contentPackConfs); var loader = new FigureRecipeLoader(fileLocator, objectLocator, pathManager); var figureRecipe = loader.LoadFigureRecipe("genesis-3-female", null); var figure = figureRecipe.Bake(fileLocator, null); var calculator = new BoneAttributesCalculator(figure.ChannelSystem, figure.BoneSystem, figure.Geometry, figure.SkinBinding); BoneAttributes[] boneAttributes = calculator.CalculateBoneAttributes(); for (int boneIdx = 0; boneIdx < figure.Bones.Count; ++boneIdx) { Console.WriteLine("{0}: {1}", figure.Bones[boneIdx].Name, boneAttributes[boneIdx]); } }
public FigureDumperLoader(ContentFileLocator fileLocator, DsonObjectLocator objectLocator, ImporterPathManager pathManager, Device device, ShaderCache shaderCache) { this.fileLocator = fileLocator; this.objectLocator = objectLocator; this.pathManager = pathManager; this.device = device; this.shaderCache = shaderCache; figureRecipeLoader = new FigureRecipeLoader(objectLocator, pathManager); FigureRecipe genesis3FemaleRecipe = figureRecipeLoader.LoadFigureRecipe("genesis-3-female", null); FigureRecipe genitaliaRecipe = figureRecipeLoader.LoadFigureRecipe("genesis-3-female-genitalia", genesis3FemaleRecipe); FigureRecipe genesis3FemaleWithGenitaliaRecipe = new FigureRecipeMerger(genesis3FemaleRecipe, genitaliaRecipe).Merge(); Figure genesis3FemaleWithGenitalia = genesis3FemaleWithGenitaliaRecipe.Bake(null); SurfaceProperties genesis3FemaleSurfaceProperties = SurfacePropertiesJson.Load(pathManager, genesis3FemaleWithGenitalia); float[] genesis3FemaleFaceTransparencies = FaceTransparencies.For(genesis3FemaleWithGenitalia, genesis3FemaleSurfaceProperties, null); parentFigureRecipe = genesis3FemaleRecipe; parentFigure = genesis3FemaleWithGenitalia; parentFaceTransparencies = genesis3FemaleFaceTransparencies; }
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()); }
public void Run() { LeakTracking.Setup(); var device = new Device(DriverType.Hardware, DeviceCreationFlags.Debug, FeatureLevel.Level_11_1); var shaderCache = new ShaderCache(device); var fileLocator = new ContentFileLocator(); var objectLocator = new DsonObjectLocator(fileLocator); var contentPackConfs = ContentPackImportConfiguration.LoadAll(CommonPaths.ConfDir); var pathManager = ImporterPathManager.Make(contentPackConfs); var loader = new FigureRecipeLoader(fileLocator, objectLocator, pathManager); var figureRecipe = loader.LoadFigureRecipe("genesis-3-female", null); var figure = figureRecipe.Bake(fileLocator, null); var geometry = figure.Geometry; var ldChannelInputs = figure.ChannelSystem.MakeDefaultChannelInputs(); figure.ChannelsByName["PBMNavel?value"].SetValue(ldChannelInputs, 1); figure.ChannelsByName["PBMNipples?value"].SetValue(ldChannelInputs, 1); figure.ChannelsByName["CTRLRune7?value"].SetValue(ldChannelInputs, 1); var hdChannelInputs = figure.ChannelSystem.MakeDefaultChannelInputs(); figure.ChannelsByName["PBMNavel?value"].SetValue(hdChannelInputs, 1); figure.ChannelsByName["PBMNipples?value"].SetValue(hdChannelInputs, 1); figure.ChannelsByName["CTRLRune7?value"].SetValue(hdChannelInputs, 1); figure.ChannelsByName["CTRLRune7HD?value"].SetValue(hdChannelInputs, 1); var converter = new HdMorphToNormalMapConverter(device, shaderCache, figure); var mapRenderer = converter.MakeNormalMapRenderer(ldChannelInputs, hdChannelInputs, figure.UvSets["Rune 7"]); string character = "rune"; var faceMap = mapRenderer.Render(new HashSet <int> { 9, 13, 5, 6 }); faceMap.Save(CommonPaths.WorkDir.File(character + "-face.png")); faceMap.Dispose(); var torsoMap = mapRenderer.Render(new HashSet <int> { 12 }); torsoMap.Save(CommonPaths.WorkDir.File(character + "-torso.png")); torsoMap.Dispose(); var legsMap = mapRenderer.Render(new HashSet <int> { 11, 2 }); legsMap.Save(CommonPaths.WorkDir.File(character + "-legs.png")); legsMap.Dispose(); var armsMap = mapRenderer.Render(new HashSet <int> { 16, 1 }); armsMap.Save(CommonPaths.WorkDir.File(character + "-arms.png")); armsMap.Dispose(); mapRenderer.Dispose(); shaderCache.Dispose(); device.Dispose(); LeakTracking.Finish(); }