Implement detail and distant materials for terrain rendering objects

This commit is contained in:
2026-04-29 23:17:02 +02:00
parent 6f290c560a
commit 659af46d87

View File

@@ -6412,7 +6412,8 @@ export class ViewportHost {
} }
private createTerrainRenderObjects(terrain: Terrain): TerrainRenderObjects { private createTerrainRenderObjects(terrain: Terrain): TerrainRenderObjects {
const material = this.createTerrainMaterial(terrain); const detailMaterial = this.createTerrainMaterial(terrain);
const distantMaterial = this.createTerrainDistantMaterial(terrain);
const debugMaterials = TERRAIN_LOD_DEBUG_COLORS.map( const debugMaterials = TERRAIN_LOD_DEBUG_COLORS.map(
(color) => (color) =>
new MeshBasicMaterial({ new MeshBasicMaterial({
@@ -6433,7 +6434,7 @@ export class ViewportHost {
for (const chunk of lodMeshData.chunks) { for (const chunk of lodMeshData.chunks) {
const levelGeometries = chunk.levels.map((level) => level.geometry); const levelGeometries = chunk.levels.map((level) => level.geometry);
const mesh = new Mesh(levelGeometries[0]!, material); const mesh = new Mesh(levelGeometries[0]!, detailMaterial);
mesh.userData.terrainId = terrain.id; mesh.userData.terrainId = terrain.id;
mesh.userData.terrainLodLevel = 0; mesh.userData.terrainLodLevel = 0;
mesh.castShadow = false; mesh.castShadow = false;
@@ -6450,7 +6451,7 @@ export class ViewportHost {
applyRendererRenderCategory(debugMesh, "overlay"); applyRendererRenderCategory(debugMesh, "overlay");
group.add(debugMesh); group.add(debugMesh);
const pickMesh = new Mesh(levelGeometries[0]!, material); const pickMesh = new Mesh(levelGeometries[0]!, detailMaterial);
pickMesh.visible = false; pickMesh.visible = false;
pickMesh.userData.terrainId = terrain.id; pickMesh.userData.terrainId = terrain.id;
group.add(pickMesh); group.add(pickMesh);
@@ -6473,7 +6474,8 @@ export class ViewportHost {
return { return {
group, group,
chunks, chunks,
material, detailMaterial,
distantMaterial,
debugMaterials, debugMaterials,
pickMeshes pickMeshes
}; };