diff --git a/Assets/VRM/Runtime/IO/VRMMToonTextureImporter.cs b/Assets/VRM/Runtime/IO/VRMMToonTextureImporter.cs index c051745c2..22aa29c64 100644 --- a/Assets/VRM/Runtime/IO/VRMMToonTextureImporter.cs +++ b/Assets/VRM/Runtime/IO/VRMMToonTextureImporter.cs @@ -22,7 +22,8 @@ namespace VRM public static bool TryGetTextureFromMaterialProperty(GltfParser parser, glTF_VRM_extensions vrm, int materialIdx, string textureKey, out (SubAssetKey, TextureDescriptor) texture) { var vrmMaterial = vrm.materialProperties[materialIdx]; - if (vrmMaterial.shader == MToon.Utils.ShaderName && vrmMaterial.textureProperties.TryGetValue(textureKey, out var textureIdx)) + // 任意の shader の import を許容する + if (/*vrmMaterial.shader == MToon.Utils.ShaderName &&*/ vrmMaterial.textureProperties.TryGetValue(textureKey, out var textureIdx)) { var (offset, scale) = (new Vector2(0, 0), new Vector2(1, 1)); if (TryGetTextureOffsetAndScale(vrm, materialIdx, textureKey, out var os)) diff --git a/Assets/VRM/Runtime/IO/VrmTextureDescriptorGenerator.cs b/Assets/VRM/Runtime/IO/VrmTextureDescriptorGenerator.cs index babf987cd..4d1266dff 100644 --- a/Assets/VRM/Runtime/IO/VrmTextureDescriptorGenerator.cs +++ b/Assets/VRM/Runtime/IO/VrmTextureDescriptorGenerator.cs @@ -40,18 +40,18 @@ namespace VRM var material = parser.GLTF.materials[materialIdx]; var vrmMaterial = vrm.materialProperties[materialIdx]; - if (vrmMaterial.shader == MToon.Utils.ShaderName) + if (vrmMaterial.shader == VRM.glTF_VRM_Material.VRM_USE_GLTFSHADER) { - // MToon - foreach (var kv in VRMMToonTextureImporter.EnumerateAllTextures(parser, vrm, materialIdx)) + // Unlit or PBR + foreach (var kv in GltfPbrTextureImporter.EnumerateAllTextures(parser, materialIdx)) { yield return kv; } } else { - // Unlit or PBR - foreach (var kv in GltfPbrTextureImporter.EnumerateAllTextures(parser, materialIdx)) + // MToon など任意の shader + foreach (var kv in VRMMToonTextureImporter.EnumerateAllTextures(parser, vrm, materialIdx)) { yield return kv; } diff --git a/Assets/VRM/Tests/VRMTextureEnumerateTests.cs b/Assets/VRM/Tests/VRMTextureEnumerateTests.cs index 80a9d80cf..f7d602a61 100644 --- a/Assets/VRM/Tests/VRMTextureEnumerateTests.cs +++ b/Assets/VRM/Tests/VRMTextureEnumerateTests.cs @@ -76,5 +76,60 @@ namespace VRM Assert.AreEqual(1, items.Length); } } + + [Test] + public void TextureEnumerationInUnknownShader() + { + var parser = new GltfParser + { + GLTF = new glTF + { + images = new List + { + new glTFImage{ + mimeType = "image/png", + } + }, + textures = new List + { + new glTFTexture{ + name = "texture0", + source = 0, + } + }, + materials = new List + { + new glTFMaterial{ + pbrMetallicRoughness = new glTFPbrMetallicRoughness{ + baseColorTexture = new glTFMaterialBaseColorTextureInfo{ + index = 0, + } + } + }, + } + } + }; + var vrm = new glTF_VRM_extensions + { + materialProperties = new List + { + new glTF_VRM_Material + { + shader = "UnknownShader", + textureProperties = new Dictionary + { + {"_MainTex", 0}, + } + }, + } + }; + + // 2系統ある? + Assert.IsTrue(VRMMToonMaterialImporter.TryCreateParam(parser, vrm, 0, out VRMShaders.MaterialDescriptor matDesc)); + Assert.AreEqual(1, matDesc.TextureSlots.Count); + + var items = new VrmTextureDescriptorGenerator(parser, vrm).Get().GetEnumerable().ToArray(); + Assert.AreEqual(1, items.Length); + } } }