From bf26163c43518513c4fce1b84ead9be7f13fac83 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Sun, 20 May 2018 05:24:26 +0900 Subject: [PATCH] Implement normalization for MeshRenderer --- .../Editor/BoneNormalizer.cs | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/Scripts/SkinnedMeshUtility/Editor/BoneNormalizer.cs b/Scripts/SkinnedMeshUtility/Editor/BoneNormalizer.cs index 2da7592a5..778923f5f 100644 --- a/Scripts/SkinnedMeshUtility/Editor/BoneNormalizer.cs +++ b/Scripts/SkinnedMeshUtility/Editor/BoneNormalizer.cs @@ -300,7 +300,7 @@ namespace VRM if (srcRenderer!=null && srcRenderer.enabled) { var dstFilter = dst.gameObject.AddComponent(); - dstFilter.sharedMesh = srcFilter.sharedMesh; + dstFilter.sharedMesh = TransformMesh(srcFilter.sharedMesh, src.localToWorldMatrix); var dstRenderer = dst.gameObject.AddComponent(); dstRenderer.sharedMaterials = srcRenderer.sharedMaterials; @@ -311,5 +311,32 @@ namespace VRM return normalized; } + + static Mesh TransformMesh(Mesh src, Matrix4x4 m) + { + m.SetColumn(3, new Vector4(0, 0, 0, 1)); + + var mesh = new Mesh(); + mesh.name = src.name + "(transformed)"; + + mesh.vertices = src.vertices.Select(x => m.MultiplyPoint(x)).ToArray(); + if(src.normals!=null)mesh.normals = src.normals.Select(x => m.MultiplyVector(x)).ToArray(); + if(src.tangents!=null)mesh.tangents = src.tangents.Select(x => + { + var v = m.MultiplyVector(x); + return new Vector4(v.x, v.y, v.z, x.w); + }).ToArray(); + mesh.uv = src.uv; + mesh.uv2 = src.uv2; + mesh.uv3 = src.uv3; + mesh.uv4 = src.uv4; + mesh.colors = src.colors; + mesh.subMeshCount = src.subMeshCount; + for(int i=0; i