Improve terrain material handling and distant preview generation
This commit is contained in:
@@ -6386,6 +6386,28 @@ export class ViewportHost {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private createTerrainDistantMaterial(terrain: Terrain): Material {
|
||||||
|
const active = this.currentActiveSelectionId === terrain.id;
|
||||||
|
const selected = isTerrainSelected(this.currentSelection, terrain.id);
|
||||||
|
const hovered = isTerrainSelected(this.hoveredSelection, terrain.id);
|
||||||
|
const layerColors = terrain.layers.map((layer) =>
|
||||||
|
getTerrainLayerPreviewColor(this.resolveTerrainLayerMaterial(layer.materialId))
|
||||||
|
) as [number, number, number, number];
|
||||||
|
|
||||||
|
return createTerrainLayerColorBlendMaterial({
|
||||||
|
layerColors,
|
||||||
|
emissiveHex: active
|
||||||
|
? TERRAIN_ACTIVE_EMISSIVE
|
||||||
|
: selected
|
||||||
|
? TERRAIN_SELECTED_EMISSIVE
|
||||||
|
: hovered
|
||||||
|
? TERRAIN_HOVERED_EMISSIVE
|
||||||
|
: 0x000000,
|
||||||
|
emissiveIntensity: active ? 0.26 : selected ? 0.18 : hovered ? 0.08 : 0,
|
||||||
|
wireframe: this.displayMode === "wireframe"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private rebuildTerrains(
|
private rebuildTerrains(
|
||||||
document: SceneDocument,
|
document: SceneDocument,
|
||||||
_selection: EditorSelection,
|
_selection: EditorSelection,
|
||||||
@@ -6506,6 +6528,10 @@ export class ViewportHost {
|
|||||||
chunk.activeLevelIndex = nextLevelIndex;
|
chunk.activeLevelIndex = nextLevelIndex;
|
||||||
chunk.mesh.geometry = chunk.levelGeometries[nextLevelIndex]!;
|
chunk.mesh.geometry = chunk.levelGeometries[nextLevelIndex]!;
|
||||||
chunk.mesh.userData.terrainLodLevel = nextLevelIndex;
|
chunk.mesh.userData.terrainLodLevel = nextLevelIndex;
|
||||||
|
chunk.mesh.material =
|
||||||
|
nextLevelIndex >= 2
|
||||||
|
? renderObjects.distantMaterial
|
||||||
|
: renderObjects.detailMaterial;
|
||||||
chunk.debugMesh.geometry = chunk.levelGeometries[nextLevelIndex]!;
|
chunk.debugMesh.geometry = chunk.levelGeometries[nextLevelIndex]!;
|
||||||
chunk.debugMesh.material =
|
chunk.debugMesh.material =
|
||||||
renderObjects.debugMaterials[nextLevelIndex] ??
|
renderObjects.debugMaterials[nextLevelIndex] ??
|
||||||
|
|||||||
Reference in New Issue
Block a user