Files
UE5-Modular-Game-Framework/docs/blueprints/14-data-assets/DA_RenderPipelineProfile.md
Lefteris Notas dc9c1a6b98 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.
2026-05-22 18:10:24 +03:00

299 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# DA_RenderPipelineProfile — Data Asset
**Parent Class:** `UPrimaryDataAsset`
**Dependencies:** [`BPC_RenderPipelineManager`](../12-settings/149_BPC_RenderPipelineManager.md)
**Purpose:** Defines a complete rendering pipeline configuration for a specific quality tier on a specific platform family. Each profile maps quality presets (Low/Medium/High/Ultra/Cinematic) to concrete UE5 render settings: global illumination method, shadow method, reflection method, anti-aliasing, upscaling, Nanite/LOD strategy, and post-process presets. Designers configure these per-platform so PS4 gets baked light + CSM shadows while PS5 gets Lumen + Virtual Shadow Maps.
---
## Design Rationale
UE5's rendering pipeline is **not runtime-switchable** for certain features (Lumen ON/OFF, Nanite ON/OFF). These must be configured before the engine initializes or before a level loads. This Data Asset serves as the single source of truth for the render pipeline configuration. `BPC_RenderPipelineManager` reads the appropriate profile based on the player's quality selection and platform, then applies console variables through UE5's `IConsoleManager` or `UGameUserSettings` scalability API.
---
## 1. Enums
### `ERenderPipelineMethod`
| Value | Description |
|-------|-------------|
| `Lumen_GI = 0` | Lumen Global Illumination + Reflection |
| `Baked_Lightmass = 1` | Static baked lightmaps + reflection captures |
| `SSGI = 2` | Screen-space global illumination (mid-range fallback) |
| `None = 3` | No GI — unlit or emissive-only |
### `EShadowMethod`
| Value | Description |
|-------|-------------|
| `VirtualShadowMaps = 0` | UE5 Virtual Shadow Maps (Nanite-compatible) |
| `CascadedShadowMaps = 1` | Traditional CSM (low-end compatible) |
| `DistanceFieldShadows = 2` | Ray-traced distance field shadows |
| `None = 3` | No dynamic shadows |
### `EReflectionMethod`
| Value | Description |
|-------|-------------|
| `Lumen_Reflections = 0` | Lumen reflection system |
| `ScreenSpace = 1` | Screen-space reflections (SSR) |
| `ReflectionCaptures = 2` | Static sphere/box reflection captures (baked) |
| `None = 3` | No reflections |
### `EUpscalerMethod`
| Value | Description |
|-------|-------------|
| `TSR = 0` | Temporal Super Resolution (UE5 built-in) |
| `DLSS = 1` | NVIDIA DLSS 3 (requires plugin + RTX GPU) |
| `FSR = 2` | AMD FidelityFX Super Resolution 2/3 |
| `PSSR = 3` | PlayStation Spectral Super Resolution (PS5 Pro only) |
| `XeSS = 4` | Intel Xe Super Sampling |
| `NIS = 5` | NVIDIA Image Scaling (vendor-agnostic) |
| `None = 6` | Native resolution — no upscaling |
| `TAAU = 7` | Temporal Anti-Aliasing Upsample (legacy) |
### `EMeshStrategy`
| Value | Description |
|-------|-------------|
| `Nanite = 0` | Nanite virtualized geometry (UE5 only) |
| `Traditional_LOD = 1` | Standard static mesh LODs |
| `ProxyGeometry = 2` | HLOD/proxy geometry for distant objects |
### `EPlatformFamily`
| Value | Description | Default Render Method |
|-------|-------------|----------------------|
| `PC_High = 0` | PC with RTX 2000+ / RX 6000+ | Lumen + Nanite |
| `PC_Low = 1` | PC with GTX 9001600 / iGPU | Baked + CSM |
| `PS5 = 2` | PlayStation 5 | Lumen + Nanite |
| `PS5_Pro = 3` | PlayStation 5 Pro (PSSR support) | Lumen + Nanite + PSSR |
| `PS4 = 4` | PlayStation 4 / PS4 Pro | Baked + CSM + TAAU |
| `Xbox_Series = 5` | Xbox Series X\|S | Lumen + Nanite |
| `Xbox_One = 6` | Xbox One / One X | Baked + CSM + TAAU |
| `Switch_2 = 7` | Nintendo Switch 2 (when available) | Baked + CSM + FSR |
| `Switch = 8` | Nintendo Switch | Baked + ProxyGeometry + NIS |
| `SteamDeck = 9` | Steam Deck / handheld PC | Baked/SSGI + CSM + FSR |
---
## 2. Structs
### `SRenderPipelineConfig`
| Field | Type | Description |
|-------|------|-------------|
| `QualityPresetName` | `FName` | Identifier ("Low", "Medium", "High", "Ultra", "Cinematic") |
| `GIMethod` | `ERenderPipelineMethod` | Global illumination method |
| `ShadowMethod` | `EShadowMethod` | Shadow rendering method |
| `ReflectionMethod` | `EReflectionMethod` | Reflection rendering method |
| `Upscaler` | `EUpscalerMethod` | Upscaling method |
| `UpscalerQuality` | `int32` | Upscaler quality tier (0=Performance, 1=Balanced, 2=Quality, 3=UltraQuality) |
| `MeshStrategy` | `EMeshStrategy` | Geometry rendering strategy |
| `ResolutionScale` | `float` | Screen percentage (0.51.0) |
| `DynamicResolutionTarget` | `float` | Target ms for dynamic resolution (0=disabled) |
| `ShadowQuality` | `int32` | Shadow resolution/distance tier (0=NONE, 1=LOW, 2=MED, 3=HIGH, 4=EPIC) |
| `TextureQuality` | `int32` | Texture streaming pool tier (03) |
| `PostProcessQuality` | `int32` | Post-process complexity (03) |
| `ViewDistanceQuality` | `int32` | View distance tier (03) |
| `FoliageQuality` | `int32` | Foliage density tier (03) |
| `AntiAliasingQuality` | `int32` | AA quality tier (03) |
| `bEnableMotionBlur` | `bool` | Motion blur toggle |
| `bEnableDepthOfField` | `bool` | Depth of field toggle |
| `bEnableVolumetricClouds` | `bool` | Volumetric cloud rendering |
| `bEnableVirtualTextures` | `bool` | Runtime virtual textures |
| `bEnableHWRT` | `bool` | Hardware ray tracing (requires RT-capable GPU) |
| `bRequiresLevelReload` | `bool` | TRUE if this setting requires a level reload to take effect |
| `TargetFPS` | `int32` | Frame rate target (0=unlimited) |
| `bEnableVSync` | `bool` | Vertical sync |
| `Description` | `FText` | Human-readable description for settings UI |
### `SPlatformRenderDefaults`
| Field | Type | Description |
|-------|------|-------------|
| `Platform` | `EPlatformFamily` | Target platform |
| `DefaultQualityPreset` | `FName` | Preset to use on first launch ("Medium" for most) |
| `SupportedPipelines` | `TArray<ERenderPipelineMethod>` | Which GI methods this platform supports |
| `SupportedUpscalers` | `TArray<EUpscalerMethod>` | Which upscalers this platform supports |
| `MaxResolutionScale` | `float` | Maximum resolution scale (e.g., 1.0 for PS5, 0.7 for Switch) |
| `MaxFPS` | `int32` | Maximum recommended FPS target |
| `VRAMBudget_MB` | `int32` | Typical VRAM budget for this platform |
| `bSupportsNanite` | `bool` | Platform supports Nanite |
| `bSupportsLumen` | `bool` | Platform supports Lumen |
| `bSupportsHWRT` | `bool` | Platform supports hardware ray tracing |
| `ConsoleVariables` | `TMap<FString, FString>` | Additional platform-specific CVar overrides |
---
## 3. Variables
### Configuration (Instance Editable)
| Variable | Type | Default | Category | Description |
|----------|------|---------|----------|-------------|
| `PlatformFamily` | `EPlatformFamily` | `PC_High` | `Config` | Which platform this profile targets |
| `PlatformDefaults` | `SPlatformRenderDefaults` | — | `Config` | Platform-specific capabilities and defaults |
| `QualityPresets` | `TMap<FName, SRenderPipelineConfig>` | `Empty` | `Config` | Maps quality preset names to render configs |
| `bAllowDynamicPresetSwitch` | `bool` | `true` | `Config` | Whether quality can change without level reload |
| `bAutoDetectPlatform` | `bool` | `true` | `Config` | Auto-detect platform at startup |
---
## 4. Default Preset Tables (Per-Platform)
### PS5 (EPlatformFamily::PS5) — Target: 60 FPS
| Preset | Resolution % | GI | Shadows | Reflections | Upscaler | Mesh | FPS |
|--------|------------|-----|---------|-------------|----------|------|-----|
| Low | 70% | Baked | CSM | Captures | TSR Perf | LOD | 60 |
| Medium | 85% | Lumen Low | VSM Low | Lumen Low | TSR Balanced | Nanite | 60 |
| High | 100% | Lumen High | VSM High | Lumen High | TSR Quality | Nanite | 60 |
| Ultra | 100% | Lumen Ultra | VSM Ultra | Lumen Ultra | PSSR | Nanite | 60 |
| Cinematic | 100% | Lumen + HWRT | VSM + RT | Lumen + RT | PSSR | Nanite | 30 |
### PS4 (EPlatformFamily::PS4) — Target: 30 FPS
| Preset | Resolution % | GI | Shadows | Reflections | Upscaler | Mesh | FPS |
|--------|------------|-----|---------|-------------|----------|------|-----|
| Low | 60% | None | CSM Low | None | TAAU | Proxy | 30 |
| Medium | 75% | Baked | CSM Medium | Captures | TAAU | LOD | 30 |
| High | 90% | Baked | CSM High | Captures + SSR | TAAU | LOD | 30 |
### PC_High (RTX 3080+) — Target: 120 FPS
| Preset | Resolution % | GI | Shadows | Reflections | Upscaler | Mesh | FPS |
|--------|------------|-----|---------|-------------|----------|------|-----|
| Low | 70% | SSGI | CSM | SSR | DLSS Perf | LOD | 120 |
| Medium | 85% | Lumen Low | VSM | Lumen Low | DLSS Balanced | Nanite | 120 |
| High | 100% | Lumen High | VSM | Lumen High | DLSS Quality | Nanite | 120 |
| Ultra | 100% | Lumen Ultra | VSM Ultra | Lumen Ultra | DLSS Quality | Nanite | 120 |
| Cinematic | 120% | Lumen + HWRT | VSM + RT | Lumen + RT | DLSS UltraQ | Nanite | 60 |
### PC_Low (GTX 1060 / integrated) — Target: 30 FPS
| Preset | Resolution % | GI | Shadows | Reflections | Upscaler | Mesh | FPS |
|--------|------------|-----|---------|-------------|----------|------|-----|
| Low | 50% | None | CSM Low | None | FSR Perf | Proxy | 30 |
| Medium | 65% | Baked | CSM Medium | Captures | FSR Balanced | LOD | 30 |
| High | 80% | SSGI | CSM High | SSR | FSR Quality | LOD | 30 |
### Switch (EPlatformFamily::Switch) — Target: 30 FPS
| Preset | Resolution % | GI | Shadows | Reflections | Upscaler | Mesh | FPS |
|--------|------------|-----|---------|-------------|----------|------|-----|
| Low | 40% | None | CSM Low | None | NIS | Proxy | 30 |
| Medium | 55% | Baked | CSM Med | Captures | NIS | LOD | 30 |
| High | 70% | Baked | CSM High | Captures | FSR | LOD | 30 |
### Xbox_Series (EPlatformFamily::Xbox_Series) — Target: 60 FPS
| Preset | Resolution % | GI | Shadows | Reflections | Upscaler | Mesh | FPS |
|--------|------------|-----|---------|-------------|----------|------|-----|
| Low | 70% | Baked | CSM | Captures | FSR Perf | LOD | 60 |
| Medium | 85% | Lumen Low | VSM Low | Lumen Low | FSR Balanced | Nanite | 60 |
| High | 100% | Lumen High | VSM High | Lumen High | FSR Quality | Nanite | 60 |
| Ultra | 100% | Lumen Ultra | VSM Ultra | Lumen Ultra | FSR Quality | Nanite | 60 |
---
## 5. Functions
*This Data Asset has no Blueprint functions. All data retrieval is performed by `BPC_RenderPipelineManager` reading the struct tables directly.*
---
## 6. Console Variable Reference (per setting)
When `BPC_RenderPipelineManager` applies a `SRenderPipelineConfig`, it sets these UE5 console variables:
```
[Global Illumination]
r.DynamicGlobalIlluminationMethod <0=None, 1=Lumen, 2=SSGI, 3=Plugin>
r.Lumen.Reflections.Allow <0/1>
r.Lumen.DiffuseIndirect.Allow <0/1>
r.Lumen.TranslucencyVolume <0/1>
[Shadows]
r.Shadow.Virtual.Enable <0/1>
r.Shadow.CSM.MaxCascades <0-4>
sg.ShadowQuality <0-4>
[Reflections]
r.ReflectionMethod <0=None, 1=Lumen, 2=SSR>
r.SSR.Quality <0-4>
[Upscaling]
r.TemporalAA.Upsampling <0/1>
r.TSR.History.ScreenPercentage <50-200>
r.NGX.DLSS.Enable <0/1> (DLSS plugin)
r.FidelityFX.FSR2.Enabled <0/1> (FSR plugin)
r.FidelityFX.FI.Enabled <0/1>
[Mesh / Nanite]
r.Nanite <0/1>
r.Nanite.MaxPixelsPerEdge <1-4>
r.StaticMeshLODDistanceScale <0.5-3.0>
[Post Process]
sg.PostProcessQuality <0-3>
r.MotionBlurQuality <0-4>
r.DepthOfFieldQuality <0-4>
[Textures]
sg.TextureQuality <0-3>
r.Streaming.PoolSize <MB value>
[View Distance]
sg.ViewDistanceQuality <0-3>
r.ViewDistanceScale <0.5-3.0>
foliage.LODDistanceScale <0.5-3.0>
[Volumetrics]
r.VolumetricCloud <0/1>
r.VolumetricFog <0/1>
[Hardware RT]
r.RayTracing <0/1>
r.RayTracing.Shadows <0/1>
r.RayTracing.Reflections <0/1>
```
---
## 7. Integration with Planar Capture System
The Planar Capture System (`BPC_PlanarCapture`, system 136) uses `SceneCapture2D` components that capture the world from a separate camera. These captures respect the **world's current render state**, meaning:
| Main Pipeline Setting | Effect on Planar Capture |
|----------------------|-------------------------|
| Lumen GI ON | Capture shows Lumen-lit scene (if `bEnableLumen` on capture profile) |
| Baked Lightmass | Capture shows baked lighting — SceneCapture2D picks this up naturally |
| Nanite ON | Captures render Nanite geometry (significant cost — bump down capture quality tier) |
| Traditional LOD | Captures use standard LOD — lower cost |
| VSM ON | Capture benefits from VSM (if capture profile enables shadows) |
| CSM | Capture uses CSM — lower cost but lower quality |
**Key rule:** When the main pipeline switches to **Baked Lightmass**, the Planar Capture System's quality tier profiles should also use `bEnableLumen = false` to prevent the capture from trying to enable Lumen on a world that doesn't use it. `BPC_RenderPipelineManager` broadcasts `OnRenderPipelineChanged` which `SS_PlanarCaptureManager` binds to, adjusting its `GlobalQualityCap` accordingly.
See [`BPC_RenderPipelineManager`](../12-settings/149_BPC_RenderPipelineManager.md) for the full integration spec.
---
## 8. Validation Rules
- At least one quality preset must be defined
- All preset names must be unique
- `bRequiresLevelReload` must be TRUE for profile changes that modify `GIMethod`, `ShadowMethod`, or `MeshStrategy` from the current value
- Platform family must not be `Unknown` (use auto-detection as fallback)
- ResolutionScale must be 0.252.0
- Upscaler must be in `SupportedUpscalers` for the target platform
---
## 9. Consumed By
- [`BPC_RenderPipelineManager`](../12-settings/149_BPC_RenderPipelineManager.md) — reads profiles at init and on quality change
- [`BPC_PerformanceScaler`](../10-adaptive/91_BPC_PerformanceScaler.md) — delegates quality-tier CVar application
- [`SS_PlanarCaptureManager`](../17-capture/138_SS_PlanarCaptureManager.md) — adjusts capture quality cap on pipeline change
## 10. Reuse Notes
- Platform profiles are Data Asset instances — designers create `DA_RPP_PS5`, `DA_RPP_PS4`, `DA_RPP_PC_High`, `DA_RPP_PC_Low`, etc.
- The `bRequiresLevelReload` flag is critical — UI must display a "requires restart" warning when the player changes a pipeline-affecting setting (GI method, shadow method, Nanite toggle).
- Upscaler plugins (DLSS, FSR, XeSS) must be enabled in `Project Settings → Plugins`. If a plugin is missing, the system falls back to the next available upscaler.
- For console certification: each platform must have a `DA_RenderPipelineProfile` instance that meets Sony/Microsoft/Nintendo TRC requirements (minimum FPS target, resolution floor).
- The `ConsoleVariables` override map on `SPlatformRenderDefaults` allows per-platform tweaks without modifying the quality preset structs.