Implement foliage advanced rendering controls

This commit is contained in:
2026-05-02 10:52:46 +02:00
parent 60e6153570
commit db94b70c6a

View File

@@ -2319,6 +2319,19 @@ function formatAdvancedRenderingWaterReflectionModeLabel(
} }
} }
function formatFoliageQualityShadowModeLabel(
mode: FoliageQualityShadowMode
): string {
switch (mode) {
case "off":
return "Off";
case "near":
return "Near";
case "full":
return "Full";
}
}
function formatBoxVolumeModeLabel(mode: BoxBrushVolumeMode): string { function formatBoxVolumeModeLabel(mode: BoxBrushVolumeMode): string {
switch (mode) { switch (mode) {
case "none": case "none":
@@ -3484,6 +3497,23 @@ export function App({ store, draftStorage = null, initialStatusMessage }: AppPro
] = useState( ] = useState(
String(editorState.document.world.advancedRendering.shadows.bias) String(editorState.document.world.advancedRendering.shadows.bias)
); );
const [
advancedRenderingFoliageDensityMultiplierDraft,
setAdvancedRenderingFoliageDensityMultiplierDraft
] = useState(
String(
editorState.document.world.advancedRendering.foliage.densityMultiplier
)
);
const [
advancedRenderingFoliageMaxDistanceMultiplierDraft,
setAdvancedRenderingFoliageMaxDistanceMultiplierDraft
] = useState(
String(
editorState.document.world.advancedRendering.foliage
.maxDistanceMultiplier
)
);
const [ const [
advancedRenderingAmbientOcclusionIntensityDraft, advancedRenderingAmbientOcclusionIntensityDraft,
setAdvancedRenderingAmbientOcclusionIntensityDraft setAdvancedRenderingAmbientOcclusionIntensityDraft
@@ -4826,6 +4856,12 @@ export function App({ store, draftStorage = null, initialStatusMessage }: AppPro
useEffect(() => { useEffect(() => {
const advancedRendering = editorState.document.world.advancedRendering; const advancedRendering = editorState.document.world.advancedRendering;
setAdvancedRenderingShadowBiasDraft(String(advancedRendering.shadows.bias)); setAdvancedRenderingShadowBiasDraft(String(advancedRendering.shadows.bias));
setAdvancedRenderingFoliageDensityMultiplierDraft(
String(advancedRendering.foliage.densityMultiplier)
);
setAdvancedRenderingFoliageMaxDistanceMultiplierDraft(
String(advancedRendering.foliage.maxDistanceMultiplier)
);
setAdvancedRenderingAmbientOcclusionIntensityDraft( setAdvancedRenderingAmbientOcclusionIntensityDraft(
String(advancedRendering.ambientOcclusion.intensity) String(advancedRendering.ambientOcclusion.intensity)
); );
@@ -12889,6 +12925,81 @@ export function App({ store, draftStorage = null, initialStatusMessage }: AppPro
); );
}; };
const applyAdvancedRenderingFoliageEnabled = (enabled: boolean) => {
applyAdvancedRenderingSettings(
"Set foliage rendering",
enabled ? "Foliage rendering enabled." : "Foliage rendering disabled.",
(advancedRendering) => {
advancedRendering.foliage.enabled = enabled;
}
);
};
const applyAdvancedRenderingFoliageDensityMultiplier = () => {
try {
const densityMultiplier = clampNumber(
readFiniteNumberDraft(
advancedRenderingFoliageDensityMultiplierDraft,
"Foliage density multiplier"
),
MIN_FOLIAGE_QUALITY_DENSITY_MULTIPLIER,
MAX_FOLIAGE_QUALITY_DENSITY_MULTIPLIER
);
setAdvancedRenderingFoliageDensityMultiplierDraft(
String(densityMultiplier)
);
applyAdvancedRenderingSettings(
"Set foliage density quality",
"Updated the foliage density multiplier.",
(advancedRendering) => {
advancedRendering.foliage.densityMultiplier = densityMultiplier;
}
);
} catch (error) {
setStatusMessage(getErrorMessage(error));
}
};
const applyAdvancedRenderingFoliageMaxDistanceMultiplier = () => {
try {
const maxDistanceMultiplier = clampNumber(
readFiniteNumberDraft(
advancedRenderingFoliageMaxDistanceMultiplierDraft,
"Foliage distance multiplier"
),
MIN_FOLIAGE_QUALITY_MAX_DISTANCE_MULTIPLIER,
MAX_FOLIAGE_QUALITY_MAX_DISTANCE_MULTIPLIER
);
setAdvancedRenderingFoliageMaxDistanceMultiplierDraft(
String(maxDistanceMultiplier)
);
applyAdvancedRenderingSettings(
"Set foliage distance quality",
"Updated the foliage distance multiplier.",
(advancedRendering) => {
advancedRendering.foliage.maxDistanceMultiplier =
maxDistanceMultiplier;
}
);
} catch (error) {
setStatusMessage(getErrorMessage(error));
}
};
const applyAdvancedRenderingFoliageShadows = (
shadows: FoliageQualityShadowMode
) => {
applyAdvancedRenderingSettings(
"Set foliage shadows",
`Foliage shadows set to ${formatFoliageQualityShadowModeLabel(shadows)}.`,
(advancedRendering) => {
advancedRendering.foliage.shadows = shadows;
}
);
};
const applyAdvancedRenderingShadowsEnabled = (enabled: boolean) => { const applyAdvancedRenderingShadowsEnabled = (enabled: boolean) => {
applyAdvancedRenderingSettings( applyAdvancedRenderingSettings(
"Set advanced rendering shadows", "Set advanced rendering shadows",