From d95aa73577ef03f3e5545d8bbd6c83e12e0f6955 Mon Sep 17 00:00:00 2001 From: Masataka SUMI Date: Tue, 29 Jun 2021 22:37:11 +0900 Subject: [PATCH 1/2] Fix error when material count was zero in VRM --- Assets/VRM/Runtime/IO/VRMMToonMaterialImporter.cs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Assets/VRM/Runtime/IO/VRMMToonMaterialImporter.cs b/Assets/VRM/Runtime/IO/VRMMToonMaterialImporter.cs index 4ab6d48a3..7a5b2b041 100644 --- a/Assets/VRM/Runtime/IO/VRMMToonMaterialImporter.cs +++ b/Assets/VRM/Runtime/IO/VRMMToonMaterialImporter.cs @@ -8,6 +8,17 @@ namespace VRM { public static bool TryCreateParam(GltfData data, glTF_VRM_extensions vrm, int materialIdx, out MaterialDescriptor matDesc) { + if (vrm?.materialProperties == null || vrm.materialProperties.Count == 0) + { + matDesc = default; + return false; + } + if (materialIdx < 0 || materialIdx >= vrm.materialProperties.Count) + { + matDesc = default; + return false; + } + var vrmMaterial = vrm.materialProperties[materialIdx]; if (vrmMaterial.shader == VRM.glTF_VRM_Material.VRM_USE_GLTFSHADER) { @@ -42,7 +53,7 @@ namespace VRM foreach (var kv in vrmMaterial.textureProperties) { - if (VRMMToonTextureImporter.TryGetTextureFromMaterialProperty(data, vrm, materialIdx, kv.Key, out var texture)) + if (VRMMToonTextureImporter.TryGetTextureFromMaterialProperty(data, vrmMaterial, kv.Key, out var texture)) { matDesc.TextureSlots.Add(kv.Key, texture.Item2); } From 5bfa273750250a321a9404ca7b0965e36774377e Mon Sep 17 00:00:00 2001 From: Masataka SUMI Date: Tue, 29 Jun 2021 22:39:25 +0900 Subject: [PATCH 2/2] suppress deserialize --- Assets/VRM/Runtime/IO/VRMMToonTextureImporter.cs | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/Assets/VRM/Runtime/IO/VRMMToonTextureImporter.cs b/Assets/VRM/Runtime/IO/VRMMToonTextureImporter.cs index 596999e89..de8dd3622 100644 --- a/Assets/VRM/Runtime/IO/VRMMToonTextureImporter.cs +++ b/Assets/VRM/Runtime/IO/VRMMToonTextureImporter.cs @@ -12,21 +12,19 @@ namespace VRM var vrmMaterial = vrm.materialProperties[materialIdx]; foreach (var kv in vrmMaterial.textureProperties) { - if (TryGetTextureFromMaterialProperty(data, vrm, materialIdx, kv.Key, out var texture)) + if (TryGetTextureFromMaterialProperty(data, vrmMaterial, kv.Key, out var texture)) { yield return texture; } } } - - public static bool TryGetTextureFromMaterialProperty(GltfData data, glTF_VRM_extensions vrm, int materialIdx, string textureKey, out (SubAssetKey, TextureDescriptor) texture) + public static bool TryGetTextureFromMaterialProperty(GltfData data, glTF_VRM_Material vrmMaterial, string textureKey, out (SubAssetKey, TextureDescriptor) texture) { - var vrmMaterial = vrm.materialProperties[materialIdx]; // 任意の 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)) + if (TryGetTextureOffsetAndScale(vrmMaterial, textureKey, out var os)) { offset = os.offset; scale = os.scale; @@ -48,10 +46,8 @@ namespace VRM return false; } - public static bool TryGetTextureOffsetAndScale(glTF_VRM_extensions vrm, int materialIdx, string unityTextureKey, out (Vector2 offset, Vector2 scale) os) + public static bool TryGetTextureOffsetAndScale(glTF_VRM_Material vrmMaterial, string unityTextureKey, out (Vector2 offset, Vector2 scale) os) { - var vrmMaterial = vrm.materialProperties[materialIdx]; - if (vrmMaterial.vectorProperties.TryGetValue(unityTextureKey, out var vector)) { os = (new Vector2(vector[0], vector[1]), new Vector2(vector[2], vector[3]));