From dae6d334634f6d437f3986df60d1addc3f1ed660 Mon Sep 17 00:00:00 2001 From: anatawa12 Date: Mon, 6 Nov 2023 17:34:05 +0900 Subject: [PATCH 1/2] chore: do not add bone for boneless mesh renderer --- .../MergeSkinnedMeshProcessor.cs | 1 + Editor/Processors/SkinnedMeshes/MeshInfo2.cs | 19 +++++++++---------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Editor/Processors/SkinnedMeshes/MergeSkinnedMeshProcessor.cs b/Editor/Processors/SkinnedMeshes/MergeSkinnedMeshProcessor.cs index 39cad276e..54469d5eb 100644 --- a/Editor/Processors/SkinnedMeshes/MergeSkinnedMeshProcessor.cs +++ b/Editor/Processors/SkinnedMeshes/MergeSkinnedMeshProcessor.cs @@ -51,6 +51,7 @@ public override void Process(BuildContext context, MeshInfo2 target) .ToArray(); foreach (var meshInfo2 in meshInfos) meshInfo2.FlattenMultiPassRendering("Merge Skinned Mesh"); + foreach (var meshInfo2 in meshInfos) meshInfo2.MakeBoned(); var sourceMaterials = meshInfos.Select(x => x.SubMeshes.Select(y => (y.Topology, y.SharedMaterial)).ToArray()).ToArray(); Profiler.EndSample(); diff --git a/Editor/Processors/SkinnedMeshes/MeshInfo2.cs b/Editor/Processors/SkinnedMeshes/MeshInfo2.cs index b86c0a52b..1ba448499 100644 --- a/Editor/Processors/SkinnedMeshes/MeshInfo2.cs +++ b/Editor/Processors/SkinnedMeshes/MeshInfo2.cs @@ -18,8 +18,8 @@ namespace Anatawa12.AvatarOptimizer.Processors.SkinnedMeshes { internal class MeshInfo2 { - public readonly Renderer SourceRenderer; - public Transform RootBone; + [NotNull] public readonly Renderer SourceRenderer; + [NotNull] public Transform RootBone; public Bounds Bounds; public readonly List Vertices = new List(0); @@ -46,10 +46,6 @@ public MeshInfo2(SkinnedMeshRenderer renderer) if (mesh) ReadSkinnedMesh(mesh); - // if there's no bones: add one fake bone - if (Bones.Count == 0) - SetIdentityBone(renderer.rootBone ? renderer.rootBone : renderer.transform); - Bounds = renderer.localBounds; RootBone = renderer.rootBone ? renderer.rootBone : renderer.transform; @@ -80,8 +76,6 @@ public MeshInfo2(MeshRenderer renderer) if (mesh) ReadStaticMesh(mesh); - SetIdentityBone(renderer.transform); - if (mesh) Bounds = mesh.bounds; RootBone = renderer.transform; @@ -131,9 +125,14 @@ public void AssertInvariantContract(string context) $"{context}: some SubMesh has invalid bone weights"); } - private void SetIdentityBone(Transform transform) + /// + /// Makes all vertices in this MeshInfo2 boned. + /// + public void MakeBoned() { - Bones.Add(new Bone(Matrix4x4.identity, transform)); + if (Bones.Count != 0) return; + + Bones.Add(new Bone(Matrix4x4.identity, RootBone)); foreach (var vertex in Vertices) vertex.BoneWeights.Add((Bones[0], 1f)); From 5a60ee5cbc430701ade1545d0a4fa8481093395b Mon Sep 17 00:00:00 2001 From: anatawa12 Date: Mon, 6 Nov 2023 18:43:06 +0900 Subject: [PATCH 2/2] docs(changelog): complex shader with SkinnedMeshRenderer without Bones Brokebn --- CHANGELOG-PRERELEASE.md | 1 + CHANGELOG.md | 1 + 2 files changed, 2 insertions(+) diff --git a/CHANGELOG-PRERELEASE.md b/CHANGELOG-PRERELEASE.md index 7dc9f6ac3..5b364fd0c 100644 --- a/CHANGELOG-PRERELEASE.md +++ b/CHANGELOG-PRERELEASE.md @@ -21,6 +21,7 @@ The format is based on [Keep a Changelog]. ### Fixed - proxy animation can be modified `#678` +- complex shader with SkinnedMeshRenderer without Bones Brokebn `#694` ### Security diff --git a/CHANGELOG.md b/CHANGELOG.md index 3408d616d..d6b7bdf76 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,6 +35,7 @@ The format is based on [Keep a Changelog]. - Improve support of newer Unity versions `#608` - Improve support of projects without VRCSDK `#609` `#625` `#627` - Prefab blinks when we see editor of PrefabSafeSet of prefab asset `#645` `#664` +- complex shader with SkinnedMeshRenderer without Bones Brokebn `#694` ### Security