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