Refactor rendering host: implement LOD hysteresis and optimize renderer settings
This commit is contained in:
@@ -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: {
|
||||||
|
|||||||
Reference in New Issue
Block a user