Refactor rendering host: implement LOD hysteresis and optimize renderer settings

This commit is contained in:
2026-04-29 23:48:45 +02:00
parent 43c7eec198
commit d601c19890

View File

@@ -73,7 +73,7 @@ import { buildBoxBrushDerivedMeshData } from "../geometry/box-brush-mesh";
import { import {
buildTerrainDerivedMeshData, buildTerrainDerivedMeshData,
buildTerrainLodMeshData, buildTerrainLodMeshData,
resolveTerrainLodLevelIndex resolveTerrainLodLevelIndexWithHysteresis
} from "../geometry/terrain-mesh"; } from "../geometry/terrain-mesh";
import { import {
createStarterMaterialSignature, createStarterMaterialSignature,
@@ -143,6 +143,7 @@ import {
enableCameraRendererRenderCategories, enableCameraRendererRenderCategories,
enableObjectForAllRendererRenderCategories enableObjectForAllRendererRenderCategories
} from "../rendering/render-layers"; } from "../rendering/render-layers";
import { getRendererPixelRatio } from "../rendering/renderer-pixel-ratio";
import { import {
areAdvancedRenderingSettingsEqual, areAdvancedRenderingSettingsEqual,
cloneAdvancedRenderingSettings, cloneAdvancedRenderingSettings,
@@ -895,13 +896,17 @@ export class RuntimeHost {
this.underwaterSceneFog.density = 0; this.underwaterSceneFog.density = 0;
this.scene.fog = this.underwaterSceneFog; this.scene.fog = this.underwaterSceneFog;
this.renderer = enableRendering this.renderer = enableRendering
? new WebGLRenderer({ antialias: false, alpha: true }) ? new WebGLRenderer({
antialias: false,
alpha: true,
powerPreference: "high-performance"
})
: null; : null;
this.domElement = this.domElement =
this.renderer?.domElement ?? document.createElement("canvas"); this.renderer?.domElement ?? document.createElement("canvas");
if (this.renderer !== null) { if (this.renderer !== null) {
this.renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2)); this.renderer.setPixelRatio(getRendererPixelRatio());
this.renderer.setClearAlpha(0); this.renderer.setClearAlpha(0);
} else { } else {
this.domElement.className = "runner-canvas__surface"; this.domElement.className = "runner-canvas__surface";
@@ -4111,8 +4116,9 @@ export class RuntimeHost {
for (const renderObjects of this.terrainMeshes.values()) { for (const renderObjects of this.terrainMeshes.values()) {
for (const chunk of renderObjects.chunks) { for (const chunk of renderObjects.chunks) {
const nextLevelIndex = resolveTerrainLodLevelIndex({ const nextLevelIndex = resolveTerrainLodLevelIndexWithHysteresis({
levelCount: chunk.levelGeometries.length, levelCount: chunk.levelGeometries.length,
activeLevelIndex: chunk.activeLevelIndex,
chunkDiagonal: chunk.diagonal, chunkDiagonal: chunk.diagonal,
cameraPosition, cameraPosition,
chunkWorldCenter: { chunkWorldCenter: {