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