static UnityEngine.Material CreateUnlitMaterial(VrmLib.UnlitMaterial src, bool hasVertexColor, Dictionary <VrmLib.Texture, Texture2D> textures)
        {
            var material = new Material(Shader.Find(UniGLTF.UniUnlit.Utils.ShaderName));

            // texture
            if (src.BaseColorTexture != null)
            {
                material.mainTexture = textures[src.BaseColorTexture.Texture];
            }

            // color
            material.color = src.BaseColorFactor.ToUnitySRGB();

            //renderMode
            switch (src.AlphaMode)
            {
            case VrmLib.AlphaModeType.OPAQUE:
                UniGLTF.UniUnlit.Utils.SetRenderMode(material, UniGLTF.UniUnlit.UniUnlitRenderMode.Opaque);
                break;

            case VrmLib.AlphaModeType.BLEND:
                UniGLTF.UniUnlit.Utils.SetRenderMode(material, UniGLTF.UniUnlit.UniUnlitRenderMode.Transparent);
                break;

            case VrmLib.AlphaModeType.MASK:
                UniGLTF.UniUnlit.Utils.SetRenderMode(material, UniGLTF.UniUnlit.UniUnlitRenderMode.Cutout);
                material.SetFloat(UniGLTF.UniUnlit.Utils.PropNameCutoff, src.AlphaCutoff);
                break;

            default:
                UniGLTF.UniUnlit.Utils.SetRenderMode(material, UniGLTF.UniUnlit.UniUnlitRenderMode.Opaque);
                break;
            }

            // culling
            if (src.DoubleSided)
            {
                UniGLTF.UniUnlit.Utils.SetCullMode(material, UniGLTF.UniUnlit.UniUnlitCullMode.Off);
            }
            else
            {
                UniGLTF.UniUnlit.Utils.SetCullMode(material, UniGLTF.UniUnlit.UniUnlitCullMode.Back);
            }

            // VColor
            if (hasVertexColor)
            {
                UniGLTF.UniUnlit.Utils.SetVColBlendMode(material, UniGLTF.UniUnlit.UniUnlitVertexColorBlendOp.Multiply);
            }

            UniGLTF.UniUnlit.Utils.ValidateProperties(material, true);

            return(material);
        }
예제 #2
0
        public VrmLib.Material Export10(Material src, GetOrCreateTextureDelegate map)
        {
            switch (src.shader.name)
            {
            case "VRM/MToon":
            {
                var def = MToon.Utils.GetMToonParametersFromMaterial(src);
                return(new VrmLib.MToonMaterial(src.name)
                    {
                        Definition = def.ToVrmLib(src, map),
                    });
            }

            case "Unlit/Color":
                return(new VrmLib.UnlitMaterial(src.name)
                {
                    BaseColorFactor = src.color.FromUnitySrgbToLinear(),
                });

            case "Unlit/Texture":
                return(new VrmLib.UnlitMaterial(src.name)
                {
                    BaseColorTexture = map(src, src.mainTexture as Texture2D, VrmLib.Texture.ColorSpaceTypes.Srgb, VrmLib.Texture.TextureTypes.Default),
                });

            case "Unlit/Transparent":
                return(new VrmLib.UnlitMaterial(src.name)
                {
                    BaseColorTexture = map(src, src.mainTexture as Texture2D, VrmLib.Texture.ColorSpaceTypes.Srgb, VrmLib.Texture.TextureTypes.Default),
                    AlphaMode = VrmLib.AlphaModeType.BLEND,
                });

            case "Unlit/Transparent Cutout":
                return(new VrmLib.UnlitMaterial(src.name)
                {
                    BaseColorTexture = map(src, src.mainTexture as Texture2D, VrmLib.Texture.ColorSpaceTypes.Srgb, VrmLib.Texture.TextureTypes.Default),
                    AlphaMode = VrmLib.AlphaModeType.MASK,
                    AlphaCutoff = src.GetFloat("_Cutoff"),
                });

            case "UniGLTF/UniUnlit":
            case "VRM/UniUnlit":
            {
                var material = new VrmLib.UnlitMaterial(src.name)
                {
                    BaseColorFactor  = src.color.FromUnitySrgbToLinear(),
                    BaseColorTexture = map(src, src.mainTexture as Texture2D, VrmLib.Texture.ColorSpaceTypes.Srgb, VrmLib.Texture.TextureTypes.Default),
                    AlphaMode        = GetAlphaMode(src),
                    DoubleSided      = UniGLTF.UniUnlit.Utils.GetCullMode(src) == UniGLTF.UniUnlit.UniUnlitCullMode.Off,
                };
                if (material.AlphaMode == VrmLib.AlphaModeType.MASK)
                {
                    material.AlphaCutoff = src.GetFloat("_Cutoff");
                }
                // TODO: VertexColorMode
                return(material);
            }

            default:
                return(ExportStandard(src, map));
            }
        }