# 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 900–1600 / 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.5–1.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 (0–3) |
| `PostProcessQuality` | `int32` | Post-process complexity (0–3) |
| `ViewDistanceQuality` | `int32` | View distance tier (0–3) |
| `FoliageQuality` | `int32` | Foliage density tier (0–3) |
| `AntiAliasingQuality` | `int32` | AA quality tier (0–3) |
| `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.25–2.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.
