diff --git a/src/document/migrate-scene-document.ts b/src/document/migrate-scene-document.ts index 668fdfe5..1e7a850f 100644 --- a/src/document/migrate-scene-document.ts +++ b/src/document/migrate-scene-document.ts @@ -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 | undefined; const ambientOcclusion = value.ambientOcclusion as | Record @@ -829,6 +835,7 @@ function readAdvancedRenderingSettings( | undefined; const distanceFog = value.distanceFog as Record | undefined; const godRays = value.godRays as Record | undefined; + const foliage = value.foliage as Record | 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 diff --git a/src/document/scene-document.ts b/src/document/scene-document.ts index 7da7aa44..04b38c56 100644 --- a/src/document/scene-document.ts +++ b/src/document/scene-document.ts @@ -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;