Enhance foliage rendering with quality controls and update view synchronization across hosts
This commit is contained in:
@@ -194,6 +194,11 @@ import {
|
||||
ADVANCED_RENDERING_SHADOW_MAP_SIZES,
|
||||
ADVANCED_RENDERING_SHADOW_TYPES,
|
||||
ADVANCED_RENDERING_TONE_MAPPING_MODES,
|
||||
FOLIAGE_QUALITY_SHADOW_MODES,
|
||||
MAX_FOLIAGE_QUALITY_DENSITY_MULTIPLIER,
|
||||
MAX_FOLIAGE_QUALITY_MAX_DISTANCE_MULTIPLIER,
|
||||
MIN_FOLIAGE_QUALITY_DENSITY_MULTIPLIER,
|
||||
MIN_FOLIAGE_QUALITY_MAX_DISTANCE_MULTIPLIER,
|
||||
areWorldSettingsEqual,
|
||||
changeWorldBackgroundMode,
|
||||
cloneWorldSettings,
|
||||
@@ -211,6 +216,7 @@ import {
|
||||
type AdvancedRenderingShadowMapSize,
|
||||
type AdvancedRenderingShadowType,
|
||||
type AdvancedRenderingToneMappingMode,
|
||||
type FoliageQualityShadowMode,
|
||||
type WorldShaderSkySettings,
|
||||
type WorldSettings
|
||||
} from "../document/world-settings";
|
||||
@@ -1150,6 +1156,10 @@ function readUnitIntervalNumberDraft(source: string, label: string): number {
|
||||
return value;
|
||||
}
|
||||
|
||||
function clampNumber(value: number, min: number, max: number): number {
|
||||
return Math.min(max, Math.max(min, value));
|
||||
}
|
||||
|
||||
function assertAdvancedRenderingDistanceFogRange(
|
||||
distanceFog: AdvancedRenderingDistanceFogSettings
|
||||
) {
|
||||
|
||||
@@ -142,6 +142,7 @@ function scaleFoliageLayerRegistryDensities(
|
||||
|
||||
function createRenderViewFromCamera(camera: Camera): FoliageRenderView {
|
||||
camera.updateMatrixWorld();
|
||||
camera.matrixWorldInverse.copy(camera.matrixWorld).invert();
|
||||
const cameraPosition = new Vector3();
|
||||
camera.getWorldPosition(cameraPosition);
|
||||
const projectionViewMatrix = new Matrix4().multiplyMatrices(
|
||||
|
||||
@@ -5030,8 +5030,10 @@ export class RuntimeHost {
|
||||
this.foliageRenderer.sync({
|
||||
terrains: runtimeScene.foliage.terrains,
|
||||
foliageLayers: runtimeScene.foliage.layers,
|
||||
foliagePrototypes: runtimeScene.foliage.prototypes
|
||||
foliagePrototypes: runtimeScene.foliage.prototypes,
|
||||
quality: runtimeScene.world.advancedRendering.foliage
|
||||
});
|
||||
this.foliageRenderer.updateView(this.camera);
|
||||
}
|
||||
|
||||
private disposeUniqueMaterials(materials: Material[]) {
|
||||
@@ -5363,6 +5365,7 @@ export class RuntimeHost {
|
||||
}
|
||||
|
||||
this.updateTerrainLodVisibility();
|
||||
this.foliageRenderer.updateView(this.camera);
|
||||
this.updateUnderwaterSceneFog();
|
||||
this.syncCelestialShadowState();
|
||||
|
||||
|
||||
@@ -6657,8 +6657,10 @@ export class ViewportHost {
|
||||
this.foliageRenderer.sync({
|
||||
terrains: document.terrains,
|
||||
foliageLayers: document.foliageLayers,
|
||||
foliagePrototypes: document.foliagePrototypes
|
||||
foliagePrototypes: document.foliagePrototypes,
|
||||
quality: document.world.advancedRendering.foliage
|
||||
});
|
||||
this.foliageRenderer.updateView(this.getActiveCamera());
|
||||
}
|
||||
|
||||
private createTerrainRenderObjects(terrain: Terrain): TerrainRenderObjects {
|
||||
@@ -11569,6 +11571,7 @@ export class ViewportHost {
|
||||
this.updateGridPositioning();
|
||||
this.updateTransformGizmoPose();
|
||||
this.updateTerrainLodVisibility();
|
||||
this.foliageRenderer.updateView(this.getActiveCamera());
|
||||
this.volumeTime += dt;
|
||||
|
||||
for (const uniform of this.volumeAnimatedUniforms) {
|
||||
|
||||
Reference in New Issue
Block a user