From 4650fa1e1cafe235aa157cff8f8e76b5be0b8625 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Wed, 2 Mar 2022 16:35:10 +0900 Subject: [PATCH] =?UTF-8?q?blendshape=20=E3=81=8C=E7=84=A1=E3=81=AB?= =?UTF-8?q?=E3=81=AA=E3=82=8B=E3=83=90=E3=82=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Runtime/UniGLTF/IO/MeshIO/MeshContext.cs | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/MeshIO/MeshContext.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/MeshIO/MeshContext.cs index 3b5f9c050..48e54d0a9 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/IO/MeshIO/MeshContext.cs +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/MeshIO/MeshContext.cs @@ -415,35 +415,40 @@ namespace UniGLTF for (int i = 0; i < primitives.targets.Count; ++i) { var primTarget = primitives.targets[i]; - var blendShape = new BlendShape(i.ToString(), positions.Length, primTarget.POSITION != -1, primTarget.NORMAL != -1, primTarget.TANGENT != -1); + + var hasPosition = primTarget.POSITION != -1 && data.GLTF.accessors[primTarget.POSITION].count == positions.Length; + var hasNormal = primTarget.NORMAL != -1 && data.GLTF.accessors[primTarget.NORMAL].count == positions.Length; + var hasTangent = primTarget.TANGENT != -1 && data.GLTF.accessors[primTarget.TANGENT].count == positions.Length; + + var blendShape = new BlendShape(i.ToString(), positions.Length, hasPosition, hasNormal, hasTangent); _blendShapes.Add(blendShape); - if (primTarget.POSITION != -1) + if (hasPosition) { var morphPositions = data.GetArrayFromAccessor(primTarget.POSITION); blendShape.Positions.Capacity = morphPositions.Length; - for (var j = 0; j < blendShape.Positions.Count; ++j) + for (var j = 0; j < positions.Length; ++j) { blendShape.Positions.Add(inverter.InvertVector3(morphPositions[j])); } } - if (primTarget.NORMAL != -1) + if (hasNormal) { var morphNormals = data.GetArrayFromAccessor(primTarget.NORMAL); blendShape.Normals.Capacity = morphNormals.Length; - for (var j = 0; j < blendShape.Positions.Count; ++j) + for (var j = 0; j < positions.Length; ++j) { blendShape.Normals.Add(inverter.InvertVector3(morphNormals[j])); } } - if (primTarget.TANGENT != -1) + if (hasTangent) { var morphTangents = data.GetArrayFromAccessor(primTarget.TANGENT); blendShape.Tangents.Capacity = morphTangents.Length; - for (var j = 0; j < blendShape.Tangents.Count; ++j) + for (var j = 0; j < positions.Length; ++j) { blendShape.Tangents.Add(inverter.InvertVector3(morphTangents[j])); }