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