コード例 #1
0
        // 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
            });
        }
コード例 #2
0
        /// <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));
        }
コード例 #3
0
        /// <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));
        }
コード例 #4
0
        // 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
            });
        }