Refactor material handling to support detailed and distant LOD materials

This commit is contained in:
2026-04-29 23:17:29 +02:00
parent f85add9853
commit 3089501d28

View File

@@ -8991,19 +8991,24 @@ export class ViewportHost {
} }
const displayedTerrain = this.getDisplayedTerrainState(terrainId) ?? terrain; const displayedTerrain = this.getDisplayedTerrainState(terrainId) ?? terrain;
const previousMaterial = renderObjects.material; const previousDetailMaterial = renderObjects.detailMaterial;
const nextMaterial = this.createTerrainMaterial(displayedTerrain); const previousDistantMaterial = renderObjects.distantMaterial;
const nextDetailMaterial = this.createTerrainMaterial(displayedTerrain);
const nextDistantMaterial = this.createTerrainDistantMaterial(displayedTerrain);
for (const chunk of renderObjects.chunks) { for (const chunk of renderObjects.chunks) {
chunk.mesh.material = nextMaterial; chunk.mesh.material =
chunk.activeLevelIndex >= 2 ? nextDistantMaterial : nextDetailMaterial;
} }
for (const pickMesh of renderObjects.pickMeshes) { for (const pickMesh of renderObjects.pickMeshes) {
pickMesh.material = nextMaterial; pickMesh.material = nextDetailMaterial;
} }
renderObjects.material = nextMaterial; renderObjects.detailMaterial = nextDetailMaterial;
previousMaterial.dispose(); renderObjects.distantMaterial = nextDistantMaterial;
previousDetailMaterial.dispose();
previousDistantMaterial.dispose();
this.updateTerrainLodVisibility(); this.updateTerrainLodVisibility();
} }