示例#1
0
        private void SaveMaterial(MaterialInfo materialInfo)
        {
            string shaderName = materialInfo.material.shader.name;

            if (shaderName != "VRtist/ObjectOpaque" &&
                shaderName != "VRtist/ObjectTransparent" &&
                shaderName != "VRtist/ObjectOpaqueUnlit" &&
                shaderName != "VRtist/ObjectTransparentUnlit")
            {
                Debug.LogWarning($"Unsupported material {shaderName}. Expected VRtist/Object*.");
                return;
            }

            SaveTexture("_ColorMap", "_UseColorMap", "color", materialInfo);
            SaveTexture("_NormalMap", "_UseNormalMap", "normal", materialInfo);
            SaveTexture("_MetallicMap", "_UseMetallicMap", "metallic", materialInfo);
            SaveTexture("_RoughnessMap", "_UseRoughnessMap", "roughness", materialInfo);
            SaveTexture("_EmissiveMap", "_UseEmissiveMap", "emissive", materialInfo);
            SaveTexture("_AoMap", "_UseAoMap", "ao", materialInfo);
            SaveTexture("_OpacityMap", "_UseOpacityMap", "opacity", materialInfo);
        }
示例#2
0
        private void SetObjectData(Transform trans, ParametersController controller, ObjectData data)
        {
            // Mesh for non-imported objects
            if (null == controller || !controller.isImported)
            {
                MeshRenderer meshRenderer = trans.GetComponent <MeshRenderer>();
                MeshFilter   meshFilter   = trans.GetComponent <MeshFilter>();
                if (null != meshFilter && null != meshRenderer)
                {
                    // Materials
                    foreach (Material material in meshRenderer.materials)
                    {
                        string materialId = trans.name + "_" + material.name;
                        GetMaterialPath(currentProjectName, materialId, out string materialAbsolutePath, out string materialRelativePath);
                        MaterialInfo materialInfo = new MaterialInfo {
                            relativePath = materialRelativePath, absolutePath = materialAbsolutePath, material = material
                        };
                        if (!materials.ContainsKey(materialId))
                        {
                            materials.Add(materialId, materialInfo);
                        }
                        data.materialsData.Add(new MaterialData(materialInfo));
                    }

                    // Mesh
                    GetMeshPath(currentProjectName, meshFilter.sharedMesh.name, out string meshAbsolutePath, out string meshRelativePath);
                    meshes[meshRelativePath] = new MeshInfo {
                        relativePath = meshRelativePath, absolutePath = meshAbsolutePath, mesh = meshFilter.sharedMesh
                    };
                    data.meshPath = meshRelativePath;
                }
                data.isImported = false;
            }
            else if (null != controller && controller.isImported)
            {
                data.meshPath   = controller.importPath;
                data.isImported = true;
            }
        }
示例#3
0
 private void SaveTexture(string textureName, string boolName, string baseName, MaterialInfo materialInfo)
 {
     if (materialInfo.material.GetInt(boolName) == 1)
     {
         string    path    = materialInfo.absolutePath + baseName + ".tex";
         Texture2D texture = (Texture2D)materialInfo.material.GetTexture(textureName);
         TextureUtils.WriteRawTexture(path, texture);
     }
 }
示例#4
0
        public MaterialData(MaterialInfo materialInfo)
        {
            string shaderName = materialInfo.material.shader.name;

            if (shaderName != "VRtist/ObjectOpaque" &&
                shaderName != "VRtist/ObjectTransparent" &&
                shaderName != "VRtist/ObjectOpaqueUnlit" &&
                shaderName != "VRtist/ObjectTransparentUnlit")
            {
                Debug.LogWarning($"Unsupported material {shaderName}. Expected VRtist/Object*.");
                return;
            }

            name = materialInfo.material.name;
            path = materialInfo.relativePath;

            unlit = shaderName.Contains("Unlit");

            useColorMap = materialInfo.material.GetInt("_UseColorMap") == 1f;
            baseColor   = materialInfo.material.GetColor("_BaseColor");
            if (useColorMap)
            {
                colorMapPath = materialInfo.relativePath + "color.tex";
            }

            useNormalMap = materialInfo.material.GetInt("_UseNormalMap") == 1f;
            if (useNormalMap)
            {
                normalMapPath = materialInfo.relativePath + "normal.tex";
            }

            useMetallicMap = materialInfo.material.GetInt("_UseMetallicMap") == 1f;
            metallic       = materialInfo.material.GetFloat("_Metallic");
            if (useMetallicMap)
            {
                metallicMapPath = materialInfo.relativePath + "metallic.tex";
            }

            useRoughnessMap = materialInfo.material.GetInt("_UseRoughnessMap") == 1f;
            roughness       = materialInfo.material.GetFloat("_Roughness");
            if (useRoughnessMap)
            {
                roughnessMapPath = materialInfo.relativePath + "roughness.tex";
            }

            useEmissiveMap = materialInfo.material.GetInt("_UseEmissiveMap") == 1f;
            emissive       = materialInfo.material.GetColor("_Emissive");
            if (useEmissiveMap)
            {
                metallicMapPath = materialInfo.relativePath + "emissive.tex";
            }

            useAoMap = materialInfo.material.GetInt("_UseAoMap") == 1f;
            if (useAoMap)
            {
                aoMapPath = materialInfo.relativePath + "ao.tex";
            }

            useOpacityMap = materialInfo.material.GetInt("_UseOpacityMap") == 1f;
            opacity       = materialInfo.material.GetFloat("_Opacity");
            if (useOpacityMap)
            {
                opacityMapPath = materialInfo.relativePath + "opacity.tex";
            }

            uvOffset = materialInfo.material.GetVector("_UvOffset");
            uvScale  = materialInfo.material.GetVector("_UvScale");
        }