// Helper for ConvertGltf{1,2}Material private UnityMaterial CreateNewPbrMaterial( Material baseMaterial, Gltf2Material.PbrMetallicRoughness pbr) { Material mat = UnityEngine.Object.Instantiate(baseMaterial); string matName = baseMaterial.name; if (matName.StartsWith("Base")) { matName = matName.Substring(4); } mat.SetColor("_BaseColorFactor", pbr.baseColorFactor); Texture tex = null; if (pbr.baseColorTexture != null) { tex = pbr.baseColorTexture.texture.unityTexture; mat.SetTexture("_BaseColorTex", tex); } if (tex != null) { matName = string.Format("{0}_{1}", matName, tex.name); } mat.SetFloat("_MetallicFactor", pbr.metallicFactor); mat.SetFloat("_RoughnessFactor", pbr.roughnessFactor); mat.name = matName; return(new UnityMaterial { material = mat, template = baseMaterial }); }
/// <summary> /// Converts the given glTF1 material to a new Unity material. /// This is only possible if the passed material is a Tilt Brush "PBR" material /// squeezed into glTF1. /// </summary> /// <param name="gltfMat">The glTF1 material to convert.</param> /// <returns>The result of the conversion, or null on failure.</returns> private UnityMaterial?ConvertGltf1Material(Gltf1Material gltfMat) { // We know this guid doesn't map to a brush; if it did, LookupGlobalMaterial would // have succeeded and we wouldn't be trying to create an new material. Guid instanceGuid = ParseGuidFromMaterial(gltfMat); Guid templateGuid = ParseGuidFromShader(gltfMat); BrushDescriptor desc; if (!TbtSettings.Instance.TryGetBrush(templateGuid, out desc)) { // If they are the same, there is no template/instance relationship. if (instanceGuid != templateGuid) { Debug.LogErrorFormat("Unexpected: cannot find template material {0} for {1}", templateGuid, instanceGuid); } return(null); } TiltBrushGltf1PbrValues tbPbr = gltfMat.values; // The default values here are reasonable fallbacks if there is no tbPbr Gltf2Material.PbrMetallicRoughness pbr = new Gltf2Material.PbrMetallicRoughness(); if (tbPbr != null) { if (tbPbr.BaseColorFactor != null) { pbr.baseColorFactor = tbPbr.BaseColorFactor.Value; } if (tbPbr.MetallicFactor != null) { pbr.metallicFactor = tbPbr.MetallicFactor.Value; } if (tbPbr.RoughnessFactor != null) { pbr.roughnessFactor = tbPbr.RoughnessFactor.Value; } if (tbPbr.BaseColorTexPtr != null) { pbr.baseColorTexture = new Gltf2Material.TextureInfo { index = -1, texCoord = 0, texture = tbPbr.BaseColorTexPtr }; } // Tilt Brush doesn't support metallicRoughnessTexture (yet?) } var pbrInfo = new TbtSettings.PbrMaterialInfo { #if TILT_BRUSH descriptor = desc, #endif material = desc.Material }; return(CreateNewPbrMaterial(pbrInfo, gltfMat.name, pbr)); }
/// <summary> /// Converts the given glTF1 material to a new Unity material. /// This is only possible if the passed material is a Tilt Brush "PBR" material /// squeezed into glTF1. /// </summary> /// <param name="gltfMat">The glTF1 material to convert.</param> /// <returns>The result of the conversion, or null on failure.</returns> private UnityMaterial?ConvertGltf1Material(Gltf1Material gltfMat) { Guid instanceGuid = ParseGuidFromMaterial(gltfMat); Guid templateGuid = ParseGuidFromShader(gltfMat); BrushDescriptor desc; if (!TiltBrushToolkit.TbtSettings.BrushManifest.BrushesByGuid.TryGetValue(templateGuid, out desc)) { // If they are the same, there is no template/instance relationship. if (instanceGuid != templateGuid) { Debug.LogErrorFormat("Unexpected: cannot find template material {0} for {1}", templateGuid, instanceGuid); } return(null); } TiltBrushGltf1PbrValues tbPbr = gltfMat.values; // The default values here are reasonable fallbacks if there is no tbPbr Gltf2Material.PbrMetallicRoughness pbr = new Gltf2Material.PbrMetallicRoughness(); if (tbPbr != null) { if (tbPbr.BaseColorFactor != null) { pbr.baseColorFactor = tbPbr.BaseColorFactor.Value; } if (tbPbr.MetallicFactor != null) { pbr.metallicFactor = tbPbr.MetallicFactor.Value; } if (tbPbr.RoughnessFactor != null) { pbr.roughnessFactor = tbPbr.RoughnessFactor.Value; } if (tbPbr.BaseColorTexPtr != null) { pbr.baseColorTexture = new Gltf2Material.TextureInfo { index = -1, texCoord = 0, texture = tbPbr.BaseColorTexPtr }; } // Tilt Brush doesn't support metallicRoughnessTexture (yet?) } return(CreateNewPbrMaterial(desc.Material, pbr)); }
// Helper for ConvertGltf{1,2}Material private UnityMaterial CreateNewPbrMaterial( TbtSettings.PbrMaterialInfo pbrInfo, string gltfMatName, Gltf2Material.PbrMetallicRoughness pbr) { Material mat = UnityEngine.Object.Instantiate(pbrInfo.material); Texture tex = null; if (pbr.baseColorTexture != null) { tex = pbr.baseColorTexture.texture.unityTexture; mat.SetTexture("_BaseColorTex", tex); } if (gltfMatName != null) { // The gltf has a name it wants us to use mat.name = gltfMatName; } else { // No name in the gltf; make up something reasonable string matName = pbrInfo.material.name; if (matName.StartsWith("Base")) { matName = matName.Substring(4); } if (tex != null) { matName = string.Format("{0}_{1}", matName, tex.name); } mat.name = matName; } mat.SetColor("_BaseColorFactor", pbr.baseColorFactor); mat.SetFloat("_MetallicFactor", pbr.metallicFactor); mat.SetFloat("_RoughnessFactor", pbr.roughnessFactor); return(new UnityMaterial { material = mat, #if TILT_BRUSH exportableMaterial = pbrInfo.descriptor, #endif template = pbrInfo.material }); }