Add DA_RenderPipelineProfile and Platform Render Profiles documentation
- Introduced DA_RenderPipelineProfile data asset to define rendering pipeline configurations for various platforms and quality tiers. - Documented enums, structs, variables, and default preset tables for render settings. - Created a comprehensive developer guide for setting up platform-specific render profiles, including file structure, profile creation, and integration with upscalers. - Included validation rules, console variable references, and testing matrices for ensuring compliance with platform requirements.
This commit is contained in:
@@ -13,13 +13,14 @@
|
||||
|
||||
---
|
||||
|
||||
# 12 — Settings, Accessibility, Haptics & Platform Systems (Systems 104-105, 148)
|
||||
# 12 — Settings, Accessibility, Haptics, Render Pipeline & Platform Systems (Systems 104-105, 148-149)
|
||||
|
||||
| # | System | Asset Type | Role |
|
||||
|---|--------|-----------|------|
|
||||
| 104 | `BPC_AccessibilitySettings` | Component | Accessibility; subtitles, colorblind, controller remap |
|
||||
| 105 | `SS_SettingsSystem` | Subsystem | Settings subsystem; persistent settings, apply, reset |
|
||||
| 148 | `BPC_HapticsController` | Component | Haptics controller; GameplayTag-driven force feedback, DualSense triggers, heartbeat pulse |
|
||||
| 149 | `BPC_RenderPipelineManager` | Component | Render pipeline manager; quality presets, per-platform GI/shadows/upscaling, PlanarCapture aware |
|
||||
|
||||
**104 BPC_AccessibilitySettings:** Manages accessibility features: subtitle toggle/size, colorblind mode selection (protanopia/deuteranopia/tritanopia), controller remapping, difficulty presets, hold-to-confirm toggle, camera shake reduction. Settings persisted via `SS_SettingsSystem`.
|
||||
|
||||
@@ -27,6 +28,8 @@
|
||||
|
||||
**148 BPC_HapticsController:** ActorComponent attached to the Player Controller. Central abstraction for all controller vibration and force feedback. Systems trigger haptics by GameplayTag (e.g., `Haptic.Damage.Heavy`) — never calling raw UE5 `Play Force Feedback` nodes. Handles platform detection (Xbox rumble, PS5 DualSense adaptive triggers, PC generic gamepad), respects accessibility toggle, manages effect priority/conflict resolution, and drives the continuous heartbeat pulse from `BPC_StateManager.GetCurrentHeartRate()`. Uses `DA_HapticProfile` Data Assets for all effect definitions.
|
||||
|
||||
**149 BPC_RenderPipelineManager:** ActorComponent attached to the Player Controller. Central authority for UE5 render pipeline configuration. Reads `DA_RenderPipelineProfile` Data Assets to determine the appropriate rendering method (Lumen vs Baked Lightmass), shadow system (VSM vs CSM), upscaler (DLSS/FSR/TSR/PSSR), and mesh strategy (Nanite vs LOD) for the current platform and quality preset. Applies settings via UE5 console variables, coordinates with `BPC_PerformanceScaler` for runtime quality tier adjustments, and broadcasts pipeline changes so the Planar Capture system can adjust its quality budget. Handles reload-required detection for destructive pipeline changes (GI method, shadow method, Nanite toggle).
|
||||
|
||||
---
|
||||
|
||||
# 13 — Polish: Tutorial, Loading, Credits & Debug Systems (Systems 106-114)
|
||||
@@ -111,7 +114,7 @@
|
||||
|
||||
---
|
||||
|
||||
*Developer Reference v1.1 — Categories 11-16 Systems (including Haptics). Companion to docs/blueprints/ specs.*
|
||||
*Developer Reference v1.2 — Categories 11-16 Systems (including Haptics + Render Pipeline). Companion to docs/blueprints/ specs.*
|
||||
|
||||
---
|
||||
|
||||
@@ -125,6 +128,7 @@
|
||||
| `BPC_AccessibilitySettings` | **Local per-client** — each player's accessibility preferences |
|
||||
| `SS_SettingsSystem` | Settings save per-client; key bindings are local |
|
||||
| `BPC_HapticsController` | **Local client only** — haptics are cosmetic, never replicated. No `HasAuthority()` needed. |
|
||||
| `BPC_RenderPipelineManager` | **Local client only** — render pipeline is per-client hardware. No replication. |
|
||||
|
||||
### Category 13: Polish
|
||||
| System | Authority |
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Developer Reference — UE5 Modular Game Framework
|
||||
|
||||
**Version:** 1.7 | **Generated:** 2026-05-22 | **Files:** 20 (1 index + 2 overview + 1 migration + 1 integration + 1 prototype + 1 starter + 10 category docs + 1 combined + 1 capture + 1 haptics) | **C++:** 15 full + 10 stubs = 25 systems
|
||||
**Version:** 1.8 | **Generated:** 2026-05-22 | **Files:** 21 (1 index + 3 overview + 1 migration + 1 integration + 1 prototype + 1 starter + 10 category docs + 1 combined + 1 capture + 1 render) | **C++:** 15 full + 10 stubs = 25 systems
|
||||
|
||||
This directory contains developer-facing reference documentation for every system in the framework. Unlike the blueprint spec files (which define *what* to build), these documents explain *how each system works internally* — the data flow, state machines, integration points, and design rationale. Use these when you need to understand a system's behavior to implement, debug, or extend it.
|
||||
|
||||
@@ -32,11 +32,11 @@ docs/developer/
|
||||
├── 08-weapons-systems.md ← Weapons, equipment & damage (systems 69-79)
|
||||
├── 09-ai-systems.md ← AI, perception & encounters (systems 80-88)
|
||||
├── 10-adaptive-systems.md ← Adaptive environment & atmosphere (systems 89-101, 132-133)
|
||||
├── 11-16-systems.md ← Meta, Settings, Polish, Data Assets, Input, State (systems 102-135)
|
||||
├── 11-16-systems.md ← Meta, Settings, Polish, Data Assets, Input, State (systems 102-135, 148-149)
|
||||
└── 17-capture-systems.md ← Planar Capture System — Mirrors, Portals, Monitors, Horror (systems 136-147)
|
||||
|
||||
## Haptics Reference
|
||||
- **18-haptics-system.md** — Haptics Controller — Force feedback, DualSense triggers, heartbeat pulse, platform profiles (system 148)
|
||||
## Render Pipeline Reference (NEW)
|
||||
- **platform-render-profiles.md** — Render pipeline setup guide: Lumen vs Baked, upscalers (DLSS/FSR/PSSR), per-platform quality presets (systems 149 + DA_RenderPipelineProfile)
|
||||
- **game/haptics-example.md** — Project Void haptics walkthrough — wiring all game systems, platform tuning, testing checklist
|
||||
```
|
||||
|
||||
@@ -182,6 +182,8 @@ docs/developer/
|
||||
| 134 | `DA_AudioSettings` | Data Assets | Audio bus/settings config |
|
||||
| 135 | `DA_RoomAcousticPreset` | Data Assets | Room acoustic profile |
|
||||
| 148 | `BPC_HapticsController` | Settings | Haptics controller — force feedback, DualSense triggers, heartbeat pulse |
|
||||
| 149 | `BPC_RenderPipelineManager` | Settings | Render pipeline manager — quality presets, GI/shadows/upscaling per platform |
|
||||
| — | `DA_RenderPipelineProfile` | Data Assets | Render pipeline config — per-platform quality tier render settings |
|
||||
|
||||
## How to Use These Docs
|
||||
|
||||
|
||||
@@ -36,7 +36,10 @@ Direct Reference │ Interface Calls
|
||||
│ LAYER 8: POLISH & META │
|
||||
│ Tutorials, Loading, Credits, Analytics, Achievements │
|
||||
├────────────────────────────────────────────────────────────────┤
|
||||
│ LAYER 7.5: HAPTICS │
|
||||
│ LAYER 7.5: RENDER PIPELINE │
|
||||
│ Quality presets, Lumen/Baked, upscaling, platform profiles │
|
||||
├────────────────────────────────────────────────────────────────┤
|
||||
│ LAYER 7: HAPTICS │
|
||||
│ Controller vibration, DualSense triggers, heartbeat pulse │
|
||||
├────────────────────────────────────────────────────────────────┤
|
||||
│ LAYER 7: ADAPTIVE │
|
||||
@@ -92,7 +95,10 @@ All input goes through `SS_EnhancedInputManager`. Context switching uses priorit
|
||||
### 8. GameplayTag-Driven Haptics
|
||||
All controller vibration routes through `BPC_HapticsController` on the Player Controller. Gameplay systems trigger haptics by GameplayTag (e.g., `Haptic.Damage.Heavy`) — never calling raw `Play Force Feedback` nodes. The component detects platform (Xbox rumble vs PS5 DualSense adaptive triggers), respects accessibility toggles, and manages effect priority. Heartbeat pulse is driven by `BPC_StateManager.GetCurrentHeartRate()`.
|
||||
|
||||
### 9. Force Stack for State Overrides
|
||||
### 9. Per-Platform Render Pipeline
|
||||
All render quality decisions route through `BPC_RenderPipelineManager`. The system reads `DA_RenderPipelineProfile` Data Assets to determine Lumen vs Baked Lightmass, Virtual Shadow Maps vs Cascaded Shadow Maps, Nanite vs traditional LODs, and the appropriate upscaler (DLSS/FSR/TSR/PSSR) for the detected platform and selected quality preset. Destructive pipeline changes (GI method, shadow method) are queued and applied on level load. The Planar Capture system adjusts its quality budget based on the active pipeline.
|
||||
|
||||
### 10. Force Stack for State Overrides
|
||||
Death, cutscenes, void space push state onto a stack. `RestorePreviousState()` pops back — the player returns to exactly their previous state after a forced interruption.
|
||||
|
||||
---
|
||||
@@ -150,13 +156,13 @@ The 16 build phases follow dependency order:
|
||||
| `WBP_` Widget Blueprints | 14 | HUDController, InventoryMenu, MainMenu |
|
||||
| `DA_` Data Assets | 18 | ItemData, EquipmentConfig, AtmosphereProfile |
|
||||
| `SS_` GameInstance Subsystems | 7 | SaveManager, UIManager, AudioManager |
|
||||
| `BPC_` Components (haptics) | 1 | HapticsController (PlayerController) |
|
||||
| `BPC_` Components (settings) | 2 | HapticsController, RenderPipelineManager |
|
||||
| `GI_` Game Instances | 2 | GameFramework, GameTagRegistry |
|
||||
| `I_` Interfaces | 3 | InterfaceLibrary, HidingSpot, Persistable |
|
||||
| `GM_` GameMode, `GS_` GameState | 2 | CoreGameMode, CoreGameState |
|
||||
| `FL_` Function Library | 1 | GameUtilities |
|
||||
| `AI_` Controller, `BB_` Blackboard | 2 | BaseAgentController, AgentBoard |
|
||||
| **TOTAL** | **141** | |
|
||||
| **TOTAL** | **142** | |
|
||||
|
||||
---
|
||||
|
||||
|
||||
383
docs/developer/platform-render-profiles.md
Normal file
383
docs/developer/platform-render-profiles.md
Normal file
@@ -0,0 +1,383 @@
|
||||
# Platform Render Profiles — Developer Guide
|
||||
|
||||
**Version:** 1.0 | **Target UE:** 5.5–5.7 | **Systems:** BPC_RenderPipelineManager (149) + DA_RenderPipelineProfile
|
||||
|
||||
---
|
||||
|
||||
## Purpose
|
||||
|
||||
This guide covers setting up per-platform render pipeline configurations in a UE5 project using the Modular Game Framework's render profile system. It explains how to configure Lumen vs baked lighting, Nanite vs traditional LODs, shadow systems, upscalers, and platform-specific constraints — all driven by `DA_RenderPipelineProfile` Data Assets.
|
||||
|
||||
---
|
||||
|
||||
## Core Concept
|
||||
|
||||
UE5's rendering pipeline features (Lumen GI, Nanite, Virtual Shadow Maps) are **not runtime-switchable** — they must be set before the engine initializes or before a level loads. The framework's solution:
|
||||
|
||||
1. **Data Asset** (`DA_RenderPipelineProfile`) — Defines render configs per quality tier per platform
|
||||
2. **Manager** (`BPC_RenderPipelineManager`) — Reads profiles, applies CVars, handles reload requirements
|
||||
3. **Settings** (`SS_SettingsSystem`) — Persists player's quality choice
|
||||
4. **UI** (`WBP_SettingsMenu`) — Exposes quality controls with warnings for destructive changes
|
||||
|
||||
---
|
||||
|
||||
## 1. Creating DA_RenderPipelineProfile Instances
|
||||
|
||||
### File Structure
|
||||
```
|
||||
Content/Game/DataAssets/RenderProfiles/
|
||||
├── DA_RPP_PS5.uasset ← PlayStation 5 profile
|
||||
├── DA_RPP_PS5_Pro.uasset ← PS5 Pro (PSSR support)
|
||||
├── DA_RPP_PS4.uasset ← PS4 / PS4 Pro
|
||||
├── DA_RPP_Xbox_Series.uasset ← Xbox Series X|S
|
||||
├── DA_RPP_Xbox_One.uasset ← Xbox One / One X
|
||||
├── DA_RPP_PC_High.uasset ← PC: RTX 2000+ / RX 6000+
|
||||
├── DA_RPP_PC_Low.uasset ← PC: GTX 900-1600 / iGPU
|
||||
├── DA_RPP_SteamDeck.uasset ← Steam Deck
|
||||
├── DA_RPP_Switch.uasset ← Nintendo Switch
|
||||
└── DA_RPP_Switch_2.uasset ← Switch 2 (future)
|
||||
```
|
||||
|
||||
### Profile Creation Walkthrough (PS5 Example)
|
||||
|
||||
1. Content Browser → `Content/Game/DataAssets/RenderProfiles/`
|
||||
2. Right-click → **Miscellaneous → Data Asset**
|
||||
3. Select class: `DA_RenderPipelineProfile`
|
||||
4. Name: `DA_RPP_PS5`
|
||||
5. Open the asset, configure:
|
||||
|
||||
**Platform Defaults:**
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| `Platform` | `PS5` |
|
||||
| `DefaultQualityPreset` | `Medium` |
|
||||
| `SupportedPipelines` | `[Lumen_GI, Baked_Lightmass, SSGI]` |
|
||||
| `SupportedUpscalers` | `[TSR, PSSR, FSR]` |
|
||||
| `MaxResolutionScale` | `1.0` |
|
||||
| `MaxFPS` | `120` |
|
||||
| `VRAMBudget_MB` | `14336` |
|
||||
| `bSupportsNanite` | `true` |
|
||||
| `bSupportsLumen` | `true` |
|
||||
| `bSupportsHWRT` | `true` |
|
||||
|
||||
**Quality Presets:**
|
||||
Add 5 entries to the `QualityPresets` map:
|
||||
|
||||
| Key (FName) | Config |
|
||||
|-------------|--------|
|
||||
| `Low` | GIMethod=Baked, Shadow=CSM, Reflection=Captures, Upscaler=TSR(Perf), Mesh=LOD, Resolution=0.70, FPS=60 |
|
||||
| `Medium` | GIMethod=Lumen_Low, Shadow=VSM_Low, Reflection=Lumen_Low, Upscaler=TSR(Balanced), Mesh=Nanite, Resolution=0.85, FPS=60 |
|
||||
| `High` | GIMethod=Lumen_High, Shadow=VSM_High, Reflection=Lumen_High, Upscaler=TSR(Quality), Mesh=Nanite, Resolution=1.0, FPS=60 |
|
||||
| `Ultra` | GIMethod=Lumen_Ultra, Shadow=VSM_Ultra, Reflection=Lumen_Ultra, Upscaler=PSSR, Mesh=Nanite, Resolution=1.0, FPS=60 |
|
||||
| `Cinematic` | GIMethod=Lumen+HWRT, Shadow=VSM+RT, Reflection=Lumen+RT, Upscaler=PSSR, Mesh=Nanite, Resolution=1.0, FPS=30 |
|
||||
|
||||
**Key detail:** The "Low" preset uses `bRequiresLevelReload = true` because it switches from Lumen→Baked and Nanite→LOD. Medium→High does NOT require reload (both use Lumen+Nanite, only quality differs).
|
||||
|
||||
---
|
||||
|
||||
## 2. Render Pipeline Method Decision Tree
|
||||
|
||||
```
|
||||
START: Which platform is the player on?
|
||||
│
|
||||
├─ PS5 / Xbox Series / PC_High
|
||||
│ ├─ Player chooses "Low" → Baked Lightmass + CSM + LOD meshes
|
||||
│ │ └─ Goal: 60 FPS on base console, 120 FPS on Pro/PC
|
||||
│ ├─ Player chooses "Medium/High" → Lumen + VSM + Nanite
|
||||
│ │ └─ Goal: 60 FPS at 85-100% resolution
|
||||
│ └─ Player chooses "Ultra/Cinematic" → Lumen + HWRT + Nanite + PSSR/DLSS
|
||||
│ └─ Goal: Max quality, 30-60 FPS
|
||||
│
|
||||
├─ PS4 / Xbox_One
|
||||
│ └─ ALL presets → Baked Lightmass + CSM + LOD meshes
|
||||
│ └─ These platforms do NOT support Lumen/Nanite
|
||||
│ └─ Upscaler: TAAU (built-in, lightweight)
|
||||
│ └─ Goal: 30 FPS at 60-90% resolution
|
||||
│
|
||||
├─ Switch
|
||||
│ └─ ALL presets → Baked Lightmass + CSM + ProxyGeometry/LOD
|
||||
│ └─ Upscaler: NIS (lightweight) or FSR
|
||||
│ └─ Goal: 30 FPS at 40-70% resolution (docked) / 30 FPS at 30-55% (handheld)
|
||||
│
|
||||
└─ SteamDeck
|
||||
└─ Low/Medium → Baked/SSGI + CSM + LOD
|
||||
└─ High → SSGI + CSM + LOD
|
||||
└─ Upscaler: FSR
|
||||
└─ Goal: 40-60 FPS at 70-85% resolution
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. Upscaler Integration Guide
|
||||
|
||||
### 3.1 Available Upscalers and Requirements
|
||||
|
||||
| Upscaler | Plugin Required | Platforms | Quality | Notes |
|
||||
|----------|----------------|-----------|---------|-------|
|
||||
| **TSR** (Temporal Super Resolution) | Built-in UE5 | ALL | Good | Default choice. No plugin needed. Works everywhere. |
|
||||
| **DLSS 3** | NVIDIA DLSS Plugin | PC (RTX 2000+) | Excellent | Best upscaling quality. Frame Gen available on RTX 4000+. |
|
||||
| **FSR 2/3** | AMD FSR Plugin | ALL (cross-vendor) | Good | Works on all GPUs including consoles and Switch. |
|
||||
| **PSSR** | PS5 SDK Plugin | PS5 Pro only | Excellent | Hardware-accelerated ML upscaling. PS5 Pro exclusive. |
|
||||
| **XeSS** | Intel XeSS Plugin | PC (Arc, RTX, RX 6000+) | Very Good | Intel's ML upscaler. Works on Intel Arc + NVIDIA + AMD. |
|
||||
| **NIS** | NVIDIA Plugin (or built-in) | ALL (cross-vendor) | Acceptable | Lightweight spatial upscaler. Good for Switch/low-end. |
|
||||
| **TAAU** | Built-in UE5 | ALL | Legacy | Gen-4/Gen-5 TAA upsampling. Fallback for all platforms. |
|
||||
|
||||
### 3.2 Setting Up DLSS (PC High Profile)
|
||||
|
||||
1. Install the **NVIDIA DLSS** plugin from the UE Marketplace or NVIDIA Developer site
|
||||
2. Enable in `Edit → Plugins → NVIDIA DLSS`
|
||||
3. In `DA_RPP_PC_High`:
|
||||
- Add `DLSS` to `SupportedUpscalers`
|
||||
- Set default upscaler to `DLSS`
|
||||
4. Console commands the manager sets when DLSS is active:
|
||||
```
|
||||
r.NGX.DLSS.Enable 1
|
||||
r.NGX.DLSS.Quality {0=UltraPerf, 1=Perf, 2=Balanced, 3=Quality, 4=UltraQuality}
|
||||
r.NGX.DLSS.DilateMotionVectors 1
|
||||
r.NGX.DLSS.Reflections 1
|
||||
r.NGX.DLSS.WaterReflections 1
|
||||
```
|
||||
|
||||
### 3.3 Setting Up FSR 2 (Cross-Platform Profile)
|
||||
|
||||
1. Install **AMD FidelityFX FSR 2** plugin
|
||||
2. Enable in plugins
|
||||
3. Console commands:
|
||||
```
|
||||
r.FidelityFX.FSR2.Enabled 1
|
||||
r.FidelityFX.FSR2.QualityMode {0=Quality, 1=Balanced, 2=Performance, 3=UltraPerformance}
|
||||
r.FidelityFX.FI.Enabled 1 ← Frame Interpolation (FSR 3)
|
||||
```
|
||||
|
||||
### 3.4 Upscaler Fallback Chain
|
||||
|
||||
`BPC_RenderPipelineManager.GetAvailableUpscalers()` implements a priority-ordered fallback:
|
||||
```
|
||||
Primary: DLSS (if RTX GPU detected)
|
||||
Fallback 1: TSR (always available)
|
||||
Fallback 2: FSR (if plugin installed)
|
||||
Fallback 3: NIS (cross-vendor lightweight)
|
||||
Fallback 4: TAAU (always available, legacy)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. Baked Lighting Fallback Configuration
|
||||
|
||||
When a platform/profile selects `Baked_Lightmass` as the GI method:
|
||||
|
||||
### 4.1 Level Preparation for Baked Lighting
|
||||
|
||||
1. Set all primary lights to **Static** (not Stationary, not Movable)
|
||||
2. Build lighting: `Build → Build Lighting Only`
|
||||
3. Ensure lightmap UVs exist on all static meshes
|
||||
4. Configure `World Settings → Lightmass Settings`:
|
||||
- `Static Lighting Level Scale`: 1.0
|
||||
- `Num Indirect Lighting Bounces`: 3–10
|
||||
- `Indirect Lighting Quality`: 1.0–4.0
|
||||
5. Place `Lightmass Importance Volumes` around playable areas
|
||||
|
||||
### 4.2 Reflection Setup for Baked Mode
|
||||
|
||||
When Lumen Reflections are off:
|
||||
1. Place `Sphere Reflection Captures` throughout the level
|
||||
2. Place `Box Reflection Captures` in interior rooms
|
||||
3. Set capture resolution: 128–256 (performance) or 512 (quality)
|
||||
4. Build reflections: `Build → Build Reflection Captures`
|
||||
|
||||
### 4.3 Console Variables for Baked Mode
|
||||
|
||||
```
|
||||
r.DynamicGlobalIlluminationMethod 0 ← Disable Lumen
|
||||
r.Lumen.Reflections.Allow 0 ← Disable Lumen reflections
|
||||
r.Shadow.Virtual.Enable 0 ← Disable VSM, use CSM
|
||||
r.SSR.Quality 2 ← Enable screen-space reflections (fallback)
|
||||
r.ReflectionMethod 2 ← Use reflection captures
|
||||
```
|
||||
|
||||
### 4.4 Mesh LOD Fallback
|
||||
|
||||
When Nanite is disabled:
|
||||
```
|
||||
r.Nanite 0 ← Disable Nanite
|
||||
r.StaticMeshLODDistanceScale 1.0 ← Maintain normal LOD distances
|
||||
r.SkeletalMeshLODBias 0 ← No LOD bias for skeletal meshes
|
||||
```
|
||||
|
||||
Ensure all static meshes have:
|
||||
- LODs generated (LOD0 = full detail, LOD1 = 50%, LOD2 = 25%, LOD3 = 10%)
|
||||
- `LODForCollision` set appropriately
|
||||
- `MinLOD` not locked to 0
|
||||
|
||||
---
|
||||
|
||||
## 5. Planar Capture System Compatibility
|
||||
|
||||
### How Pipeline Changes Affect Captures
|
||||
|
||||
| Pipeline Change | Impact on Planar Captures | Mitigation |
|
||||
|----------------|--------------------------|------------|
|
||||
| Lumen → Baked | Capture renders baked lighting (looks correct). No Lumen overhead → faster captures. | `SS_PlanarCaptureManager` increases `GlobalQualityCap` by 1 tier |
|
||||
| Baked → Lumen | Capture now includes Lumen GI (if capture profile allows). Higher cost. | `SS_PlanarCaptureManager` caps `GlobalQualityCap` to `Medium` or lower |
|
||||
| Nanite → LOD | Faster capture render. No Nanite rasterization cost. | `SS_PlanarCaptureManager` increases budget |
|
||||
| LOD → Nanite | Slower capture. Nanite in SceneCapture2D adds cost. | `SS_PlanarCaptureManager` reduces `MaxRegisteredSurfaces` |
|
||||
| CSM → VSM | Higher quality shadows in captures. Minor cost increase. | No budget change needed |
|
||||
| Upscaler change | **No impact** — captures render at native quality tier resolution | — |
|
||||
|
||||
### Capture Budget Adjustment Logic (in SS_PlanarCaptureManager)
|
||||
|
||||
```cpp
|
||||
void SS_PlanarCaptureManager::AdjustBudgetForPipeline(const SRenderPipelineConfig& Config)
|
||||
{
|
||||
if (Config.GIMethod == ERenderPipelineMethod::Baked_Lightmass)
|
||||
{
|
||||
// Lumen is off — captures are cheaper, allow higher quality
|
||||
GlobalQualityCap = EPlanarCaptureQualityTier::High;
|
||||
MaxRegisteredSurfaces = DefaultMaxSurfaces * 1.5;
|
||||
}
|
||||
else if (Config.GIMethod == ERenderPipelineMethod::Lumen_GI)
|
||||
{
|
||||
// Lumen is on — captures are expensive
|
||||
GlobalQualityCap = EPlanarCaptureQualityTier::Medium;
|
||||
MaxRegisteredSurfaces = DefaultMaxSurfaces;
|
||||
}
|
||||
|
||||
if (Config.MeshStrategy == EMeshStrategy::Nanite)
|
||||
{
|
||||
// Nanite in captures adds cost — reduce quality slightly
|
||||
if (GlobalQualityCap > EPlanarCaptureQualityTier::Medium)
|
||||
GlobalQualityCap = EPlanarCaptureQualityTier::Medium;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Per-Capture Lumen Toggle
|
||||
|
||||
In `BPC_PlanarCapture.ApplyQualityTier()`:
|
||||
|
||||
```cpp
|
||||
// If global pipeline has Lumen OFF, force capture Lumen OFF
|
||||
if (!RenderPipelineManager->IsLumenEnabled())
|
||||
{
|
||||
QualityProfile.bEnableLumen = false;
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. Settings Menu Integration
|
||||
|
||||
### Video/Graphics Tab Layout (WBP_SettingsMenu enhancement)
|
||||
|
||||
```
|
||||
┌────────────────────────────────────────────┐
|
||||
│ VIDEO / GRAPHICS │
|
||||
│ │
|
||||
│ QUALITY PRESET [Low ▼] │
|
||||
│ ⚠ Changing to Low requires level reload │
|
||||
│ │
|
||||
│ ──────── ADVANCED ──────── │
|
||||
│ Resolution Scale [========|===] 85% │
|
||||
│ Window Mode [Fullscreen ▼] │
|
||||
│ VSync [✓] │
|
||||
│ Frame Rate Limit [====|======] 60 FPS │
|
||||
│ │
|
||||
│ Global Illumination [Lumen ▼] ⚠ reload │
|
||||
│ Shadow Method [VSM ▼] ⚠ reload │
|
||||
│ Reflections [Lumen ▼] ⚠ reload │
|
||||
│ Mesh Quality [Nanite ▼] ⚠ reload │
|
||||
│ │
|
||||
│ Upscaler [DLSS ▼] │
|
||||
│ Upscaler Quality [Quality ▼] │
|
||||
│ │
|
||||
│ Texture Quality [====|======] High │
|
||||
│ Post Process [====|======] High │
|
||||
│ Shadows [====|======] High │
|
||||
│ View Distance [====|======] High │
|
||||
│ Foliage [====|======] High │
|
||||
│ Anti-Aliasing [====|======] High │
|
||||
│ │
|
||||
│ Motion Blur [✓] │
|
||||
│ Depth of Field [✓] │
|
||||
│ │
|
||||
│ Brightness [======|====] 1.0 │
|
||||
│ HDR [✓] (if supported) │
|
||||
│ │
|
||||
│ [Apply] [Reset to Defaults] │
|
||||
└────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
Features labeled `⚠ reload` require a level transition to take effect. The UI shows a warning banner when any of these are changed.
|
||||
|
||||
---
|
||||
|
||||
## 7. Platform Certification Notes
|
||||
|
||||
### Sony PlayStation TRC Requirements
|
||||
- **Minimum FPS:** PS5 must maintain 60 FPS in performance mode, 30 FPS in quality mode
|
||||
- **Resolution Floor:** PS5 must render at ≥ 1080p internal before upscaling
|
||||
- **PS4:** Must maintain 30 FPS, ≥ 720p internal
|
||||
- **PSSR:** Must be listed as available upscaler on PS5 Pro
|
||||
- **HDR:** Must support HDR10 output if display supports it
|
||||
|
||||
### Microsoft Xbox Requirements
|
||||
- **Xbox Series X:** Must support 60 FPS performance mode + 30 FPS quality mode
|
||||
- **Xbox Series S:** May target 30 FPS in quality mode
|
||||
- **VRR:** Should support Variable Refresh Rate on HDMI 2.1 displays
|
||||
- **Quick Resume:** Must save render pipeline state for Quick Resume compatibility
|
||||
|
||||
### Nintendo Switch Requirements
|
||||
- **Handheld:** Must maintain ≥ 30 FPS at native 720p panel
|
||||
- **Docked:** Must maintain ≥ 30 FPS at ≥ 720p internal (upscaled to 1080p)
|
||||
- **Dynamic Resolution:** Strongly recommended for maintaining frame rate
|
||||
- **Memory:** VRAM budget must be ≤ ~3.25 GB (4 GB total, 0.75 GB reserved)
|
||||
|
||||
---
|
||||
|
||||
## 8. Testing Matrix
|
||||
|
||||
| Platform | Low Preset | Medium | High | Ultra | Validate |
|
||||
|----------|-----------|--------|------|-------|----------|
|
||||
| PS5 | Baked+CSM+LOD | Lumen+VSM+Nanite | Lumen+VSM+Nanite | Lumen+VSM+Nanite | Check 60 FPS at all tiers |
|
||||
| PS4 | Baked+CSM+LOD | Baked+CSM+LOD | Baked+CSM+LOD | N/A | Check 30 FPS floor |
|
||||
| Xbox Series X | Baked+CSM+LOD | Lumen+VSM+Nanite | Lumen+VSM+Nanite | Lumen+VSM+Nanite | Check VRR support |
|
||||
| Xbox One | Baked+CSM+Proxy | Baked+CSM+LOD | Baked+CSM+LOD | N/A | Check 30 FPS floor |
|
||||
| Switch (docked) | Baked+CSM+Proxy | Baked+CSM+LOD | Baked+CSM+LOD | N/A | Dynamic res active |
|
||||
| Switch (handheld) | Baked+CSM+Proxy | Baked+CSM+LOD | N/A | N/A | 30 FPS at 720p |
|
||||
| PC High (RTX 3080) | SSGI+CSM+LOD | Lumen+VSM+Nanite | Lumen+VSM+Nanite | Lumen+HWRT+Nanite | DLSS working |
|
||||
| PC Low (GTX 1060) | Baked+CSM+Proxy | Baked+CSM+LOD | SSGI+CSM+LOD | N/A | FSR working |
|
||||
| SteamDeck | Baked+CSM+LOD | SSGI+CSM+LOD | SSGI+CSM+LOD | N/A | FSR working, 40 FPS |
|
||||
|
||||
---
|
||||
|
||||
## 9. Quick Reference: Console Variables
|
||||
|
||||
| Setting | CVar | Values |
|
||||
|---------|------|--------|
|
||||
| **GI Method** | `r.DynamicGlobalIlluminationMethod` | 0=Off, 1=Lumen, 2=SSGI |
|
||||
| **Lumen Reflections** | `r.Lumen.Reflections.Allow` | 0/1 |
|
||||
| **Lumen Diffuse** | `r.Lumen.DiffuseIndirect.Allow` | 0/1 |
|
||||
| **Shadow Method** | `r.Shadow.Virtual.Enable` | 0=CSM, 1=VSM |
|
||||
| **Shadow Quality** | `sg.ShadowQuality` | 0=NONE, 1=LOW, 2=MED, 3=HIGH, 4=EPIC |
|
||||
| **Reflections** | `r.ReflectionMethod` | 0=None, 1=Lumen, 2=SSR |
|
||||
| **SSR Quality** | `r.SSR.Quality` | 0-4 |
|
||||
| **Nanite** | `r.Nanite` | 0/1 |
|
||||
| **TSR** | `r.TemporalAA.Upsampling` | 0/1 |
|
||||
| **Screen %** | `r.ScreenPercentage` | 25–200 |
|
||||
| **Texture Quality** | `sg.TextureQuality` | 0–3 |
|
||||
| **Post Process** | `sg.PostProcessQuality` | 0–3 |
|
||||
| **View Distance** | `sg.ViewDistanceQuality` | 0–3 |
|
||||
| **Foliage** | `sg.FoliageQuality` | 0–3 |
|
||||
| **AA Quality** | `sg.AntiAliasingQuality` | 0–3 |
|
||||
| **Motion Blur** | `r.MotionBlurQuality` | 0=NONE, 2=MED, 4=EPIC |
|
||||
| **DoF** | `r.DepthOfFieldQuality` | 0=NONE, 2=MED, 4=EPIC |
|
||||
| **Volumetric Clouds** | `r.VolumetricCloud` | 0/1 |
|
||||
| **Virtual Textures** | `r.VT.Enable` | 0/1 |
|
||||
| **Ray Tracing** | `r.RayTracing` | 0/1 |
|
||||
| **Texture Pool** | `r.Streaming.PoolSize` | MB value |
|
||||
| **LOD Scale** | `r.StaticMeshLODDistanceScale` | 0.5–3.0 |
|
||||
| **Foliage LOD** | `foliage.LODDistanceScale` | 0.5–3.0 |
|
||||
|
||||
---
|
||||
|
||||
*Platform Render Profiles Guide v1.0 — Part of the UE5 Modular Game Framework developer docs. Systems: BPC_RenderPipelineManager (149), DA_RenderPipelineProfile.*
|
||||
@@ -1,6 +1,6 @@
|
||||
# Project Setup & Migration Guide — UE5 Modular Game Framework
|
||||
|
||||
**Version:** 1.0 | **Target UE:** 5.5–5.7
|
||||
**Version:** 1.1 | **Target UE:** 5.5–5.7
|
||||
|
||||
This guide covers everything you need to configure when migrating the framework into a new or existing UE5 project. Follow these steps in order.
|
||||
|
||||
@@ -17,6 +17,9 @@ Enable these in `Edit → Plugins`:
|
||||
| `GameplayTags` | Gameplay | All tag-driven state management (enabled by default) |
|
||||
| `Motion Warping` | Animation | `BPC_ContextualTraversalSystem` vault/mantle |
|
||||
| `Gameplay Abilities` | Gameplay | *(optional — only if using GAS for combat layer)* |
|
||||
| `NVIDIA DLSS` | Rendering | *(optional — DLSS super resolution, FrameGen on RTX)* |
|
||||
| `AMD FidelityFX FSR` | Rendering | *(optional — FSR 2/3 super resolution on all platforms)* |
|
||||
| `Intel XeSS` | Rendering | *(optional — XeSS ML upscaling)* |
|
||||
|
||||
### 1.2 Framework Files to Copy
|
||||
Copy these folders into your project's `Content/` directory:
|
||||
@@ -370,7 +373,69 @@ The framework boot order on a fresh project launch:
|
||||
|
||||
---
|
||||
|
||||
## 11. Updating This Document
|
||||
## 11. Render Pipeline Setup (NEW)
|
||||
|
||||
> **Reference:** [`docs/developer/platform-render-profiles.md`](platform-render-profiles.md) for the full guide.
|
||||
|
||||
### 11.1 Create Per-Platform Render Profiles
|
||||
```
|
||||
Content/Game/DataAssets/RenderProfiles/
|
||||
├── DA_RPP_PS5.uasset
|
||||
├── DA_RPP_PS4.uasset
|
||||
├── DA_RPP_Xbox_Series.uasset
|
||||
├── DA_RPP_Xbox_One.uasset
|
||||
├── DA_RPP_PC_High.uasset
|
||||
├── DA_RPP_PC_Low.uasset
|
||||
├── DA_RPP_SteamDeck.uasset
|
||||
└── DA_RPP_Switch.uasset
|
||||
```
|
||||
|
||||
### 11.2 Configure Default CVars for Baked Lighting Fallback
|
||||
In `Config/DefaultEngine.ini`:
|
||||
```ini
|
||||
[ConsoleVariables]
|
||||
; Low-end fallback defaults (overridden by RenderPipelineManager for high-end)
|
||||
r.DynamicGlobalIlluminationMethod=1 ; 1=Lumen (default for UE5)
|
||||
r.Shadow.Virtual.Enable=1 ; 1=VSM (default)
|
||||
r.Nanite=1 ; 1=Nanite (default)
|
||||
; On PS4/Switch, these are overridden by platform .ini
|
||||
```
|
||||
|
||||
### 11.3 Platform-Specific Config INIs
|
||||
Create `Config/PS4/PS4Engine.ini`:
|
||||
```ini
|
||||
[ConsoleVariables]
|
||||
r.DynamicGlobalIlluminationMethod=0 ; Disable Lumen on PS4
|
||||
r.Shadow.Virtual.Enable=0 ; Use CSM on PS4
|
||||
r.Nanite=0 ; Use LODs on PS4
|
||||
sg.ShadowQuality=2 ; Medium shadows
|
||||
sg.TextureQuality=2 ; Medium textures
|
||||
r.ScreenPercentage=75 ; 75% resolution
|
||||
r.Upscale.Quality=2 ; TAAU quality
|
||||
```
|
||||
|
||||
Create `Config/Switch/SwitchEngine.ini`:
|
||||
```ini
|
||||
[ConsoleVariables]
|
||||
r.DynamicGlobalIlluminationMethod=0
|
||||
r.Shadow.Virtual.Enable=0
|
||||
r.Nanite=0
|
||||
sg.ShadowQuality=1 ; Low shadows on Switch
|
||||
sg.TextureQuality=1 ; Low textures
|
||||
r.ScreenPercentage=50 ; 50% resolution (docked)
|
||||
r.Upscale.Quality=3 ; NIS quality
|
||||
r.Streaming.PoolSize=768 ; 768MB texture pool (3.25GB RAM - system)
|
||||
```
|
||||
|
||||
### 11.4 Set Up Baked Lightmaps for Low-End Levels
|
||||
For levels that need to support Low/Medium quality presets on PS4/Switch:
|
||||
1. Duplicate your level: `L_Asylum_WardA_Baked` (baked lighting variant)
|
||||
2. Set all lights to **Static** (not Stationary/Movable)
|
||||
3. Build lighting: `Build → Build Lighting Only`
|
||||
4. Place `Lightmass Importance Volume` and `Reflection Captures`
|
||||
5. Sub-level loading: on PS4/Switch, stream the baked variant; on PS5/PC, stream the Lumen variant
|
||||
|
||||
## 12. Updating This Document
|
||||
|
||||
When adding new framework systems that require Project Settings changes:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user