Define investor rendering presets
This commit is contained in:
@@ -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 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] 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.
|
- [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.
|
- [ ] 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 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.
|
- [ ] 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.
|
||||||
|
|||||||
@@ -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()
|
||||||
Reference in New Issue
Block a user