From 2a583509abce99136aad852354a4d20ffa1002bb Mon Sep 17 00:00:00 2001 From: syuilo <4439005+syuilo@users.noreply.github.com> Date: Sat, 4 Apr 2026 12:42:27 +0900 Subject: [PATCH] Update engine.ts --- packages/frontend/src/utility/room/engine.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/frontend/src/utility/room/engine.ts b/packages/frontend/src/utility/room/engine.ts index 3197d748a7..d1608b2e09 100644 --- a/packages/frontend/src/utility/room/engine.ts +++ b/packages/frontend/src/utility/room/engine.ts @@ -246,12 +246,16 @@ class ModelManager { toMerge.push(newMesh); } - const merged = BABYLON.Mesh.MergeMeshes(toMerge, true, true, undefined, false, true); - - //merged.bakeCurrentTransformIntoVertices(); + const groupedByMaterial = Object.groupBy(toMerge, m => m.material?.uniqueId ?? -1); + // 一度に(multiMultiMaterials: trueで)マージするよりも、いったん同じマテリアルを持つもの同士で(multiMultiMaterials: falseで)マージしてから、改めてそれらを(multiMultiMaterials: trueで)マージした方が(なぜか)ドローコールが減ってお得 + const pre = []; + for (const group of Object.values(groupedByMaterial)) { + const merged = BABYLON.Mesh.MergeMeshes(group, true, true, undefined, false, false); + pre.push(merged); + } + const merged = BABYLON.Mesh.MergeMeshes(pre, true, true, undefined, false, true); merged.parent = this.root; - this.bakedMeshes = [merged]; this.bakedCallback?.([...this.bakedMeshes, ...excludeMeshes]);