diff --git a/src/AcDream.App/Rendering/Wb/WbDrawDispatcher.cs b/src/AcDream.App/Rendering/Wb/WbDrawDispatcher.cs index 9196bab..de29be3 100644 --- a/src/AcDream.App/Rendering/Wb/WbDrawDispatcher.cs +++ b/src/AcDream.App/Rendering/Wb/WbDrawDispatcher.cs @@ -421,14 +421,15 @@ public sealed unsafe class WbDrawDispatcher : IDisposable var model = ComposePartWorldMatrix( entityWorld, meshRef.PartTransform, partTransform); - ClassifyBatches(partData, partGfxObjId, model, entity, meshRef, palHash, metaTable); + var restPose = partTransform * meshRef.PartTransform; + ClassifyBatches(partData, partGfxObjId, model, entity, meshRef, palHash, metaTable, restPose); drewAny = true; } } else { var model = meshRef.PartTransform * entityWorld; - ClassifyBatches(renderData, gfxObjId, model, entity, meshRef, palHash, metaTable); + ClassifyBatches(renderData, gfxObjId, model, entity, meshRef, palHash, metaTable, restPose: meshRef.PartTransform); drewAny = true; } @@ -724,7 +725,9 @@ public sealed unsafe class WbDrawDispatcher : IDisposable WorldEntity entity, MeshRef meshRef, ulong palHash, - AcSurfaceMetadataTable metaTable) + AcSurfaceMetadataTable metaTable, + Matrix4x4 restPose, + List? collector = null) { for (int batchIdx = 0; batchIdx < renderData.Batches.Count; batchIdx++) { @@ -768,6 +771,7 @@ public sealed unsafe class WbDrawDispatcher : IDisposable _groups[key] = grp; } grp.Matrices.Add(model); + collector?.Add(new CachedBatch(key, texHandle, restPose)); } }