From 25a0abeed423863bea928016c774afc0a880f272 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Sat, 2 May 2026 10:53:10 +0200 Subject: [PATCH] Feat: Add advanced rendering controls and validation for foliage settings --- src/app/App.tsx | 119 ++++++++++++++++++ .../domain/scene-document-validation.test.ts | 23 ++++ 2 files changed, 142 insertions(+) diff --git a/src/app/App.tsx b/src/app/App.tsx index 315e95c3..e6a09dff 100644 --- a/src/app/App.tsx +++ b/src/app/App.tsx @@ -19021,6 +19021,125 @@ export function App({ store, draftStorage = null, initialStatusMessage }: AppPro /> +
+
Foliage
+ +
+ + +
+ +
+ {!advancedRendering.enabled ? null : ( <>
diff --git a/tests/domain/scene-document-validation.test.ts b/tests/domain/scene-document-validation.test.ts index 9e05f5fd..4d7c679a 100644 --- a/tests/domain/scene-document-validation.test.ts +++ b/tests/domain/scene-document-validation.test.ts @@ -1713,6 +1713,13 @@ describe("validateSceneDocument", () => { density: Number.NaN, sourceSize: 0, samples: 0 + }, + foliage: { + ...document.world.advancedRendering.foliage, + enabled: "yes", + densityMultiplier: 3, + maxDistanceMultiplier: 0, + shadows: "close" } } as any; @@ -1852,6 +1859,22 @@ describe("validateSceneDocument", () => { code: "invalid-advanced-rendering-god-rays-samples", path: "world.advancedRendering.godRays.samples" }), + expect.objectContaining({ + code: "invalid-foliage-quality-enabled", + path: "world.advancedRendering.foliage.enabled" + }), + expect.objectContaining({ + code: "invalid-foliage-quality-density-multiplier", + path: "world.advancedRendering.foliage.densityMultiplier" + }), + expect.objectContaining({ + code: "invalid-foliage-quality-max-distance-multiplier", + path: "world.advancedRendering.foliage.maxDistanceMultiplier" + }), + expect.objectContaining({ + code: "invalid-foliage-quality-shadows", + path: "world.advancedRendering.foliage.shadows" + }), expect.objectContaining({ code: "invalid-advanced-rendering-fog-path", path: "world.advancedRendering.fogPath"