Implement advanced atmospheric rendering settings (sky blend, horizon strength, height falloff)
This commit is contained in:
@@ -165,6 +165,7 @@ import {
|
||||
import {
|
||||
BOX_BRUSH_SCENE_DOCUMENT_VERSION,
|
||||
ANIMATION_PLAYBACK_SCENE_DOCUMENT_VERSION,
|
||||
ATMOSPHERE_POLISH_SCENE_DOCUMENT_VERSION,
|
||||
AUTHORED_TERRAIN_COLLISION_SCENE_DOCUMENT_VERSION,
|
||||
AUTHORED_TERRAIN_FOUNDATION_SCENE_DOCUMENT_VERSION,
|
||||
AUTHORED_TERRAIN_PAINT_SCENE_DOCUMENT_VERSION,
|
||||
@@ -1019,6 +1020,21 @@ function readAdvancedRenderingSettings(
|
||||
distanceFog?.renderDistance,
|
||||
"world.advancedRendering.distanceFog.renderDistance",
|
||||
defaults.distanceFog.renderDistance
|
||||
),
|
||||
skyBlend: readOptionalNonNegativeFiniteNumber(
|
||||
distanceFog?.skyBlend,
|
||||
"world.advancedRendering.distanceFog.skyBlend",
|
||||
defaults.distanceFog.skyBlend
|
||||
),
|
||||
horizonStrength: readOptionalNonNegativeFiniteNumber(
|
||||
distanceFog?.horizonStrength,
|
||||
"world.advancedRendering.distanceFog.horizonStrength",
|
||||
defaults.distanceFog.horizonStrength
|
||||
),
|
||||
heightFalloff: readOptionalNonNegativeFiniteNumber(
|
||||
distanceFog?.heightFalloff,
|
||||
"world.advancedRendering.distanceFog.heightFalloff",
|
||||
defaults.distanceFog.heightFalloff
|
||||
)
|
||||
},
|
||||
godRays: {
|
||||
@@ -5679,6 +5695,7 @@ export function migrateSceneDocument(source: unknown): SceneDocument {
|
||||
source.version !== DYNAMIC_GLOBAL_ILLUMINATION_SCENE_DOCUMENT_VERSION &&
|
||||
source.version !== DISTANCE_FOG_SCENE_DOCUMENT_VERSION &&
|
||||
source.version !== GOD_RAYS_SCENE_DOCUMENT_VERSION &&
|
||||
source.version !== ATMOSPHERE_POLISH_SCENE_DOCUMENT_VERSION &&
|
||||
source.version !== SCENE_DOCUMENT_VERSION &&
|
||||
source.version !== FOLLOW_ACTOR_PATH_SMOOTH_SCENE_DOCUMENT_VERSION
|
||||
) {
|
||||
|
||||
@@ -1239,6 +1239,41 @@ function validateWorldSettings(
|
||||
);
|
||||
}
|
||||
|
||||
if (!isFiniteNumberInRange(advancedRendering.distanceFog.skyBlend, 0, 1)) {
|
||||
diagnostics.push(
|
||||
createDiagnostic(
|
||||
"error",
|
||||
"invalid-advanced-rendering-distance-fog-sky-blend",
|
||||
"Advanced rendering distance fog sky blend must be a finite number between 0 and 1.",
|
||||
"world.advancedRendering.distanceFog.skyBlend"
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
if (
|
||||
!isFiniteNumberInRange(advancedRendering.distanceFog.horizonStrength, 0, 1)
|
||||
) {
|
||||
diagnostics.push(
|
||||
createDiagnostic(
|
||||
"error",
|
||||
"invalid-advanced-rendering-distance-fog-horizon-strength",
|
||||
"Advanced rendering distance fog horizon strength must be a finite number between 0 and 1.",
|
||||
"world.advancedRendering.distanceFog.horizonStrength"
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
if (!isNonNegativeFiniteNumber(advancedRendering.distanceFog.heightFalloff)) {
|
||||
diagnostics.push(
|
||||
createDiagnostic(
|
||||
"error",
|
||||
"invalid-advanced-rendering-distance-fog-height-falloff",
|
||||
"Advanced rendering distance fog height falloff must be a non-negative finite number.",
|
||||
"world.advancedRendering.distanceFog.heightFalloff"
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
if (!isBoolean(advancedRendering.godRays.enabled)) {
|
||||
diagnostics.push(
|
||||
createDiagnostic(
|
||||
|
||||
@@ -29,7 +29,8 @@ import {
|
||||
} from "../sequencer/project-sequences";
|
||||
import type { Terrain } from "./terrains";
|
||||
|
||||
export const SCENE_DOCUMENT_VERSION = 87 as const;
|
||||
export const SCENE_DOCUMENT_VERSION = 88 as const;
|
||||
export const ATMOSPHERE_POLISH_SCENE_DOCUMENT_VERSION = 88 as const;
|
||||
export const GOD_RAYS_SCENE_DOCUMENT_VERSION = 87 as const;
|
||||
export const DISTANCE_FOG_SCENE_DOCUMENT_VERSION = 86 as const;
|
||||
export const DYNAMIC_GLOBAL_ILLUMINATION_SCENE_DOCUMENT_VERSION = 85 as const;
|
||||
|
||||
@@ -174,6 +174,9 @@ export interface AdvancedRenderingDistanceFogSettings {
|
||||
farDistance: number;
|
||||
strength: number;
|
||||
renderDistance: number;
|
||||
skyBlend: number;
|
||||
horizonStrength: number;
|
||||
heightFalloff: number;
|
||||
}
|
||||
|
||||
export interface AdvancedRenderingGodRaysSettings {
|
||||
@@ -291,6 +294,9 @@ const DEFAULT_ADVANCED_RENDERING_DISTANCE_FOG_NEAR_DISTANCE = 70;
|
||||
const DEFAULT_ADVANCED_RENDERING_DISTANCE_FOG_FAR_DISTANCE = 180;
|
||||
const DEFAULT_ADVANCED_RENDERING_DISTANCE_FOG_STRENGTH = 0.85;
|
||||
const DEFAULT_ADVANCED_RENDERING_DISTANCE_FOG_RENDER_DISTANCE = 220;
|
||||
const DEFAULT_ADVANCED_RENDERING_DISTANCE_FOG_SKY_BLEND = 0.35;
|
||||
const DEFAULT_ADVANCED_RENDERING_DISTANCE_FOG_HORIZON_STRENGTH = 0.55;
|
||||
const DEFAULT_ADVANCED_RENDERING_DISTANCE_FOG_HEIGHT_FALLOFF = 0.012;
|
||||
const DEFAULT_ADVANCED_RENDERING_GOD_RAYS_INTENSITY = 0.35;
|
||||
const DEFAULT_ADVANCED_RENDERING_GOD_RAYS_DECAY = 0.92;
|
||||
const DEFAULT_ADVANCED_RENDERING_GOD_RAYS_EXPOSURE = 0.28;
|
||||
@@ -556,7 +562,10 @@ export function createDefaultAdvancedRenderingSettings(): AdvancedRenderingSetti
|
||||
nearDistance: DEFAULT_ADVANCED_RENDERING_DISTANCE_FOG_NEAR_DISTANCE,
|
||||
farDistance: DEFAULT_ADVANCED_RENDERING_DISTANCE_FOG_FAR_DISTANCE,
|
||||
strength: DEFAULT_ADVANCED_RENDERING_DISTANCE_FOG_STRENGTH,
|
||||
renderDistance: DEFAULT_ADVANCED_RENDERING_DISTANCE_FOG_RENDER_DISTANCE
|
||||
renderDistance: DEFAULT_ADVANCED_RENDERING_DISTANCE_FOG_RENDER_DISTANCE,
|
||||
skyBlend: DEFAULT_ADVANCED_RENDERING_DISTANCE_FOG_SKY_BLEND,
|
||||
horizonStrength: DEFAULT_ADVANCED_RENDERING_DISTANCE_FOG_HORIZON_STRENGTH,
|
||||
heightFalloff: DEFAULT_ADVANCED_RENDERING_DISTANCE_FOG_HEIGHT_FALLOFF
|
||||
},
|
||||
godRays: {
|
||||
enabled: false,
|
||||
@@ -1087,6 +1096,9 @@ export function areAdvancedRenderingSettingsEqual(
|
||||
left.distanceFog.farDistance === right.distanceFog.farDistance &&
|
||||
left.distanceFog.strength === right.distanceFog.strength &&
|
||||
left.distanceFog.renderDistance === right.distanceFog.renderDistance &&
|
||||
left.distanceFog.skyBlend === right.distanceFog.skyBlend &&
|
||||
left.distanceFog.horizonStrength === right.distanceFog.horizonStrength &&
|
||||
left.distanceFog.heightFalloff === right.distanceFog.heightFalloff &&
|
||||
left.godRays.enabled === right.godRays.enabled &&
|
||||
left.godRays.intensity === right.godRays.intensity &&
|
||||
left.godRays.decay === right.godRays.decay &&
|
||||
|
||||
Reference in New Issue
Block a user