From db666f2b1d9e76590232a6175a1b0179537c417d Mon Sep 17 00:00:00 2001 From: hirose Date: Mon, 16 Dec 2019 21:07:25 +0900 Subject: [PATCH] Refer to vertex color when importing with UniUnlit --- Assets/VRM/UniGLTF/Editor/Tests/MaterialTests.cs | 5 +---- Assets/VRM/UniGLTF/Scripts/IO/ImporterContext.cs | 4 ++-- Assets/VRM/UniGLTF/Scripts/IO/MaterialImporter.cs | 10 ++++++++-- Assets/VRM/UniUnlit/Scripts/Utils.cs | 5 +++++ .../VRM/UniVRM/Scripts/Format/VRMMaterialImporter.cs | 4 ++-- 5 files changed, 18 insertions(+), 10 deletions(-) diff --git a/Assets/VRM/UniGLTF/Editor/Tests/MaterialTests.cs b/Assets/VRM/UniGLTF/Editor/Tests/MaterialTests.cs index 7e65293fb..bfd41bb60 100644 --- a/Assets/VRM/UniGLTF/Editor/Tests/MaterialTests.cs +++ b/Assets/VRM/UniGLTF/Editor/Tests/MaterialTests.cs @@ -170,10 +170,7 @@ namespace UniGLTF var materialImporter = new MaterialImporter(shaderStore, null); { - var material = materialImporter.CreateMaterial(0, new glTFMaterial - { - - }); + var material = materialImporter.CreateMaterial(0, new glTFMaterial { }, false); Assert.AreEqual("Standard", material.shader.name); } } diff --git a/Assets/VRM/UniGLTF/Scripts/IO/ImporterContext.cs b/Assets/VRM/UniGLTF/Scripts/IO/ImporterContext.cs index 1c2c81201..1f7df9c26 100644 --- a/Assets/VRM/UniGLTF/Scripts/IO/ImporterContext.cs +++ b/Assets/VRM/UniGLTF/Scripts/IO/ImporterContext.cs @@ -625,13 +625,13 @@ namespace UniGLTF { if (GLTF.materials == null || !GLTF.materials.Any()) { - AddMaterial(MaterialImporter.CreateMaterial(0, null)); + AddMaterial(MaterialImporter.CreateMaterial(0, null, false)); } else { for (int i = 0; i < GLTF.materials.Count; ++i) { - AddMaterial(MaterialImporter.CreateMaterial(i, GLTF.materials[i])); + AddMaterial(MaterialImporter.CreateMaterial(i, GLTF.materials[i], GLTF.MaterialHasVertexColor(i))); } } } diff --git a/Assets/VRM/UniGLTF/Scripts/IO/MaterialImporter.cs b/Assets/VRM/UniGLTF/Scripts/IO/MaterialImporter.cs index 9d87cf084..13e3fedf9 100644 --- a/Assets/VRM/UniGLTF/Scripts/IO/MaterialImporter.cs +++ b/Assets/VRM/UniGLTF/Scripts/IO/MaterialImporter.cs @@ -10,7 +10,7 @@ namespace UniGLTF { public interface IMaterialImporter { - Material CreateMaterial(int i, glTFMaterial src); + Material CreateMaterial(int i, glTFMaterial src, bool hasVertexColor); } public class MaterialImporter : IMaterialImporter @@ -64,7 +64,7 @@ namespace UniGLTF /// _SrcBlend /// _DstBlend /// _ZWrite - public virtual Material CreateMaterial(int i, glTFMaterial x) + public virtual Material CreateMaterial(int i, glTFMaterial x, bool hasVertexColor) { var shader = m_shaderStore.GetShader(x); //Debug.LogFormat("[{0}]{1}", i, shader.name); @@ -134,6 +134,12 @@ namespace UniGLTF UniUnlit.Utils.SetCullMode(material, UniUnlit.UniUnlitCullMode.Back); } + // VColor + if (hasVertexColor) + { + UniUnlit.Utils.SetVColBlendMode(material, UniUnlit.UniUnlitVertexColorBlendOp.Multiply); + } + UniUnlit.Utils.ValidateProperties(material, true); return material; diff --git a/Assets/VRM/UniUnlit/Scripts/Utils.cs b/Assets/VRM/UniUnlit/Scripts/Utils.cs index 35c8fb876..0987006cd 100644 --- a/Assets/VRM/UniUnlit/Scripts/Utils.cs +++ b/Assets/VRM/UniUnlit/Scripts/Utils.cs @@ -59,6 +59,11 @@ namespace UniGLTF.UniUnlit material.SetInt(PropNameCullMode, (int) mode); } + public static void SetVColBlendMode(Material material, UniUnlitVertexColorBlendOp mode) + { + material.SetInt(PropNameVColBlendMode, (int)mode); + } + public static UniUnlitRenderMode GetRenderMode(Material material) { return (UniUnlitRenderMode)material.GetInt(PropNameBlendMode); diff --git a/Assets/VRM/UniVRM/Scripts/Format/VRMMaterialImporter.cs b/Assets/VRM/UniVRM/Scripts/Format/VRMMaterialImporter.cs index 69922689f..a3f3df8f7 100644 --- a/Assets/VRM/UniVRM/Scripts/Format/VRMMaterialImporter.cs +++ b/Assets/VRM/UniVRM/Scripts/Format/VRMMaterialImporter.cs @@ -26,7 +26,7 @@ namespace VRM "VRM/UnlitTransparentZWrite", }; - public override Material CreateMaterial(int i, glTFMaterial src) + public override Material CreateMaterial(int i, glTFMaterial src, bool hasVertexColor) { if(i==0 && m_materials.Count == 0) { @@ -50,7 +50,7 @@ namespace VRM { Debug.LogWarningFormat("unknown shader {0}.", shaderName); } - return base.CreateMaterial(i, src); + return base.CreateMaterial(i, src, hasVertexColor); } //