Feat: Integrate foliage settings into scene document reading

This commit is contained in:
2026-05-02 10:48:48 +02:00
parent 5842001b8b
commit e4892a7b0c
2 changed files with 33 additions and 1 deletions

View File

@@ -321,10 +321,12 @@ import {
isAdvancedRenderingDynamicGlobalIlluminationQuality,
isAdvancedRenderingWaterReflectionMode,
createDefaultAdvancedRenderingSettings,
isFoliageQualityShadowMode,
isBoxVolumeRenderPath,
isAdvancedRenderingShadowMapSize,
isAdvancedRenderingShadowType,
isAdvancedRenderingToneMappingMode,
resolveFoliageQualitySettings,
isWorldBackgroundMode,
isWorldShaderSkyPresetId,
type WorldCelestialOrbitAuthoringSettings,
@@ -812,6 +814,10 @@ function readAdvancedRenderingSettings(
throw new Error("world.advancedRendering.godRays must be an object.");
}
if (value.foliage !== undefined && !isRecord(value.foliage)) {
throw new Error("world.advancedRendering.foliage must be an object.");
}
const shadows = value.shadows as Record<string, unknown> | undefined;
const ambientOcclusion = value.ambientOcclusion as
| Record<string, unknown>
@@ -829,6 +835,7 @@ function readAdvancedRenderingSettings(
| undefined;
const distanceFog = value.distanceFog as Record<string, unknown> | undefined;
const godRays = value.godRays as Record<string, unknown> | undefined;
const foliage = value.foliage as Record<string, unknown> | undefined;
const shadowsMapSize = readOptionalAllowedValue(
shadows?.mapSize,
@@ -872,6 +879,12 @@ function readAdvancedRenderingSettings(
defaults.waterReflectionMode,
isAdvancedRenderingWaterReflectionMode
);
const foliageShadowMode = readOptionalAllowedValue(
foliage?.shadows,
"world.advancedRendering.foliage.shadows",
defaults.foliage.shadows,
isFoliageQualityShadowMode
);
return {
enabled: readOptionalBoolean(
@@ -1089,6 +1102,24 @@ function readAdvancedRenderingSettings(
64
)
},
foliage: resolveFoliageQualitySettings({
enabled: readOptionalBoolean(
foliage?.enabled,
"world.advancedRendering.foliage.enabled",
defaults.foliage.enabled
),
densityMultiplier: readOptionalFiniteNumber(
foliage?.densityMultiplier,
"world.advancedRendering.foliage.densityMultiplier",
defaults.foliage.densityMultiplier
),
maxDistanceMultiplier: readOptionalFiniteNumber(
foliage?.maxDistanceMultiplier,
"world.advancedRendering.foliage.maxDistanceMultiplier",
defaults.foliage.maxDistanceMultiplier
),
shadows: foliageShadowMode
}),
fogPath,
waterPath,
waterReflectionMode

View File

@@ -35,7 +35,8 @@ import {
type FoliagePrototypeRegistry
} from "../foliage/foliage";
export const SCENE_DOCUMENT_VERSION = 93 as const;
export const SCENE_DOCUMENT_VERSION = 94 as const;
export const FOLIAGE_QUALITY_SCENE_DOCUMENT_VERSION = 94 as const;
export const FOLIAGE_MASKS_SCENE_DOCUMENT_VERSION = 93 as const;
export const FOLIAGE_FOUNDATION_SCENE_DOCUMENT_VERSION = 92 as const;
export const PLAYER_START_EDGE_ASSIST_SCENE_DOCUMENT_VERSION = 91 as const;