From b6b42324990305ea80d494f378ba55f931df0420 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Sat, 2 May 2026 10:49:30 +0200 Subject: [PATCH] Add validation for foliage quality settings in world document --- src/document/scene-document-validation.ts | 61 +++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/src/document/scene-document-validation.ts b/src/document/scene-document-validation.ts index dc676f58..867e8b9f 100644 --- a/src/document/scene-document-validation.ts +++ b/src/document/scene-document-validation.ts @@ -87,6 +87,11 @@ import { isAdvancedRenderingShadowType, isBoxVolumeRenderPath, isAdvancedRenderingToneMappingMode, + isFoliageQualityShadowMode, + MIN_FOLIAGE_QUALITY_DENSITY_MULTIPLIER, + MAX_FOLIAGE_QUALITY_DENSITY_MULTIPLIER, + MIN_FOLIAGE_QUALITY_MAX_DISTANCE_MULTIPLIER, + MAX_FOLIAGE_QUALITY_MAX_DISTANCE_MULTIPLIER, isHexColorString, isWorldShaderSkyPresetId, type WorldCelestialOrbitAuthoringSettings, @@ -1360,6 +1365,62 @@ function validateWorldSettings( ); } + if (!isBoolean(advancedRendering.foliage.enabled)) { + diagnostics.push( + createDiagnostic( + "error", + "invalid-foliage-quality-enabled", + "Foliage quality enabled must be a boolean.", + "world.advancedRendering.foliage.enabled" + ) + ); + } + + if ( + !isFiniteNumberInRange( + advancedRendering.foliage.densityMultiplier, + MIN_FOLIAGE_QUALITY_DENSITY_MULTIPLIER, + MAX_FOLIAGE_QUALITY_DENSITY_MULTIPLIER + ) + ) { + diagnostics.push( + createDiagnostic( + "error", + "invalid-foliage-quality-density-multiplier", + "Foliage density multiplier must be a finite number between 0 and 2.", + "world.advancedRendering.foliage.densityMultiplier" + ) + ); + } + + if ( + !isFiniteNumberInRange( + advancedRendering.foliage.maxDistanceMultiplier, + MIN_FOLIAGE_QUALITY_MAX_DISTANCE_MULTIPLIER, + MAX_FOLIAGE_QUALITY_MAX_DISTANCE_MULTIPLIER + ) + ) { + diagnostics.push( + createDiagnostic( + "error", + "invalid-foliage-quality-max-distance-multiplier", + "Foliage max distance multiplier must be a finite number between 0.1 and 2.", + "world.advancedRendering.foliage.maxDistanceMultiplier" + ) + ); + } + + if (!isFoliageQualityShadowMode(advancedRendering.foliage.shadows)) { + diagnostics.push( + createDiagnostic( + "error", + "invalid-foliage-quality-shadows", + "Foliage shadows must be off, near, or full.", + "world.advancedRendering.foliage.shadows" + ) + ); + } + if (!isBoxVolumeRenderPath(advancedRendering.fogPath)) { diagnostics.push( createDiagnostic(