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); }
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; } }
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); } }
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"); }