From 15301ba48d85d76c1b3f669822e067d4836881e4 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Thu, 26 Sep 2024 15:50:09 +0900 Subject: [PATCH 1/5] [vrm0][firstperson] skip -1 --- Assets/VRM/Runtime/IO/VRMExporter.cs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/Assets/VRM/Runtime/IO/VRMExporter.cs b/Assets/VRM/Runtime/IO/VRMExporter.cs index 64e77cb80..ade5cc078 100644 --- a/Assets/VRM/Runtime/IO/VRMExporter.cs +++ b/Assets/VRM/Runtime/IO/VRMExporter.cs @@ -185,11 +185,14 @@ namespace VRM { VRM.firstPerson.firstPersonBone = Nodes.IndexOf(firstPerson.FirstPersonBone); VRM.firstPerson.firstPersonBoneOffset = firstPerson.FirstPersonOffset; - VRM.firstPerson.meshAnnotations = firstPerson.Renderers.Select(x => new glTF_VRM_MeshAnnotation - { - mesh = Meshes.IndexOf(x.SharedMesh), - firstPersonFlag = x.FirstPersonFlag.ToString(), - }).ToList(); + VRM.firstPerson.meshAnnotations = firstPerson.Renderers + .Select(x => new glTF_VRM_MeshAnnotation + { + mesh = Meshes.IndexOf(x.SharedMesh), + firstPersonFlag = x.FirstPersonFlag.ToString(), + }) + .Where(x => x.mesh != -1) + .ToList(); } // lookAt From bc1edff9c91664fabc82fed26bb3b9a4a35224f5 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Thu, 26 Sep 2024 19:36:12 +0900 Subject: [PATCH 2/5] =?UTF-8?q?Renderer=20export=20=E3=81=AE=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit x.gameObject.activeInHierarchy && x.TryGetComponent(out var renderer) && renderer.enabled) mesh の export 条件と renderer の export 条件が別であることに注意。gltf の node.mesh --- .../VRM10/Runtime/IO/Model/ModelExporter.cs | 2 +- Assets/VRM10/Runtime/IO/Vrm10Exporter.cs | 26 +++++++++++++++++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/Assets/VRM10/Runtime/IO/Model/ModelExporter.cs b/Assets/VRM10/Runtime/IO/Model/ModelExporter.cs index d8f6955ba..ea7632a19 100644 --- a/Assets/VRM10/Runtime/IO/Model/ModelExporter.cs +++ b/Assets/VRM10/Runtime/IO/Model/ModelExporter.cs @@ -105,7 +105,7 @@ namespace UniVRM10 } // material and textures - var rendererComponents = root.GetComponentsInChildren(); + var rendererComponents = root.GetComponentsInChildren().Where(x => x.gameObject.activeInHierarchy && x.enabled).ToArray(); { foreach (var renderer in rendererComponents) { diff --git a/Assets/VRM10/Runtime/IO/Vrm10Exporter.cs b/Assets/VRM10/Runtime/IO/Vrm10Exporter.cs index efa2ecfbb..6634b8b39 100644 --- a/Assets/VRM10/Runtime/IO/Vrm10Exporter.cs +++ b/Assets/VRM10/Runtime/IO/Vrm10Exporter.cs @@ -646,7 +646,13 @@ namespace UniVRM10 }; foreach (var f in firstPerson.Renderers) { - vrm.FirstPerson.MeshAnnotations.Add(ExportMeshAnnotation(f, vrmController.transform, getIndex)); + var annotation = ExportMeshAnnotation(f, vrmController.transform, getIndex); + if (annotation.Node < 0) + { + // maybe disabled Rendeer + continue; + } + vrm.FirstPerson.MeshAnnotations.Add(annotation); } } @@ -718,6 +724,15 @@ namespace UniVRM10 Func getIndexFromRelativePath = relativePath => { var rendererNode = vrmController.transform.GetFromPath(relativePath); + var renderer = rendererNode.GetComponent(); + if (renderer == null) + { + return -1; + } + if (!renderer.enabled) + { + return -1; + } var node = converter.Nodes[rendererNode.gameObject]; return model.Nodes.IndexOf(node); }; @@ -751,7 +766,14 @@ namespace UniVRM10 { try { - vrmExpression.MorphTargetBinds.Add(ExportMorphTargetBinding(b, getIndexFromRelativePath)); + var binding = ExportMorphTargetBinding(b, getIndexFromRelativePath); + if (binding.Node < 0) + { + // node もしくは renderer が存在しない + continue; + } + + vrmExpression.MorphTargetBinds.Add(binding); } catch (Exception ex) { From badc8a54e0a4ecbdeddcc631276143b692e7ce63 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Thu, 26 Sep 2024 19:41:34 +0900 Subject: [PATCH 3/5] =?UTF-8?q?vrm-0.x=20blendshape=20clip=20import=20?= =?UTF-8?q?=E6=99=82=E3=81=AE=20mesh=20index=20check?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/VRM/Runtime/IO/VRMImporterContext.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/VRM/Runtime/IO/VRMImporterContext.cs b/Assets/VRM/Runtime/IO/VRMImporterContext.cs index c567c1645..98dc2bf7a 100644 --- a/Assets/VRM/Runtime/IO/VRMImporterContext.cs +++ b/Assets/VRM/Runtime/IO/VRMImporterContext.cs @@ -162,7 +162,7 @@ namespace VRM // fallback asset.Preset = CachedEnum.ParseOrDefault(group.name, true); } - asset.Values = group.binds.Select(x => + asset.Values = group.binds.Where(x => x.mesh >= 0 && x.mesh < Meshes.Count).Select(x => { var mesh = Meshes[x.mesh].Mesh; var node = transformMeshTable[mesh]; From c369439dc0e799b9d56ee87871355b3c7d72c5a9 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Thu, 26 Sep 2024 19:57:17 +0900 Subject: [PATCH 4/5] =?UTF-8?q?vrm-1.0=20import=20=E6=99=82=E3=81=AE=20ind?= =?UTF-8?q?ex=20check.=20node.mesh=20=E3=81=82=E3=82=8B=E3=81=8B=EF=BC=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../VRM10/Runtime/IO/ExpressionExtensions.cs | 22 ++++++++++++++----- Assets/VRM10/Runtime/IO/Vrm10Importer.cs | 21 +++++++++++------- 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/Assets/VRM10/Runtime/IO/ExpressionExtensions.cs b/Assets/VRM10/Runtime/IO/ExpressionExtensions.cs index 18bb973eb..402a089c6 100644 --- a/Assets/VRM10/Runtime/IO/ExpressionExtensions.cs +++ b/Assets/VRM10/Runtime/IO/ExpressionExtensions.cs @@ -8,13 +8,23 @@ namespace UniVRM10 { public static class ExpressionExtensions { - public static UniVRM10.MorphTargetBinding Build10(this MorphTargetBind bind, GameObject root, Vrm10Importer.ModelMap loader, VrmLib.Model model) + public static MorphTargetBinding? Build10(this MorphTargetBind bind, GameObject root, Vrm10Importer.ModelMap loader, VrmLib.Model model) { - var libNode = model.Nodes[bind.Node.Value]; - var node = loader.Nodes[libNode].transform; - var mesh = loader.Meshes[libNode.MeshGroup]; - var relativePath = node.RelativePathFrom(root.transform); - return new UniVRM10.MorphTargetBinding(relativePath, bind.Index.Value, bind.Weight.Value); + if (bind.Node.TryGetValidIndex(model.Nodes.Count, out var nodeIndex)) + { + var libNode = model.Nodes[nodeIndex]; + if (libNode.MeshGroup == null) + { + return default; + } + var node = loader.Nodes[libNode].transform; + var relativePath = node.RelativePathFrom(root.transform); + return new MorphTargetBinding(relativePath, bind.Index.Value, bind.Weight.Value); + } + else + { + return default; + } } public static UniVRM10.MaterialColorBinding? Build10(this MaterialColorBind bind, IReadOnlyList materials) diff --git a/Assets/VRM10/Runtime/IO/Vrm10Importer.cs b/Assets/VRM10/Runtime/IO/Vrm10Importer.cs index be77bb089..ace9cb3bf 100644 --- a/Assets/VRM10/Runtime/IO/Vrm10Importer.cs +++ b/Assets/VRM10/Runtime/IO/Vrm10Importer.cs @@ -316,7 +316,10 @@ namespace UniVRM10 if (expression.MorphTargetBinds != null) { - clip.MorphTargetBindings = expression.MorphTargetBinds?.Select(x => x.Build10(Root, m_map, m_model)) + clip.MorphTargetBindings = expression.MorphTargetBinds? + .Select(x => x.Build10(Root, m_map, m_model)) + .Where(x => x.HasValue) + .Select(x => x.Value) .ToArray(); } else @@ -492,15 +495,17 @@ namespace UniVRM10 var fp = vrmExtension.FirstPerson; foreach (var x in fp.MeshAnnotations) { - var node = Nodes[x.Node.Value]; - var relative = node.RelativePathFrom(Root.transform); - vrm.FirstPerson.Renderers.Add(new RendererFirstPersonFlags + if (x.Node.TryGetValidIndex(Nodes.Count, out var index)) { - FirstPersonFlag = x.Type, - Renderer = relative, - }); + var node = Nodes[x.Node.Value]; + var relative = node.RelativePathFrom(Root.transform); + vrm.FirstPerson.Renderers.Add(new RendererFirstPersonFlags + { + FirstPersonFlag = x.Type, + Renderer = relative, + }); + } } - } else { // default 値を割り当てる From 90aa9037ad5b805256683a1a1849a13b53ea1e45 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Thu, 26 Sep 2024 20:54:25 +0900 Subject: [PATCH 5/5] fix --- Assets/VRM10/Runtime/IO/Vrm10Importer.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Assets/VRM10/Runtime/IO/Vrm10Importer.cs b/Assets/VRM10/Runtime/IO/Vrm10Importer.cs index ace9cb3bf..f458eff2e 100644 --- a/Assets/VRM10/Runtime/IO/Vrm10Importer.cs +++ b/Assets/VRM10/Runtime/IO/Vrm10Importer.cs @@ -506,6 +506,7 @@ namespace UniVRM10 }); } } + } else { // default 値を割り当てる