Define investor rendering presets

This commit is contained in:
2026-05-19 11:13:49 -07:00
parent c4296484b6
commit 4894c9db5b
4 changed files with 225 additions and 1 deletions
+1 -1
View File
@@ -826,7 +826,7 @@ Target deliverable: A small group can join a server, spawn into one biome, gathe
- [x] Add a real water-source visual pass with surface material, edge treatment, scale, and placement that reads as collectable freshwater instead of a placeholder plane. Formalized the MVP freshwater presentation around the native `AAgrarianWaterSource` water-surface, stone-bank, and collect-marker proxies, documented the Ground Zero drainage-candidate placement and nearby water-bank/reed dressing, and added an Unreal verifier that checks surface material, edge treatment, scale, placement, and nearby dressing actors in the actual map.
- [x] Add density and sightline tuning so grasses, shrubs, trees, and resource clusters are visible enough to sell the world without hiding gameplay-critical objects. Added protected foliage clearances around early survival targets and biome resource nodes, sampled first-look sightline corridors from the player start to wood, fiber, campfire, shelter, wildlife, and freshwater, plus a dedicated Unreal verifier/documentation gate so investor-facing density cannot regress into object-hiding clutter.
- [x] Preserve realism as the target: use assets, materials, lighting, and environmental dressing that can survive toward MVP production rather than cosmetic throwaways where practical. Added MVP realism target rules to the shared art/UX/code/asset standards, tied current 0.1.O visual passes to production-directed proxy expectations, and added a verifier that requires Ground Zero materials, water, density/sightline, character, and survival-object docs to point toward production realism instead of cosmetic throwaways.
- [ ] Define default, recommended, and cinematic investor rendering presets, with ray tracing available only as an optional high-end/cinematic mode and never required for baseline visual credibility.
- [x] Define default, recommended, and cinematic investor rendering presets, with ray tracing available only as an optional high-end/cinematic mode and never required for baseline visual credibility. Added `Config/AgrarianRenderingPresets.ini`, `Docs/Rendering/InvestorRenderingPresets.md`, and a verifier that requires Default and Recommended to remain non-ray-traced while Cinematic is the only optional high-end ray-tracing profile.
- [ ] Verify the non-ray-traced compatibility/default path still looks credible on common investor, tester, and remote-session hardware.
- [ ] Add packaged-demo visual QA screenshots or short clips for startup credits, character selection, first spawn, terrain, vegetation, water, campfire, shelter, pause menu, and save/quit before each investor build is called ready.
- [ ] Add an investor-demo acceptance gate: no current build should be described as investor visual MVP if menus are confusing, character art is mannequin-only, terrain is flat/tan, foliage is absent or unreadable, or core objects still read as primitive debug shapes.
+61
View File
@@ -0,0 +1,61 @@
; Agrarian investor/tester rendering presets.
; These are project-owned policy presets; launcher/runtime wiring can consume
; them as UI settings or command-line CVar groups in later milestones.
[AgrarianRenderingPreset.Default]
DisplayName=Default
Audience=Investor demo baseline, remote play, and common tester hardware
TargetResolution=1920x1080
TargetFrameRate=60
RayTracing=Disabled
GlobalIllumination=LumenSoftware
ReflectionMode=ScreenSpaceAndLumen
ShadowQuality=High
FoliageDensity=InvestorReadable
WaterQuality=ReadableMvp
+CVars=r.RayTracing=0
+CVars=r.Lumen.HardwareRayTracing=0
+CVars=r.PathTracing=0
+CVars=r.DynamicGlobalIlluminationMethod=1
+CVars=r.ReflectionMethod=1
+CVars=r.Shadow.Virtual.Enable=1
+CVars=r.ScreenPercentage.Default=100
[AgrarianRenderingPreset.Recommended]
DisplayName=Recommended
Audience=Local GPU tester and investor machines with stable Unreal 5 Lumen support
TargetResolution=2560x1440
TargetFrameRate=60
RayTracing=Disabled
GlobalIllumination=LumenSoftwareHigh
ReflectionMode=Lumen
ShadowQuality=High
FoliageDensity=InvestorReadable
WaterQuality=EnhancedMvp
+CVars=r.RayTracing=0
+CVars=r.Lumen.HardwareRayTracing=0
+CVars=r.PathTracing=0
+CVars=r.DynamicGlobalIlluminationMethod=1
+CVars=r.ReflectionMethod=1
+CVars=r.Shadow.Virtual.Enable=1
+CVars=r.ScreenPercentage.Default=100
[AgrarianRenderingPreset.Cinematic]
DisplayName=Cinematic
Audience=High-end local capture, screenshots, clips, and controlled investor walkthroughs
TargetResolution=3840x2160
TargetFrameRate=30
RayTracing=Optional
GlobalIllumination=LumenHardwareWhenAvailable
ReflectionMode=LumenHardwareWhenAvailable
ShadowQuality=Cinematic
FoliageDensity=InvestorReadable
WaterQuality=Cinematic
+CVars=r.RayTracing=1
+CVars=r.Lumen.HardwareRayTracing=1
+CVars=r.PathTracing=0
+CVars=r.RayTracing.Shadows=1
+CVars=r.DynamicGlobalIlluminationMethod=1
+CVars=r.ReflectionMethod=1
+CVars=r.Shadow.Virtual.Enable=1
+CVars=r.ScreenPercentage.Default=100
@@ -0,0 +1,48 @@
# Investor Rendering Presets
Agrarian should support high-end cinematic capture without making ray tracing a
baseline requirement. The investor demo should look credible in the default
non-ray-traced path first, then scale up when local hardware supports it.
Preset definitions live in `Config/AgrarianRenderingPresets.ini`.
## Default
Default is the investor demo baseline for remote play, screen sharing, and
common tester hardware.
- Target: 1080p, 60 FPS.
- Ray tracing: disabled.
- Lighting: Lumen software/global illumination path.
- Shadows: virtual shadow maps enabled.
- Use case: packaged demo, repeated testing, and normal investor handoff.
## Recommended
Recommended is for local GPU testing and investor machines that handle Unreal 5
Lumen comfortably.
- Target: 1440p, 60 FPS.
- Ray tracing: disabled.
- Lighting/reflection quality: higher software Lumen settings where available.
- Use case: local capture and higher-fidelity live walkthroughs without relying
on ray-tracing support.
## Cinematic
Cinematic is optional and should be used only for controlled local capture or
high-end walkthroughs.
- Target: 4K, 30 FPS.
- Ray tracing: optional high-end mode.
- Lighting/reflections: hardware Lumen when available.
- Use case: screenshots, short clips, and investor capture passes.
## Policy
- No gameplay feature should require ray tracing.
- The default investor demo must remain credible with ray tracing disabled.
- Cinematic settings may be slower and should never become the required tester
path.
- If a visual feature only works in cinematic mode, it needs a default-mode
fallback before it can be considered MVP-ready.
@@ -0,0 +1,115 @@
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
PRESET_FILE = ROOT / "Config" / "AgrarianRenderingPresets.ini"
DOCS_FILE = ROOT / "Docs" / "Rendering" / "InvestorRenderingPresets.md"
ROADMAP_FILE = ROOT / "AGRARIAN_DEVELOPMENT_ROADMAP.md"
EXPECTED_PRESETS = {
"AgrarianRenderingPreset.Default": {
"RayTracing": "Disabled",
"TargetResolution": "1920x1080",
"TargetFrameRate": "60",
"required_cvars": {
"r.RayTracing=0",
"r.Lumen.HardwareRayTracing=0",
"r.PathTracing=0",
},
},
"AgrarianRenderingPreset.Recommended": {
"RayTracing": "Disabled",
"TargetResolution": "2560x1440",
"TargetFrameRate": "60",
"required_cvars": {
"r.RayTracing=0",
"r.Lumen.HardwareRayTracing=0",
"r.PathTracing=0",
},
},
"AgrarianRenderingPreset.Cinematic": {
"RayTracing": "Optional",
"TargetResolution": "3840x2160",
"TargetFrameRate": "30",
"required_cvars": {
"r.RayTracing=1",
"r.Lumen.HardwareRayTracing=1",
"r.PathTracing=0",
},
},
}
def read_presets():
presets = {}
active_section = None
for raw_line in PRESET_FILE.read_text(encoding="utf-8").splitlines():
line = raw_line.strip()
if not line or line.startswith(";"):
continue
if line.startswith("[") and line.endswith("]"):
active_section = line[1:-1]
presets[active_section] = {"CVars": []}
continue
if not active_section or "=" not in line:
continue
key, value = line.split("=", 1)
if key == "+CVars":
presets[active_section]["CVars"].append(value)
else:
presets[active_section][key] = value
return presets
def main():
failures = []
if not PRESET_FILE.exists():
failures.append(f"missing {PRESET_FILE}")
if not DOCS_FILE.exists():
failures.append(f"missing {DOCS_FILE}")
if failures:
raise SystemExit("Investor rendering preset verification failed:\n" + "\n".join(failures))
parser = read_presets()
for preset_name, expectations in EXPECTED_PRESETS.items():
if preset_name not in parser:
failures.append(f"missing preset section {preset_name}")
continue
section = parser[preset_name]
for key, expected_value in expectations.items():
if key == "required_cvars":
continue
actual_value = section.get(key)
if actual_value != expected_value:
failures.append(f"{preset_name} {key} expected {expected_value}, got {actual_value}")
cvars = set(section.get("CVars", []))
missing_cvars = sorted(expectations["required_cvars"] - cvars)
if missing_cvars:
failures.append(f"{preset_name} missing CVars: {', '.join(missing_cvars)}")
docs_text = DOCS_FILE.read_text(encoding="utf-8")
for snippet in [
"Default",
"Recommended",
"Cinematic",
"No gameplay feature should require ray tracing.",
"default investor demo must remain credible with ray tracing disabled",
]:
if snippet not in docs_text:
failures.append(f"{DOCS_FILE} missing snippet: {snippet}")
roadmap_text = ROADMAP_FILE.read_text(encoding="utf-8")
if "[x] Define default, recommended, and cinematic investor rendering presets" not in roadmap_text:
failures.append("roadmap item is not marked complete")
if failures:
raise SystemExit("Investor rendering preset verification failed:\n" + "\n".join(failures))
print("PASS: investor rendering presets define non-ray-traced default/recommended and optional cinematic ray tracing.")
if __name__ == "__main__":
main()