コード例 #1
0
        public static void CreateMaterial(CreationModeFlags flags)
        {
            GameObject selection;

            if (!TryGetActiveGameObject(out selection))
            {
                return;
            }
            StartCoroutine(selection, CreateMaterial(selection, flags));
        }
コード例 #2
0
        public static void CreateVertexTexture(CreationModeFlags flags)
        {
            GameObject selection;

            if (!TryGetActiveGameObject(out selection))
            {
                return;
            }
            //AssureEditorApplicationIsPlaying();
            StartCoroutine(selection, CreateVertexTexture(selection, flags));
        }
コード例 #3
0
        public static IEnumerator CreateMaterial(GameObject selection, CreationModeFlags flags)
        {
            var sampler = ContainsAllFlags(flags, CreationModeFlags.COMBINED_MESH)
                ? (IMeshSampler) new CombinedMeshSampler(selection) : (IMeshSampler) new SingleMeshSampler(selection);
            var vtex = new VertexTex(sampler);

            var folderPath = AssureExistAndGetRootFolder();

            folderPath = CreateTargetFolder(selection, folderPath);
            yield return(0);

            Material mat = CreateMaterial(sampler, vtex);

            SaveAsset(mat, folderPath + "/" + selection.name + ".mat");
        }
コード例 #4
0
        public static IEnumerator CreateVertexTexture(GameObject selection, CreationModeFlags flags)
        {
            var sampler = ContainsAllFlags(flags, CreationModeFlags.COMBINED_MESH)
                ? (IMeshSampler) new CombinedMeshSampler(selection) : (IMeshSampler) new SingleMeshSampler(selection);
            var vtex = new VertexTex(sampler);

            var folderPath = AssureExistAndGetRootFolder();

            folderPath = CreateTargetFolder(selection, folderPath);
            yield return(0);

            var posPngPath  = folderPath + "/" + selection.name + ".png";
            var normPngPath = folderPath + "/" + selection.name + "_normal.png";
            var posTex      = Save(vtex.positionTex, posPngPath);
            var normTex     = Save(vtex.normalTex, normPngPath);

            var      renderer = selection.GetComponentInChildren <Renderer>();
            Material mat      = CreateMaterial(sampler, vtex, posTex, normTex, renderer);

            SaveAsset(mat, folderPath + "/" + selection.name + ".mat");

            var smr  = selection.GetComponentInChildren <SkinnedMeshRenderer>();
            var mesh = (smr != null ? smr.sharedMesh : null);

            if (ContainsAllFlags(flags, CreationModeFlags.NEW_MESH))
            {
                mesh        = sampler.Output;
                mesh.bounds = vtex.Bounds();
                SaveAsset(mesh, folderPath + "/" + selection.name + ".asset");
            }

            GameObject go = new GameObject(selection.name);

            go.AddComponent <MeshRenderer>().sharedMaterial = mat;
            go.AddComponent <MeshFilter>().sharedMesh       = mesh;
            PrefabUtility.CreatePrefab(folderPath + "/" + selection.name + ".prefab", go);
        }
コード例 #5
0
 static bool ContainsAllFlags(CreationModeFlags flags, CreationModeFlags contains)
 {
     return((flags & contains) == contains);
 }
コード例 #6
0
        public static IEnumerator CreateVertexTextures(GameObject selection, CreationModeFlags flags)
        {
            var bakeModelMatrix = ContainsAllFlags(flags, CreationModeFlags.BAKE_MATRIX_TEX);

            if (bakeModelMatrix)
            {
                selection.transform.SetPositionAndRotation(Vector3.zero, Quaternion.identity);
                selection.transform.localScale = Vector3.one;
            }

            var sampler = new DividedMeshSampler(selection);
            var vtex    = new VertexTexList(sampler, bakeModelMatrix);

            var folderPath = AssureExistAndGetRootFolder();

            folderPath = CreateTargetFolder(selection, folderPath);
            yield return(0);

            var        renderers = selection.GetComponentsInChildren <SkinnedMeshRenderer>();
            GameObject go        = new GameObject(selection.name);

            Texture2D modelMatrixTex;

            var meshCount = sampler.Outputs.Count;

            for (int i = 0; i < meshCount; i++)
            {
                var      posPngPath  = folderPath + "/" + sampler.Outputs[i].transform.name + ".png";
                var      normPngPath = folderPath + "/" + sampler.Outputs[i].transform.name + "_normal.png";
                var      posTex      = Save(vtex.positionTextures[i], posPngPath);
                var      normTex     = Save(vtex.normalTextures[i], normPngPath);
                Material mat;

                if (bakeModelMatrix)
                {
                    var modelMatrixPngPath = folderPath + "/" + sampler.Outputs[i].transform.name + "._model.png";
                    modelMatrixTex = Save(vtex.matrixTextures[i], modelMatrixPngPath, TextureImporterFormat.RGBA32);
                    mat            = CreateMaterial(i, sampler, vtex, posTex, normTex, renderers[i], modelMatrixTex);
                }
                else
                {
                    mat = CreateMaterial(i, sampler, vtex, posTex, normTex, renderers[i]);
                }

                SaveAsset(mat, folderPath + "/" + sampler.Outputs[i].transform.name + ".mat");

                var mesh = renderers[i].sharedMesh;

                if (ContainsAllFlags(flags, CreationModeFlags.NEW_MESH))
                {
                    mesh        = sampler.Outputs[i].mesh;
                    mesh.bounds = vtex.Bounds(i);
                    SaveAsset(mesh, folderPath + "/" + sampler.Outputs[i].transform.name + ".asset");
                }

                var child = new GameObject(sampler.Outputs[i].transform.name);
                child.AddComponent <MeshRenderer>().sharedMaterial = mat;
                child.AddComponent <MeshFilter>().sharedMesh       = mesh;
                child.transform.parent = go.transform;
            }

            PrefabUtility.SaveAsPrefabAsset(go, folderPath + "/" + selection.name + ".prefab");
        }