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]);
        }
    }
예제 #2
0
    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());
    }
예제 #4
0
    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();
    }