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:
@@ -2,20 +2,20 @@
|
||||
|
||||
**Parent:** `UUserWidget`
|
||||
**Used by:** `SS_UIManager.PushMenu("SettingsMenu")`
|
||||
**Depends On:** `SS_UIManager`, `SS_SettingsSystem`
|
||||
**Depends On:** `SS_UIManager`, `SS_SettingsSystem`, `BPC_RenderPipelineManager`
|
||||
|
||||
---
|
||||
|
||||
### Purpose
|
||||
Full settings screen with sections: Audio, Video/Graphics, Gameplay, Controls, Accessibility.
|
||||
Full settings screen with tabs: Video/Graphics, Audio, Gameplay, Controls, Accessibility. The Video tab includes quality presets with platform-aware render pipeline options, upscaling configuration, individual feature toggles, and visual warnings for settings that require a level reload.
|
||||
|
||||
### Enums (local or global)
|
||||
|
||||
```cpp
|
||||
```
|
||||
E_SettingsTab
|
||||
{
|
||||
Audio,
|
||||
Video,
|
||||
Audio,
|
||||
Gameplay,
|
||||
Controls,
|
||||
Accessibility
|
||||
@@ -29,75 +29,215 @@ E_SettingsTab
|
||||
| `ActiveTab` | `E_SettingsTab` | Currently visible tab |
|
||||
| `TabButtons` | Array of `Button` | Tab navigation buttons |
|
||||
| `TabPanels` | Array of `PanelWidget` | Tab content panels |
|
||||
| `ReloadWarningBanner` | `Border` | Warning banner for reload-required settings |
|
||||
|
||||
**Audio Tab Children:**
|
||||
---
|
||||
|
||||
### Video Tab Children (EXPANDED — was 5, now 25+)
|
||||
|
||||
**Quality Preset:**
|
||||
| Name | Type | Description |
|
||||
|------|------|-------------|
|
||||
| `QualityPresetDropdown` | `ComboBoxString` | Low, Medium, High, Ultra, Cinematic, Custom |
|
||||
| `PresetDescriptionText` | `RichTextBlock` | Describes what each preset changes |
|
||||
| `ReloadWarningIcon` | `Image` | ⚠ icon visible when preset change requires reload |
|
||||
|
||||
**Display:**
|
||||
| Name | Type | Description |
|
||||
|------|------|-------------|
|
||||
| `ResolutionScaleSlider` | `Slider` | 25%–200% screen percentage |
|
||||
| `ResolutionScaleValue` | `TextBlock` | Shows current % |
|
||||
| `WindowModeDropdown` | `ComboBoxString` | Fullscreen, Windowed Fullscreen, Windowed |
|
||||
| `VSyncToggle` | `CheckBox` | On/Off |
|
||||
| `FrameRateLimitSlider` | `Slider` | 30–240 FPS |
|
||||
| `BrightnessSlider` | `Slider` | 0.5–2.0 gamma |
|
||||
| `HDRToggle` | `CheckBox` | HDR output (if display supports) |
|
||||
|
||||
**Render Pipeline (⚠ reload required section):**
|
||||
| Name | Type | Description |
|
||||
|------|------|-------------|
|
||||
| `GlobalIlluminationDropdown` | `ComboBoxString` | Lumen, Baked Lightmass, SSGI, Off |
|
||||
| `ShadowMethodDropdown` | `ComboBoxString` | Virtual Shadow Maps, Cascaded, Distance Field, Off |
|
||||
| `ReflectionMethodDropdown` | `ComboBoxString` | Lumen, Screen Space, Captures, Off |
|
||||
| `MeshStrategyDropdown` | `ComboBoxString` | Nanite, Traditional LOD, Proxy Geometry |
|
||||
| `PipelineReloadBanner` | `Border` | "These settings require a level transition to apply" |
|
||||
|
||||
**Upscaling:**
|
||||
| Name | Type | Description |
|
||||
|------|------|-------------|
|
||||
| `UpscalerMethodDropdown` | `ComboBoxString` | TSR, DLSS, FSR, PSSR, XeSS, NIS, TAAU, Off |
|
||||
| `UpscalerQualityDropdown` | `ComboBoxString` | Ultra Performance, Performance, Balanced, Quality, Ultra Quality |
|
||||
| `DynamicResolutionToggle` | `CheckBox` | Enable dynamic resolution scaling |
|
||||
| `DynamicResTargetSlider` | `Slider` | Target FPS for dynamic resolution |
|
||||
|
||||
**Scalability Sliders:**
|
||||
| Name | Type | Description |
|
||||
|------|------|-------------|
|
||||
| `ShadowQualitySlider` | `Slider` | 0=NONE, 1=LOW, 2=MED, 3=HIGH, 4=EPIC |
|
||||
| `TextureQualitySlider` | `Slider` | 0–3 |
|
||||
| `PostProcessQualitySlider` | `Slider` | 0–3 |
|
||||
| `ViewDistanceQualitySlider` | `Slider` | 0–3 |
|
||||
| `FoliageQualitySlider` | `Slider` | 0–3 |
|
||||
| `AntiAliasingQualitySlider` | `Slider` | 0–3 |
|
||||
|
||||
**Post-Process Toggles:**
|
||||
| Name | Type | Description |
|
||||
|------|------|-------------|
|
||||
| `MotionBlurToggle` | `CheckBox` | On/Off |
|
||||
| `DepthOfFieldToggle` | `CheckBox` | On/Off |
|
||||
| `VolumetricCloudsToggle` | `CheckBox` | On/Off |
|
||||
| `HWRTToggle` | `CheckBox` | Hardware Ray Tracing (⚠ reload) — only visible on supported platforms |
|
||||
|
||||
**Texture:**
|
||||
| Name | Type | Description |
|
||||
|------|------|-------------|
|
||||
| `TexturePoolSizeSlider` | `Slider` | 512–8192 MB |
|
||||
|
||||
**Actions:**
|
||||
| Name | Type | Description |
|
||||
|------|------|-------------|
|
||||
| `ApplyButton` | `Button` | Apply all pending changes |
|
||||
| `RevertButton` | `Button` | Revert to last applied state |
|
||||
| `ResetDefaultsButton` | `Button` | Reset all video settings to platform defaults |
|
||||
|
||||
---
|
||||
|
||||
### Audio Tab Children
|
||||
|
||||
| Name | Type | Description |
|
||||
|------|------|-------------|
|
||||
| `MasterVolumeSlider` | `Slider` | 0-100 |
|
||||
| `SFXVolumeSlider` | `Slider` | 0-100 |
|
||||
| `MusicVolumeSlider` | `Slider` | 0-100 |
|
||||
| `VoiceVolumeSlider` | `Slider` | 0-100 |
|
||||
| `MasterVolumeSlider` | `Slider` | 0–100 |
|
||||
| `SFXVolumeSlider` | `Slider` | 0–100 |
|
||||
| `MusicVolumeSlider` | `Slider` | 0–100 |
|
||||
| `VoiceVolumeSlider` | `Slider` | 0–100 |
|
||||
| `AmbientVolumeSlider` | `Slider` | 0–100 |
|
||||
| `UIVolumeSlider` | `Slider` | 0–100 |
|
||||
| `SpatialAudioToggle` | `CheckBox` | On/Off |
|
||||
| `AudioQualityDropdown` | `ComboBoxString` | Low, Medium, High |
|
||||
| `SubtitlesToggle` | `CheckBox` | On/Off |
|
||||
|
||||
**Video Tab Children:**
|
||||
|
||||
| Name | Type | Description |
|
||||
|------|------|-------------|
|
||||
| `ResolutionDropdown` | `ComboBoxString` | Available resolutions |
|
||||
| `WindowModeDropdown` | `ComboBoxString` | Fullscreen, Windowed, Borderless |
|
||||
| `VSyncToggle` | `CheckBox` | On/Off |
|
||||
| `QualityPresetDropdown` | `ComboBoxString` | Low, Medium, High, Epic |
|
||||
| `BrightnessSlider` | `Slider` | 0.5-2.0 gamma |
|
||||
|
||||
**Gameplay Tab Children:**
|
||||
### Gameplay Tab Children
|
||||
|
||||
| Name | Type | Description |
|
||||
|------|------|-------------|
|
||||
| `InvertYAxisToggle` | `CheckBox` | On/Off |
|
||||
| `SensitivitySlider` | `Slider` | Mouse sensitivity 0.1-5.0 |
|
||||
| `HoldDurationToggle` | `CheckBox` | Tap vs Hold for interactions |
|
||||
| `AutoPickupToggle` | `CheckBox` | On/Off |
|
||||
| `CrosshairToggle` | `CheckBox` | Show crosshair |
|
||||
| `SensitivityXSlider` | `Slider` | Mouse sensitivity X |
|
||||
| `SensitivityYSlider` | `Slider` | Mouse sensitivity Y |
|
||||
| `FOVSlider` | `Slider` | 70–120 degrees |
|
||||
| `HeadBobToggle` | `CheckBox` | Camera head bob |
|
||||
| `AutoPickupToggle` | `CheckBox` | Auto-pickup items |
|
||||
| `CrosshairTypeDropdown` | `ComboBoxString` | Default, Dot, Cross, Off |
|
||||
|
||||
**Controls Tab Children:**
|
||||
### Controls Tab Children
|
||||
|
||||
| Name | Type | Description |
|
||||
|------|------|-------------|
|
||||
| `ActionMappingsList` | `ListView` | Key binding rows |
|
||||
| `ResetDefaultsButton` | `Button` | Reset all bindings |
|
||||
|
||||
**Accessibility Tab Children:**
|
||||
### Accessibility Tab Children
|
||||
|
||||
| Name | Type | Description |
|
||||
|------|------|-------------|
|
||||
| `SubtitleSizeDropdown` | `ComboBoxString` | Small, Medium, Large |
|
||||
| `SubtitleBackgroundOpacity` | `Slider` | 0-100% |
|
||||
| `SubtitleBackgroundOpacity` | `Slider` | 0–100% |
|
||||
| `ColorblindModeDropdown` | `ComboBoxString` | None, Protanopia, Deuteranopia, Tritanopia |
|
||||
| `HighContrastUIToggle` | `CheckBox` | On/Off |
|
||||
| `CameraShakeIntensity` | `Slider` | 0-100% |
|
||||
| `MotionBlurToggle` | `CheckBox` | On/Off |
|
||||
| `CameraShakeIntensity` | `Slider` | 0–100% |
|
||||
| `ScreenShakeToggle` | `CheckBox` | Enable/disable screen shake |
|
||||
| `ReducedMotionToggle` | `CheckBox` | Reduce UI animations |
|
||||
| `LargeTextToggle` | `CheckBox` | Enlarge all UI text |
|
||||
| `TextToSpeechToggle` | `CheckBox` | TTS for UI elements |
|
||||
| `DisableFlashToggle` | `CheckBox` | Prevent strobe effects |
|
||||
| `HapticsEnabledToggle` | `CheckBox` | Enable controller vibration |
|
||||
| `HapticsIntensitySlider` | `Slider` | Vibration intensity 0–100% |
|
||||
| `AdaptiveTriggersToggle` | `CheckBox` | PS5 DualSense adaptive triggers |
|
||||
| `ControllerSpeakerToggle` | `CheckBox` | PS5 controller speaker |
|
||||
|
||||
---
|
||||
|
||||
### Functions
|
||||
|
||||
| Name | Inputs | Outputs | Description |
|
||||
|------|--------|---------|-------------|
|
||||
| `OnConstruct` | — | — | Populate dropdowns from system, load saved settings |
|
||||
| `OnConstruct` | — | — | Populate dropdowns, load saved settings, query available upscalers |
|
||||
| `SwitchTab` | Tab: `E_SettingsTab` | — | Show selected panel, hide others |
|
||||
| `OnQualityPresetChanged` | NewPreset: Name | — | Update all controls to reflect preset, show reload warning if needed |
|
||||
| `OnPipelineSettingChanged` | SettingName: Name | — | Show reload banner if setting requires level reload |
|
||||
| `OnSettingChanged` | SettingName: FName, Value: Generic | — | Write to SS_SettingsSystem |
|
||||
| `SaveSettings` | — | — | SS_SettingsSystem.SaveToDisk |
|
||||
| `ApplyVideoSettings` | — | — | Apply resolution, window mode, quality |
|
||||
| `ResetToDefaults` | — | — | Load default values, re-populate UI |
|
||||
| `ApplyVideoSettings` | — | — | SS_SettingsSystem.ApplyGraphicsSettings → BPC_RenderPipelineManager |
|
||||
| `ResetToDefaults` | — | — | Load platform defaults, re-populate UI |
|
||||
| `OnBack` | — | — | SaveSettings, SS_UIManager.PopMenu |
|
||||
| `RebindKey` | ActionName: FName | — | Listen for next key press, map to action |
|
||||
| `QueryAvailableUpscalers` | — | TArray<E_UpscalerMethod> | Calls BPC_RenderPipelineManager.GetAvailableUpscalers() |
|
||||
| `ShowReloadWarning` | — | — | Display "⚠ Some settings will apply on next level load" banner |
|
||||
| `HideReloadWarning` | — | — | Dismiss the reload warning banner |
|
||||
| `UpdatePresetDescription` | Preset: Name | — | Show FPS target, resolution, GI method for preset |
|
||||
| `OnHoverSetting` | SettingName: Name | — | Show tooltip explaining what this setting does |
|
||||
| `RevertToApplied` | — | — | Revert UI controls to last-applied state |
|
||||
|
||||
---
|
||||
|
||||
### Quality Preset Descriptions (shown in `PresetDescriptionText`)
|
||||
|
||||
| Preset | Description |
|
||||
|--------|-------------|
|
||||
| **Low** | Performance mode. Baked lighting, CSM shadows, LOD meshes. Target: 60 FPS on consoles, 120 FPS on PC. |
|
||||
| **Medium** | Balanced. Lumen Low GI, VSM shadows, Nanite enabled, TSR upscaling. Target: 60 FPS. |
|
||||
| **High** | Quality mode. Full Lumen GI, high-quality VSM, Nanite, DLSS/FSR Quality upscaling. Target: 60 FPS. |
|
||||
| **Ultra** | Maximum fidelity. Lumen Ultra, full VSM, Nanite, DLSS/PSSR upscaling. Target: 60 FPS (30 on base consoles). |
|
||||
| **Cinematic** | Cinematic quality. Lumen + HWRT, path tracing available, highest upscaling quality. Target: 30 FPS. |
|
||||
| **Custom** | Manually configured settings. Performance impact varies. |
|
||||
|
||||
---
|
||||
|
||||
### Communications With
|
||||
|
||||
| Target System | Method | Why |
|
||||
|--------------|--------|-----|
|
||||
| [`SS_UIManager`](44_SS_UIManager.md) | Push/Pop | Menu lifecycle |
|
||||
| `SS_SettingsSystem` | Function calls | Read/write settings |
|
||||
| `SS_SettingsSystem` | Function calls | Read/write all settings |
|
||||
| `BPC_RenderPipelineManager` (149) | Function calls | Query available upscalers, check reload requirements |
|
||||
|
||||
### Blueprint Flow — Video Tab
|
||||
|
||||
```
|
||||
[OnConstruct]
|
||||
├─ Populate QualityPresetDropdown
|
||||
├─ Read SS_SettingsSystem.GetSettingFloat("QualityPreset") → set dropdown
|
||||
├─ Call BPC_RenderPipelineManager.GetAvailableUpscalers() → populate upscaler dropdown
|
||||
│ └─ Filter: only show upscalers supported on this platform
|
||||
├─ Read all saved settings from SS_SettingsSystem → populate sliders/toggles
|
||||
└─ Call UpdatePresetDescription based on active preset
|
||||
|
||||
[OnQualityPresetChanged(NewPreset)]
|
||||
├─ Call BPC_RenderPipelineManager.RequiresReloadForPresetChange(NewPreset)
|
||||
├─ If TRUE: ShowReloadWarning()
|
||||
├─ If FALSE: HideReloadWarning()
|
||||
├─ Set all sliders/toggles to match the preset defaults
|
||||
├─ UpdatePresetDescription(NewPreset)
|
||||
└─ SS_SettingsSystem.SetSettingDropdown("QualityPreset", NewPreset)
|
||||
|
||||
[OnPipelineSettingChanged(SettingName)]
|
||||
├─ Check if setting is in "reload required" list:
|
||||
│ [GlobalIllumination, ShadowMethod, ReflectionMethod, MeshStrategy, HWRT]
|
||||
├─ If changed from current: ShowReloadWarning()
|
||||
└─ Else: HideReloadWarning()
|
||||
|
||||
[ApplyVideoSettings]
|
||||
├─ SS_SettingsSystem.ApplyGraphicsSettings()
|
||||
├─ If reload warning visible AND game is in session:
|
||||
│ └─ SS_SettingsSystem.SaveSettings()
|
||||
│ └─ Show notification: "Settings applied. Render pipeline changes will take effect on next level load."
|
||||
├─ Else if in Main Menu:
|
||||
│ └─ Apply immediately (no reload needed for menu)
|
||||
└─ HideReloadWarning()
|
||||
```
|
||||
|
||||
### Reuse Notes
|
||||
- The tab panel pattern can be extended for mod settings or developer menus by adding new tab entries
|
||||
- Split from original bundled `36_WBP_MenuWidgets.md` per Clean Slate refactoring plan
|
||||
- All controls marked `⚠ reload` call `OnPipelineSettingChanged` to show the warning banner
|
||||
- The Video tab queries `BPC_RenderPipelineManager` at construction to know which upscalers are available
|
||||
- Preset selection acts as a "quick-config" — sets all sliders/toggles to preset defaults, then user can fine-tune
|
||||
- When Custom preset is selected, all individual controls are enabled; other presets lock controls to their defaults
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
`ActorComponent`
|
||||
|
||||
### Dependencies
|
||||
- [`BPC_RenderPipelineManager`](../12-settings/149_BPC_RenderPipelineManager.md) — **Delegates all CVar application** (GI, shadows, upscaling, Nanite, quality tiers)
|
||||
- [`DA_RenderPipelineProfile`](../14-data-assets/DA_RenderPipelineProfile.md) — Reads render config per platform + quality tier
|
||||
- [`BPC_LightingManager`](65_BPC_LightingManager.md) — Controls light quality
|
||||
- [`BPC_AudioManager`](66_BPC_AudioManager.md) — Controls audio quality
|
||||
- [`BPC_VFXManager`](67_BPC_VFXManager.md) — Controls particle LOD
|
||||
@@ -16,7 +18,7 @@
|
||||
- [`GI_GameFramework`](../01-core/04_GI_GameFramework.md) — Frame time measurement
|
||||
|
||||
### Purpose
|
||||
Automatically adjusts graphics, audio, and gameplay quality settings based on real-time performance metrics (frame time, draw calls, memory usage). Provides a unified interface for all other systems to scale their quality without direct awareness of the hardware. Supports manual user override via Settings menu and adaptive automatic mode. Maintains a performance budget that is dynamically allocated across subsystems.
|
||||
Automatically adjusts rendering, audio, and gameplay quality settings based on real-time performance metrics (frame time, draw calls, memory usage). **Delegates all render pipeline CVar changes to `BPC_RenderPipelineManager`** — this component focuses on monitoring performance and deciding WHEN to change quality tiers. The RenderPipelineManager handles the HOW (which CVars to execute, whether a reload is needed). Supports manual user override via Settings menu and adaptive automatic mode. Maintains a performance budget that is dynamically allocated across subsystems.
|
||||
|
||||
### Enums
|
||||
|
||||
@@ -128,13 +130,15 @@ Automatically adjusts graphics, audio, and gameplay quality settings based on re
|
||||
└─► If CurrentQualityLevel == Level: return
|
||||
└─► TargetQualityLevel = Level
|
||||
└─► bIsScalingInProgress = true
|
||||
└─► ApplyScalerSettings(Level)
|
||||
└─► For each subsystem:
|
||||
BPC_LightingManager: SetParticleLOD mapped to QualityLevel
|
||||
└─► Delegate to BPC_RenderPipelineManager.ApplyQualityPreset(PresetName)
|
||||
→ RenderPipelineManager handles ALL CVar application
|
||||
→ Reads DA_RenderPipelineProfile for current platform
|
||||
→ Returns whether reload is required
|
||||
└─► For each non-render subsystem:
|
||||
BPC_LightingManager: Reduce dynamic light count
|
||||
BPC_AudioManager: Reduce active layers and spatial audio
|
||||
BPC_VFXManager: SetParticleLOD mapped to QualityLevel
|
||||
BPC_AtmosphereController: Reduce preset complexity
|
||||
└─► Apply UE console variables for resolution, shadows, textures, foliage
|
||||
└─► bIsScalingInProgress = false
|
||||
└─► CurrentQualityLevel = TargetQualityLevel
|
||||
└─► OnQualityLevelChanged.Broadcast(CurrentQualityLevel)
|
||||
@@ -215,6 +219,7 @@ Automatically adjusts graphics, audio, and gameplay quality settings based on re
|
||||
|
||||
| Target | Method | Why |
|
||||
|--------|--------|-----|
|
||||
| [`BPC_RenderPipelineManager`](../12-settings/149_BPC_RenderPipelineManager.md) | Direct call | **All render CVar application** — delegates quality tier to pipeline manager |
|
||||
| [`GI_GameFramework`](../01-core/04_GI_GameFramework.md) | Direct call | Frame time data source |
|
||||
| [`SS_SaveManager`](../05-saveload/28_SS_SaveManager.md) | Direct call | Save/load settings |
|
||||
| [`BPC_LightingManager`](65_BPC_LightingManager.md) | Get from player | Light quality reduction |
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
### Dependencies
|
||||
- [`GI_GameFramework`](../01-core/04_GI_GameFramework.md) — Game instance reference
|
||||
- [`BPC_PerformanceScaler`](../10-adaptive/69_BPC_PerformanceScaler.md) — Quality settings bridge
|
||||
- [`BPC_RenderPipelineManager`](149_BPC_RenderPipelineManager.md) — Quality pipeline bridge (NEW)
|
||||
- [`SS_SaveManager`](../05-saveload/28_SS_SaveManager.md) — Persist settings
|
||||
- [`WBP_SettingsUI`](../06-ui/44_WBP_SettingsUI.md) — UI to read/write settings
|
||||
|
||||
@@ -116,8 +116,9 @@ Centralized settings manager that stores, applies, and persists all player-confi
|
||||
|
||||
[ApplySettings]
|
||||
└─► ApplyGraphicsSettings():
|
||||
Get "ResolutionScale", "ShadowQuality", etc.
|
||||
Pass to BPC_PerformanceScaler.SetQualityLevel
|
||||
Get "QualityPreset", "ResolutionScale", "UpscalerMethod", etc.
|
||||
Pass to BPC_RenderPipelineManager.ApplyQualityPreset(QualityPreset)
|
||||
→ RenderPipelineManager handles ALL CVars, reload detection, platform selection
|
||||
└─► ApplyAudioSettings():
|
||||
Get "MasterVolume", "SFXVolume", etc.
|
||||
Pass to BPC_AudioManager volume modifiers
|
||||
@@ -146,18 +147,31 @@ Centralized settings manager that stores, applies, and persists all player-confi
|
||||
|
||||
[RegisterDefaultSettings]
|
||||
└─► Graphics category:
|
||||
ResolutionScale Float 1.0 [0.5–1.5]
|
||||
ShadowQuality Int 2 [0–3]
|
||||
TextureQuality Int 2 [0–3]
|
||||
PostProcessQuality Int 2 [0–3]
|
||||
AntiAliasing Dropdown [TSR, TAA, FXAA, Off]
|
||||
VSync Bool true
|
||||
FrameRateLimit Int 60 [30–240]
|
||||
GlobalIllumination Dropdown [Lumen, SSGI, Off]
|
||||
MotionBlur Bool true
|
||||
DepthOfField Bool true
|
||||
FoliageQuality Int 2 [0–3]
|
||||
ViewDistance Int 2 [0–3]
|
||||
QualityPreset Dropdown [Low, Medium, High, Ultra, Cinematic, Custom]
|
||||
GlobalIllumination Dropdown [Lumen, Baked, SSGI, Off] ⚠ reload
|
||||
ShadowMethod Dropdown [VSM, CSM, DFShadows, Off] ⚠ reload
|
||||
ReflectionMethod Dropdown [Lumen, SSR, Captures, Off] ⚠ reload
|
||||
MeshStrategy Dropdown [Nanite, LOD, Proxy] ⚠ reload
|
||||
UpscalerMethod Dropdown [TSR, DLSS, FSR, PSSR, XeSS, NIS, TAAU, Off]
|
||||
UpscalerQuality Dropdown [UltraPerf, Perf, Balanced, Quality, UltraQuality]
|
||||
ResolutionScale Float 1.0 [0.25–2.0]
|
||||
DynamicResolution Bool false
|
||||
DynamicResTargetFPS Int 60 [30–120]
|
||||
ShadowQuality Int 2 [0–4]
|
||||
TextureQuality Int 2 [0–3]
|
||||
PostProcessQuality Int 2 [0–3]
|
||||
ViewDistanceQuality Int 2 [0–3]
|
||||
FoliageQuality Int 2 [0–3]
|
||||
AntiAliasingQuality Int 2 [0–3]
|
||||
VSync Bool true
|
||||
FrameRateLimit Int 60 [30–240]
|
||||
MotionBlur Bool true
|
||||
DepthOfField Bool true
|
||||
VolumetricClouds Bool true
|
||||
HW_RayTracing Bool false ⚠ reload
|
||||
Brightness Float 1.0 [0.5–2.0]
|
||||
HDR Bool false (if display supports)
|
||||
TexturePoolSizeMB Int 2048 [512–8192]
|
||||
└─► Audio category:
|
||||
MasterVolume Float 1.0 [0–1]
|
||||
SFXVolume Float 1.0 [0–1]
|
||||
@@ -205,7 +219,8 @@ Centralized settings manager that stores, applies, and persists all player-confi
|
||||
|
||||
| Target | Method | Why |
|
||||
|--------|--------|-----|
|
||||
| [`BPC_PerformanceScaler`](../10-adaptive/69_BPC_PerformanceScaler.md) | Cast to player | Graphics settings |
|
||||
| [`BPC_RenderPipelineManager`](149_BPC_RenderPipelineManager.md) | Direct call | Graphics pipeline settings |
|
||||
| [`BPC_PerformanceScaler`](../10-adaptive/69_BPC_PerformanceScaler.md) | Direct call | Adaptive quality bridging |
|
||||
| [`BPC_AudioManager`](../10-adaptive/66_BPC_AudioManager.md) | Cast to player | Audio settings |
|
||||
| [`BPC_Movement`](../02-player/14_BPC_Movement.md) | Cast to player | Gameplay settings |
|
||||
| [`SS_SaveManager`](../05-saveload/28_SS_SaveManager.md) | Direct call | Persistence |
|
||||
|
||||
432
docs/blueprints/12-settings/149_BPC_RenderPipelineManager.md
Normal file
432
docs/blueprints/12-settings/149_BPC_RenderPipelineManager.md
Normal file
@@ -0,0 +1,432 @@
|
||||
# 149 — Render Pipeline Manager (`BPC_RenderPipelineManager`)
|
||||
|
||||
> **Blueprint-Only Implementation** — UE 5.5–5.7 supports all render pipeline configuration from Blueprints via `Execute Console Command` and `UGameUserSettings` API calls. This component wraps the complexity of per-platform render pipeline selection, upscaler configuration, and pre-level-load CVar application behind a simple `ApplyQualityPreset(PresetName)` interface.
|
||||
|
||||
---
|
||||
|
||||
## Purpose
|
||||
Central authority for 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 dependent systems (Planar Capture, Audio, UI) can adapt.
|
||||
|
||||
## Dependencies
|
||||
- **Requires:** [`DA_RenderPipelineProfile`](../14-data-assets/DA_RenderPipelineProfile.md) (render configs), [`SS_SettingsSystem`](105_SS_SettingsSystem.md) (saved quality preferences), [`GI_GameFramework`](../01-core/04_GI_GameFramework.md) (game phase for pre-load apply)
|
||||
- **Required By:** [`BPC_PerformanceScaler`](../10-adaptive/91_BPC_PerformanceScaler.md) (delegates CVar application), [`SS_PlanarCaptureManager`](../17-capture/138_SS_PlanarCaptureManager.md) (capture quality cap on pipeline change), [`WBP_SettingsMenu`](../06-ui/57_WBP_SettingsMenu.md) (Video tab quality controls)
|
||||
- **Engine/Plugin Requirements:** DLSS Plugin (optional), FSR Plugin (optional), XeSS Plugin (optional), GameplayTags, Enhanced Input
|
||||
|
||||
## Class Info
|
||||
| Property | Value |
|
||||
|----------|-------|
|
||||
| **Parent Class** | `ActorComponent` |
|
||||
| **Class Type** | Blueprint Component |
|
||||
| **Asset Path** | `Content/Framework/Settings/BPC_RenderPipelineManager` |
|
||||
| **Implements Interfaces** | None |
|
||||
| **Attachment** | Player Controller (`PC_CoreController`) |
|
||||
|
||||
---
|
||||
|
||||
## 1. Enums
|
||||
|
||||
*See [`DA_RenderPipelineProfile`](../14-data-assets/DA_RenderPipelineProfile.md) for: `ERenderPipelineMethod`, `EShadowMethod`, `EReflectionMethod`, `EUpscalerMethod`, `EMeshStrategy`, `EPlatformFamily`.*
|
||||
|
||||
### `ERenderPipelineChangeType`
|
||||
| Value | Description |
|
||||
|-------|-------------|
|
||||
| `NonDestructive = 0` | Change is safe at runtime (resolution, texture quality, FPS cap) |
|
||||
| `RequiresLevelReload = 1` | Change requires reloading the current level (GI method, Nanite, shadow method) |
|
||||
| `RequiresEngineRestart = 2` | Change requires full engine restart (HWRT toggle on some platforms) |
|
||||
|
||||
---
|
||||
|
||||
## 2. Structs
|
||||
|
||||
### `SActivePipelineState`
|
||||
| Field | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| `Platform` | `EPlatformFamily` | Detected platform |
|
||||
| `ActivePreset` | `FName` | Currently applied quality preset name |
|
||||
| `PendingPreset` | `FName` | Queued preset awaiting reload |
|
||||
| `ActivePipelineProfile` | `DA_RenderPipelineProfile` | Currently loaded profile Data Asset |
|
||||
| `bPipelineApplied` | `bool` | Whether full pipeline has been applied |
|
||||
| `bPendingReloadRequired` | `bool` | Whether a level reload is needed to apply changes |
|
||||
| `AppliedConfig` | `SRenderPipelineConfig` | Currently active render config values |
|
||||
|
||||
---
|
||||
|
||||
## 3. Variables
|
||||
|
||||
### Configuration (Instance Editable)
|
||||
| Variable | Type | Default | Category | Description |
|
||||
|----------|------|---------|----------|-------------|
|
||||
| `PlatformProfileMap` | `TMap<EPlatformFamily, DA_RenderPipelineProfile>` | `Empty` | `Config` | One Data Asset per platform family |
|
||||
| `DefaultQualityPreset` | `FName` | `Medium` | `Config` | Preset to use on first launch |
|
||||
| `bApplyPipelineOnBeginPlay` | `bool` | `true` | `Config` | Automatically apply pipeline on BeginPlay |
|
||||
| `bAutoDetectPlatform` | `bool` | `true` | `Config` | Auto-detect platform at startup |
|
||||
|
||||
### Internal (Private)
|
||||
| Variable | Type | Default | Category | Description |
|
||||
|----------|------|---------|----------|-------------|
|
||||
| `ActivePipeline` | `DA_RenderPipelineProfile` | `None` | `State` | Currently active profile |
|
||||
| `ActiveState` | `SActivePipelineState` | — | `State` | Full current pipeline state |
|
||||
| `DetectedPlatform` | `EPlatformFamily` | `PC_High` | `State` | Auto-detected platform |
|
||||
| `bIsInitialized` | `bool` | `false` | `State` | Whether Initialize completed |
|
||||
| `CachedPlayerController` | `APlayerController` | `None` | `Cache` | Owner PC reference |
|
||||
| `bReloadNeededOnNextLevel` | `bool` | `false` | `State` | Reload flag for next level load |
|
||||
|
||||
---
|
||||
|
||||
## 4. Functions
|
||||
|
||||
### Public Functions
|
||||
|
||||
#### `Initialize` → `void`
|
||||
- **Description:** Detects platform, loads the appropriate `DA_RenderPipelineProfile`, reads saved quality from `SS_SettingsSystem`, and applies initial pipeline settings.
|
||||
- **Flow:**
|
||||
1. Get Owner → Cast to PlayerController → cache
|
||||
2. If `bAutoDetectPlatform`: call `DetectPlatform()` → set `DetectedPlatform`
|
||||
3. Lookup `DA_RenderPipelineProfile` from `PlatformProfileMap` by `DetectedPlatform`
|
||||
4. If not found: log error, fallback to `PC_High` profile
|
||||
5. Read `SS_SettingsSystem.GetSettingFloat("QualityPreset")` → resolve preset name
|
||||
6. If no saved setting: use `DefaultQualityPreset`
|
||||
7. Call `ApplyQualityPreset(PresetName)`
|
||||
8. Bind to `SS_SettingsSystem.OnSettingChanged` → listen for quality changes
|
||||
9. Bind to `GI_GameFramework.OnGamePhaseChanged` → apply pending reloads on level change
|
||||
10. Set `bIsInitialized = true`
|
||||
11. Broadcast `OnPipelineManagerInitialized`
|
||||
|
||||
#### `ApplyQualityPreset` → `ERenderPipelineChangeType`
|
||||
- **Description:** Apply a quality preset by name. Returns whether a level reload is needed.
|
||||
- **Parameters:**
|
||||
| Param | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| `PresetName` | `FName` | Quality preset to apply ("Low", "Medium", "High", "Ultra", "Cinematic") |
|
||||
| `bForceApply` | `bool` | Force re-apply even if already active |
|
||||
- **Flow:**
|
||||
1. Validate `bIsInitialized` and `ActivePipeline` is valid
|
||||
2. Lookup `SRenderPipelineConfig` from `ActivePipeline.QualityPresets[PresetName]`
|
||||
3. If not found: log error, return
|
||||
4. Compare with `ActiveState.AppliedConfig`:
|
||||
- If identical and not `bForceApply`: return `NonDestructive`
|
||||
5. Determine change type:
|
||||
- If `GIMethod`, `ShadowMethod`, or `MeshStrategy` changed → `RequiresLevelReload`
|
||||
- Otherwise → `NonDestructive`
|
||||
6. If `RequiresLevelReload` and game is mid-session:
|
||||
- Store as `PendingPreset`, set `bReloadNeededOnNextLevel = true`
|
||||
- Show UI notification "Settings will apply on next level load"
|
||||
- Broadcast `OnPipelineReloadRequired`
|
||||
- Return `RequiresLevelReload`
|
||||
7. If safe to apply now: call `ApplyRenderConfig(PresetName, Config)`
|
||||
8. Save to `SS_SettingsSystem.SetSetting("QualityPreset", PresetName)`
|
||||
9. Broadcast `OnRenderPipelineChanged(PresetName, ChangeType)`
|
||||
10. Return change type
|
||||
|
||||
#### `ApplyRenderConfig` → `void`
|
||||
- **Description:** Executes console commands to apply a render configuration immediately.
|
||||
- **Parameters:**
|
||||
| Param | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| `PresetName` | `FName` | Preset being applied |
|
||||
| `Config` | `SRenderPipelineConfig` | Configuration to apply |
|
||||
- **Flow:**
|
||||
1. Execute console commands for GI method:
|
||||
```
|
||||
ExecuteConsoleCommand("r.DynamicGlobalIlluminationMethod {GIMethod}")
|
||||
ExecuteConsoleCommand("r.Lumen.DiffuseIndirect.Allow {LumenAllowed}")
|
||||
```
|
||||
2. Execute shadow commands:
|
||||
```
|
||||
ExecuteConsoleCommand("r.Shadow.Virtual.Enable {VSMEnabled}")
|
||||
ExecuteConsoleCommand("sg.ShadowQuality {ShadowQuality}")
|
||||
```
|
||||
3. Execute upscaling commands:
|
||||
```
|
||||
ExecuteConsoleCommand("r.ScreenPercentage {ResolutionScale*100}")
|
||||
ExecuteConsoleCommand("r.TemporalAA.Upsampling {TSREnabled}")
|
||||
// DLSS/FSR plugin-specific commands
|
||||
```
|
||||
4. Execute mesh/Nanite commands:
|
||||
```
|
||||
ExecuteConsoleCommand("r.Nanite {NaniteEnabled}")
|
||||
ExecuteConsoleCommand("r.StaticMeshLODDistanceScale {LODScale}")
|
||||
```
|
||||
5. Execute scalability groups:
|
||||
```
|
||||
ExecuteConsoleCommand("sg.TextureQuality {TextureQuality}")
|
||||
ExecuteConsoleCommand("sg.PostProcessQuality {PostProcessQuality}")
|
||||
ExecuteConsoleCommand("sg.ViewDistanceQuality {ViewDistanceQuality}")
|
||||
ExecuteConsoleCommand("sg.FoliageQuality {FoliageQuality}")
|
||||
ExecuteConsoleCommand("sg.AntiAliasingQuality {AntiAliasingQuality}")
|
||||
```
|
||||
6. Execute post-process toggles:
|
||||
```
|
||||
ExecuteConsoleCommand("r.MotionBlurQuality {MotionBlur}")
|
||||
ExecuteConsoleCommand("r.DepthOfFieldQuality {DoF}")
|
||||
```
|
||||
7. Execute platform-specific overrides from `SPlatformRenderDefaults.ConsoleVariables`
|
||||
8. Set `ActiveState.AppliedConfig = Config`
|
||||
9. Set `ActiveState.ActivePreset = PresetName`
|
||||
10. Set `bReloadNeededOnNextLevel = false`
|
||||
|
||||
#### `ApplyPendingReload` → `void`
|
||||
- **Description:** Called on level transition or game restart. Applies queued pipeline changes.
|
||||
- **Flow:**
|
||||
1. If `bReloadNeededOnNextLevel == false`: return
|
||||
2. Get `SRenderPipelineConfig` for `ActiveState.PendingPreset`
|
||||
3. Call `ApplyRenderConfig(PendingPreset, Config)`
|
||||
4. Broadcast `OnRenderPipelineChanged(PendingPreset, RequiresLevelReload)`
|
||||
|
||||
#### `DetectPlatform` → `EPlatformFamily`
|
||||
- **Description:** Auto-detect the current platform and GPU capability.
|
||||
- **Flow:**
|
||||
1. Check `UGameplayStatics::GetPlatformName()`:
|
||||
- "PS5" → detect if Pro → `PS5_Pro` or `PS5`
|
||||
- "PS4" → `PS4`
|
||||
- "XboxOne" → `Xbox_One`
|
||||
- "XSX" or "XboxSeries" → `Xbox_Series`
|
||||
- "Switch" → `Switch`
|
||||
- "Win64" → check GPU:
|
||||
```cpp
|
||||
IPlatformFile& PlatformFile = FPlatformFileManager::GetPlatformFile();
|
||||
// Check GPU name via GRHIAdapterName
|
||||
// RTX 2000+ / RX 6000+ → PC_High
|
||||
// GTX 900–1600 / iGPU → PC_Low
|
||||
```
|
||||
2. Store result in `DetectedPlatform`
|
||||
3. Return platform
|
||||
|
||||
#### `SetUpscalerMethod` → `void`
|
||||
- **Description:** Override the upscaler independently of quality preset.
|
||||
- **Parameters:** `Method` (EUpscalerMethod), `Quality` (int32)
|
||||
- **Flow:** Updates only the upscaler CVars without touching other settings.
|
||||
|
||||
#### `GetActiveUpscaler` → `EUpscalerMethod`
|
||||
- **Description:** Returns the currently active upscaler. Read-only.
|
||||
|
||||
#### `GetActivePipelineConfig` → `SRenderPipelineConfig`
|
||||
- **Description:** Returns a copy of the currently applied render config. Read-only.
|
||||
|
||||
#### `IsNaniteEnabled` → `bool`
|
||||
- **Description:** Quick check if Nanite is currently active.
|
||||
|
||||
#### `IsLumenEnabled` → `bool`
|
||||
- **Description:** Quick check if Lumen GI is currently active.
|
||||
|
||||
#### `RequiresReloadForPresetChange` → `bool`
|
||||
- **Description:** Check if switching from current preset to a new one would require a level reload.
|
||||
- **Parameters:** `NewPresetName` (FName)
|
||||
|
||||
#### `GetAvailableUpscalers` → `TArray<EUpscalerMethod>`
|
||||
- **Description:** Returns which upscalers are available (based on installed plugins + platform).
|
||||
|
||||
#### `SetDynamicResolutionTarget` → `void`
|
||||
- **Description:** Enable/disable dynamic resolution scaling.
|
||||
- **Parameters:** `TargetFrameTimeMs` (float), `bEnabled` (bool)
|
||||
|
||||
---
|
||||
|
||||
## 5. Event Dispatchers
|
||||
|
||||
| Dispatcher | Parameters | Bind Access | Description |
|
||||
|------------|-----------|-------------|-------------|
|
||||
| `OnPipelineManagerInitialized` | — | `Public` | Fired after Initialize completes |
|
||||
| `OnRenderPipelineChanged` | `FName PresetName`, `ERenderPipelineChangeType ChangeType` | `Public` | Fired when pipeline configuration changes |
|
||||
| `OnPipelineReloadRequired` | `FName PendingPreset` | `Public` | Fired when a change requires level reload — UI shows warning |
|
||||
| `OnPipelineApplied` | `FName PresetName` | `Public` | Fired after all CVars have been executed |
|
||||
| `OnUpscalerChanged` | `EUpscalerMethod NewMethod`, `int32 Quality` | `Public` | Fired when upscaler is changed |
|
||||
| `OnPlatformDetected` | `EPlatformFamily Platform` | `Public` | Fired after platform detection |
|
||||
|
||||
---
|
||||
|
||||
## 6. Overridden Events
|
||||
|
||||
### Event: `BeginPlay`
|
||||
- **Description:** Startup. Calls `Initialize()` then conditionally applies pipeline.
|
||||
- **Flow:**
|
||||
1. Call `Initialize()`
|
||||
2. If `bApplyPipelineOnBeginPlay`: apply the default/saved preset
|
||||
3. If game phase is `MainMenu` (not in-game): pipeline can be applied immediately (no reload warning needed)
|
||||
|
||||
### Event: `OnGamePhaseChanged` (bound to `GI_GameFramework`)
|
||||
- **Description:** When transitioning from MainMenu to InGame or between levels, apply any pending pipeline changes.
|
||||
- **Flow:**
|
||||
1. If `bReloadNeededOnNextLevel`: call `ApplyPendingReload()`
|
||||
2. Notify `SS_PlanarCaptureManager` of new pipeline state
|
||||
|
||||
---
|
||||
|
||||
## 7. Blueprint Graph Logic Flow
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A[BeginPlay / GI_GameFramework.OnGamePhaseChanged] --> B[Initialize]
|
||||
B --> C[DetectPlatform]
|
||||
C --> D[Load DA_RenderPipelineProfile for platform]
|
||||
D --> E[Read saved QualityPreset from SS_SettingsSystem]
|
||||
E --> F[ApplyQualityPreset PresetName]
|
||||
|
||||
G[User changes quality in settings] --> H[WBP_SettingsMenu → SS_SettingsSystem.SetSetting]
|
||||
H --> I[SS_SettingsSystem.OnSettingChanged → BPC_RenderPipelineManager]
|
||||
I --> J[ApplyQualityPreset NewPresetName]
|
||||
J --> K{NonDestructive?}
|
||||
K -->|Yes| L[ApplyRenderConfig immediately]
|
||||
K -->|No - Needs Reload| M[Store as PendingPreset]
|
||||
M --> N[Show UI Warning: 'Settings apply on next level']
|
||||
M --> O[Broadcast OnPipelineReloadRequired]
|
||||
L --> P[Broadcast OnRenderPipelineChanged]
|
||||
|
||||
Q[Level Transition / GamePhase change] --> R{Reload pending?}
|
||||
R -->|Yes| S[ApplyPendingReload]
|
||||
S --> T[ApplyRenderConfig with pending preset]
|
||||
T --> P
|
||||
|
||||
P --> U[Notify SS_PlanarCaptureManager]
|
||||
U --> V[PlanarCapture: adjust GlobalQualityCap]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8. Communication Matrix
|
||||
|
||||
| Who Talks | How | What Is Sent |
|
||||
|-----------|-----|-------------|
|
||||
| `WBP_SettingsMenu` | `Indirect (SS_SettingsSystem)` | User selects quality preset → `SetSetting("QualityPreset", "High")` |
|
||||
| `SS_SettingsSystem` | `Dispatcher` | `OnSettingChanged("QualityPreset")` → `BPC_RenderPipelineManager.ApplyQualityPreset()` |
|
||||
| `BPC_PerformanceScaler` | `Function Call` | `BPC_RenderPipelineManager.ApplyQualityPreset()` for adaptive scaling |
|
||||
| `BPC_RenderPipelineManager` | `Dispatcher` | `OnRenderPipelineChanged(PresetName)` → `SS_PlanarCaptureManager.AdjustGlobalQualityCap()` |
|
||||
| `BPC_RenderPipelineManager` | `Dispatcher` | `OnPipelineReloadRequired(PendingPreset)` → `WBP_SettingsMenu.ShowReloadWarning()` |
|
||||
| `SS_PlanarCaptureManager` | `Function Call` | `BPC_RenderPipelineManager.IsLumenEnabled()` — adjusts capture Lumen budget |
|
||||
| `WBP_NotificationToast` | `Dispatcher` | `OnPipelineReloadRequired` → show "Settings will apply on next area" toast |
|
||||
| `BPC_AudioAtmosphereController` | `Dispatcher` | `OnRenderPipelineChanged` → adjust audio quality budget |
|
||||
|
||||
---
|
||||
|
||||
## 9. Integration with Planar Capture System
|
||||
|
||||
When `BPC_RenderPipelineManager` applies a render pipeline change:
|
||||
|
||||
1. If Lumen is **disabled** (baked lightmass mode):
|
||||
- `SS_PlanarCaptureManager` auto-caps `GlobalQualityCap` to `Medium` (no Hero tier Lumen captures)
|
||||
- All `BPC_PlanarCapture` instances set `bEnableLumen = false` on their quality profiles
|
||||
- Capture frame budget is increased (no Lumen overhead → can run more captures at higher FPS)
|
||||
|
||||
2. If Nanite is **disabled** (traditional LOD mode):
|
||||
- Captures render faster (no Nanite rasterization overhead in capture pass)
|
||||
- `SS_PlanarCaptureManager` can increase `GlobalQualityCap` by one tier
|
||||
|
||||
3. If upscaler is **active** (DLSS/FSR/TSR):
|
||||
- Main view renders at lower internal resolution
|
||||
- Planar captures render at configured quality tier resolution (independent of upscaler)
|
||||
|
||||
4. `BPC_PlanarCapture.ApplyQualityTier()` checks `BPC_RenderPipelineManager.IsLumenEnabled()`:
|
||||
```
|
||||
If !IsLumenEnabled() AND profile.bEnableLumen:
|
||||
Force bEnableLumen = false // Prevent capture from trying to enable Lumen
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 10. Validation / Testing Checklist
|
||||
|
||||
- [ ] `DetectPlatform` correctly identifies PS5, PS4, Xbox Series, Xbox One, PC_High, PC_Low
|
||||
- [ ] `ApplyQualityPreset("Low")` sets GI to None/Baked, switches to CSM, disables Nanite
|
||||
- [ ] `ApplyQualityPreset("High")` sets GI to Lumen, switches to VSM, enables Nanite
|
||||
- [ ] Switching from High→Low mid-game shows "requires level reload" warning
|
||||
- [ ] Switching from High→Low in Main Menu applies immediately (no warning needed)
|
||||
- [ ] Switching Low→High mid-game: PendingPreset stored, applies on next level load
|
||||
- [ ] Planar capture budget adjusts: lower cap when Lumen is on, higher when off
|
||||
- [ ] DLSS is available on PC_High with NVIDIA GPU — shows in `GetAvailableUpscalers()`
|
||||
- [ ] FSR is available on all platforms — always in available list
|
||||
- [ ] PSSR only available when `DetectedPlatform == PS5_Pro`
|
||||
- [ ] NIS is available on Switch — fallback on non-NVIDIA PC
|
||||
- [ ] `SetUpscalerMethod` independently changes upscaler without affecting other settings
|
||||
- [ ] `GetActivePipelineConfig()` returns current state accurately after apply
|
||||
- [ ] Edge case: `PlatformProfileMap` missing platform → logs error, falls back to `PC_High`
|
||||
- [ ] Edge case: Invalid preset name → logs warning, no CVars changed
|
||||
- [ ] Edge case: Console variable execution fails → logs error per failed CVar, continues
|
||||
- [ ] Edge case: Hot-swap GPU (eGPU) → `DetectPlatform` called again, pipeline may change
|
||||
|
||||
---
|
||||
|
||||
## 11. Manual Implementation Guide
|
||||
|
||||
### 11.1 Class Setup
|
||||
1. Create Blueprint Class: parent `ActorComponent`, name `BPC_RenderPipelineManager`
|
||||
2. Path: `Content/Framework/Settings/`
|
||||
3. Add all variables, enums, structs, and event dispatchers from this spec
|
||||
|
||||
### 11.2 Key UE5 Nodes
|
||||
| Node | Where to Find | Used For |
|
||||
|------|---------------|----------|
|
||||
| `Execute Console Command` | Right-click → "Execute Console Command" | Applying all CVar changes |
|
||||
| `Get Platform Name` | Right-click → "Get Platform Name" | Platform detection |
|
||||
| `Get Game User Settings` | Right-click → "Get Game User Settings" | Accessing scalability API |
|
||||
| `Set Overall Scalability Level` | On GameUserSettings | Bulk quality tier application |
|
||||
| `Get Game Instance` → `Get Subsystem(SS_SettingsSystem)` | Subsystem access | Reading/writing quality setting |
|
||||
| `Get Game Instance` → `Get Subsystem(SS_PlanarCaptureManager)` | Subsystem access | Adjust capture budget |
|
||||
| `Switch on EPlatformFamily` | Right-click → "Switch" | Platform-specific logic |
|
||||
| `Make SRenderPipelineConfig` | Right-click → "Make Struct" | Building config structs |
|
||||
|
||||
### 11.3 Node-by-Node: ApplyRenderConfig
|
||||
|
||||
```
|
||||
[Function: ApplyRenderConfig(PresetName, Config)]
|
||||
Step 1: Get Owner → Cast to PlayerController → cache
|
||||
Step 2: Break SRenderPipelineConfig → get all fields
|
||||
Step 3: Switch on Config.GIMethod:
|
||||
Lumen_GI → ExecuteConsoleCommand("r.DynamicGlobalIlluminationMethod 1")
|
||||
ExecuteConsoleCommand("r.Lumen.Reflections.Allow 1")
|
||||
Baked_Lightmass → ExecuteConsoleCommand("r.DynamicGlobalIlluminationMethod 0")
|
||||
ExecuteConsoleCommand("r.Lumen.Reflections.Allow 0")
|
||||
SSGI → ExecuteConsoleCommand("r.DynamicGlobalIlluminationMethod 2")
|
||||
None → ExecuteConsoleCommand("r.DynamicGlobalIlluminationMethod 0")
|
||||
Step 4: ExecuteConsoleCommand("r.Shadow.Virtual.Enable {VSM?1:0}")
|
||||
Step 5: ExecuteConsoleCommand("sg.ShadowQuality {ShadowQuality}")
|
||||
Step 6: ExecuteConsoleCommand("r.ScreenPercentage {ResolutionScale*100}")
|
||||
Step 7: Switch on Config.Upscaler:
|
||||
TSR → ExecuteConsoleCommand("r.TemporalAA.Upsampling 1")
|
||||
DLSS → ExecuteConsoleCommand("r.NGX.DLSS.Enable 1")
|
||||
ExecuteConsoleCommand("r.NGX.DLSS.Quality {UpscalerQuality}")
|
||||
FSR → ExecuteConsoleCommand("r.FidelityFX.FSR2.Enabled 1")
|
||||
NIS → ExecuteConsoleCommand("r.NIS.Enable 1")
|
||||
Step 8: ExecuteConsoleCommand("r.Nanite {NaniteEnabled?1:0}")
|
||||
Step 9: Execute Console Command "sg.TextureQuality {TextureQuality}"
|
||||
Execute Console Command "sg.PostProcessQuality {PostProcessQuality}"
|
||||
Execute Console Command "sg.ViewDistanceQuality {ViewDistanceQuality}"
|
||||
Execute Console Command "sg.FoliageQuality {FoliageQuality}"
|
||||
Step 10: ExecuteConsoleCommand("r.MotionBlurQuality {MotionBlur?2:0}")
|
||||
Step 11: ExecuteConsoleCommand("r.DepthOfFieldQuality {DoF?2:0}")
|
||||
Step 12: Set ActiveState.AppliedConfig = Config
|
||||
Step 13: Set ActiveState.ActivePreset = PresetName
|
||||
Step 14: Set bReloadNeededOnNextLevel = false
|
||||
Step 15: Broadcast OnPipelineApplied(PresetName)
|
||||
```
|
||||
|
||||
### 11.4 Networking
|
||||
- **Local client only.** Render pipeline is per-client hardware. No replication.
|
||||
- On listen servers: the server-host player runs their own render pipeline; other clients run theirs.
|
||||
|
||||
---
|
||||
|
||||
## 12. Blueprint Build Checklist
|
||||
|
||||
- [ ] Create Blueprint class: `BPC_RenderPipelineManager` (parent: `ActorComponent`)
|
||||
- [ ] Add enums: `ERenderPipelineMethod`, `EShadowMethod`, `EReflectionMethod`, `EUpscalerMethod`, `EMeshStrategy`, `EPlatformFamily`, `ERenderPipelineChangeType`
|
||||
- [ ] Add structs: `SRenderPipelineConfig`, `SPlatformRenderDefaults`, `SActivePipelineState`
|
||||
- [ ] Add all variables from Section 3
|
||||
- [ ] Build `BeginPlay` → `Initialize` chain
|
||||
- [ ] Implement `DetectPlatform` with Switch on Platform Name
|
||||
- [ ] Implement `ApplyQualityPreset` with reload detection logic
|
||||
- [ ] Implement `ApplyRenderConfig` with full CVar execution
|
||||
- [ ] Implement `ApplyPendingReload` bound to `GI_GameFramework.OnGamePhaseChanged`
|
||||
- [ ] Implement `SetUpscalerMethod` / `GetAvailableUpscalers` / `IsLumenEnabled` / `IsNaniteEnabled`
|
||||
- [ ] Create all 6 event dispatchers
|
||||
- [ ] Bind to `SS_SettingsSystem.OnSettingChanged` (QualityPreset key)
|
||||
- [ ] Bind to `GI_GameFramework.OnGamePhaseChanged`
|
||||
- [ ] Create at least one `DA_RenderPipelineProfile` instance per target platform
|
||||
- [ ] Test: Low preset disables Lumen, Nanite, switches to CSM
|
||||
- [ ] Test: High preset enables Lumen, Nanite, VSM
|
||||
- [ ] Test: Mid-session pipeline switch shows reload warning
|
||||
- [ ] Test: Main Menu pipeline switch applies immediately
|
||||
- [ ] Test: Planar capture quality cap adjusts on pipeline change
|
||||
|
||||
---
|
||||
|
||||
*Blueprint Spec: Render Pipeline Manager. Conforms to TEMPLATE.md v2.0 — part of the UE5 Modular Game Framework, SETTINGS layer.*
|
||||
@@ -52,6 +52,7 @@ The Modular Game Framework uses `UDataAsset` (and subclass `UPrimaryDataAsset` w
|
||||
| 12 | `DA_RoomMutation` | Adaptive | `BPC_AdaptiveEnvironmentDirector` |
|
||||
| 13 | `DA_BehaviourVariant` | AI | `BPC_BehaviourVariantSelector` |
|
||||
| 14 | `DA_HapticProfile` | Settings | `BPC_HapticsController` (148) |
|
||||
| 15 | `DA_RenderPipelineProfile` | Settings | `BPC_RenderPipelineManager` (149) |
|
||||
| 15 | `DA_AdaptationRule` | Adaptive | `BPC_DifficultyManager` |
|
||||
| 16 | `DA_EquipmentConfig` | Inventory | `BPC_EquipmentSlotSystem` |
|
||||
| 17 | `DA_PuzzleData` | Interaction | `BP_PuzzleDeviceActor` |
|
||||
|
||||
298
docs/blueprints/14-data-assets/DA_RenderPipelineProfile.md
Normal file
298
docs/blueprints/14-data-assets/DA_RenderPipelineProfile.md
Normal file
@@ -0,0 +1,298 @@
|
||||
# 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.
|
||||
@@ -4,7 +4,7 @@
|
||||
Core capture component managing `USceneCaptureComponent2D` lifecycle for mirrors, portals, monitors, and horror surfaces. All camera math, render target management, and per-frame capture decisions happen here in C++ for performance.
|
||||
|
||||
## Dependencies
|
||||
- **Requires:** `SS_PlanarCaptureManager` (138) for quality tier assignment and RT pool, `UPlanarCaptureCameraUtils` for camera math
|
||||
- **Requires:** `SS_PlanarCaptureManager` (138) for quality tier assignment and RT pool, `UPlanarCaptureCameraUtils` for camera math, [`BPC_RenderPipelineManager`](../12-settings/149_BPC_RenderPipelineManager.md) for global Lumen/Nanite state awareness
|
||||
- **Required By:** `BP_PlanarCaptureActor` (137) — owned by parent actor
|
||||
- **Engine/Plugin Requirements:** Renderer, RenderCore modules
|
||||
|
||||
@@ -41,7 +41,8 @@ Core capture component managing `USceneCaptureComponent2D` lifecycle for mirrors
|
||||
| `bEnableFog` | bool | false | Exponential height fog toggle |
|
||||
| `bEnableBloom` | bool | false | Bloom toggle |
|
||||
| `bEnableAO` | bool | false | Ambient occlusion toggle |
|
||||
| `bEnableLumen` | bool | false | Lumen GI toggle (expensive) |
|
||||
| `bEnableLumen` | bool | false | Lumen GI toggle (expensive — auto-disabled if global pipeline has Lumen OFF) |
|
||||
| `bEnableNanite` | bool | false | Nanite in capture (expensive — auto-disabled if global pipeline has Nanite OFF) |
|
||||
| `bEnableMotionBlur` | bool | false | Motion blur toggle |
|
||||
| `bEnableClipPlane` | bool | true | Oblique near-plane toggle |
|
||||
| `DelayedFrameCount` | int32 | 0 | Horror delayed frame ring buffer size |
|
||||
@@ -123,7 +124,8 @@ Core capture component managing `USceneCaptureComponent2D` lifecycle for mirrors
|
||||
## 6. Communication Matrix
|
||||
| Target System | Method | What |
|
||||
|---------------|--------|------|
|
||||
| `SS_PlanarCaptureManager` | Direct (cached reference) | RT requests, quality tier reception |
|
||||
| `SS_PlanarCaptureManager` | Direct (cached reference) | RT requests, quality tier reception, pipeline state |
|
||||
| `BPC_RenderPipelineManager` (149) | Direct (cached reference) | Query `IsLumenEnabled()`, `IsNaniteEnabled()` — auto-disable incompatible features |
|
||||
| `BP_PlanarCaptureActor` | Direct (owner) | Surface mesh, MPC reference |
|
||||
| `UPlanarCaptureCameraUtils` | Static function calls | Mirror/portal/oblique math |
|
||||
| `USceneCaptureComponent2D` | Direct (owns) | Full lifecycle control |
|
||||
|
||||
@@ -115,6 +115,8 @@ These systems appear in the Plan but may need explicit spec files or are covered
|
||||
- `BPC_MetaProgressionSystem` — Not yet created; Master Section 11.5
|
||||
- `BPC_RunSummarySystem` — Already exists at `05-saveload/43_BPC_RunHistoryTracker.md` (may need rename or separate file)
|
||||
- `BPC_HapticsController` — ✅ Created (system 148); `docs/blueprints/12-settings/148_BPC_HapticsController.md`
|
||||
- `BPC_RenderPipelineManager` — ✅ Created (system 149); `docs/blueprints/12-settings/149_BPC_RenderPipelineManager.md`
|
||||
- `DA_RenderPipelineProfile` — ✅ Created (supplementary); `docs/blueprints/14-data-assets/DA_RenderPipelineProfile.md`
|
||||
- `BPC_PlatformServiceAbstraction` — Not yet created; Master Section 12.3
|
||||
|
||||
---
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Master Blueprint Index — UE5 Modular Game Framework
|
||||
|
||||
**Version:** 3.5 | **Generated:** 2026-05-22 | **Total Files:** 148 numbered + 1 starter + 1 supplementary (150 total specs) | **C++:** 27 source files (15 full + 10 stubs + 2 utility)
|
||||
**Version:** 3.6 | **Generated:** 2026-05-22 | **Total Files:** 149 numbered + 1 starter + 2 supplementary (152 total specs) | **C++:** 27 source files (15 full + 10 stubs + 2 utility)
|
||||
|
||||
This document is the canonical index of every Blueprint specification file in the framework. Each entry links to its full spec document and includes: file name, asset type, parent class, purpose summary, and key dependencies.
|
||||
|
||||
@@ -49,9 +49,9 @@ docs/blueprints/
|
||||
├── 09-ai/ ← AI, Perception & Encounters (9 files)
|
||||
├── 10-adaptive/ ← Adaptive Environment, Atmosphere & Scare (15 files)
|
||||
├── 11-meta/ ← Achievements, Progression & Meta (2 files)
|
||||
├── 12-settings/ ← Settings, Accessibility, Haptics & Platform (3 files)
|
||||
├── 12-settings/ ← Settings, Accessibility, Haptics, Render Pipeline & Platform (5 files)
|
||||
├── 13-polish/ ← Tutorial, Loading, Credits, Debug (9 files)
|
||||
├── 14-data-assets/ ← Data Asset definitions (16 files)
|
||||
├── 14-data-assets/ ← Data Asset definitions (17 files + 1 supplementary)
|
||||
├── 15-input/ ← Enhanced Input System (1 file)
|
||||
├── 16-state/ ← State Management (2 files)
|
||||
└── 17-capture/ ← Planar Capture System (12 files)
|
||||
@@ -182,6 +182,7 @@ docs/blueprints/
|
||||
| 104 | [`104_BPC_AccessibilitySettings`](12-settings/104_BPC_AccessibilitySettings.md) | `BPC_` Component | `ActorComponent` | Accessibility; subtitles, colorblind, controller remap, difficulty | 12-settings |
|
||||
| 105 | [`105_SS_SettingsSystem`](12-settings/105_SS_SettingsSystem.md) | `SS_` Subsystem | `GameInstanceSubsystem` | Settings subsystem; persistent settings, apply, reset, platform | 12-settings |
|
||||
| 148 | [`148_BPC_HapticsController`](12-settings/148_BPC_HapticsController.md) | `BPC_` Component | `ActorComponent` | Haptics controller; GameplayTag-driven force feedback, DualSense triggers, heartbeat pulse | 12-settings |
|
||||
| 149 | [`149_BPC_RenderPipelineManager`](12-settings/149_BPC_RenderPipelineManager.md) | `BPC_` Component | `ActorComponent` | Render pipeline manager; quality presets, per-platform GI/shaders/upscaling, planarcapture aware | 12-settings |
|
||||
| — | — | — | — | — | — |
|
||||
| 106 | [`106_BPC_AnalyticsTracker`](13-polish/106_BPC_AnalyticsTracker.md) | `BPC_` Component | `ActorComponent` | Analytics; event tracking, session metrics, telemetry | 13-polish |
|
||||
| 107 | [`107_BPC_DevCheatManager`](13-polish/107_BPC_DevCheatManager.md) | `BPC_` Component | `ActorComponent` | Developer cheats; god mode, noclip, give item, teleport | 13-polish |
|
||||
@@ -200,6 +201,7 @@ docs/blueprints/
|
||||
| 119 | [`119_DA_EncounterData`](14-data-assets/119_DA_EncounterData.md) | `DA_` Data Asset | `PrimaryDataAsset` | Encounter definition; enemy groups, spawn rules, difficulty | 14-data-assets |
|
||||
| 120 | [`120_DA_EquipmentConfig`](14-data-assets/120_DA_EquipmentConfig.md) | `DA_` Data Asset | `PrimaryDataAsset` | Equipment configuration; weapon stats, armor, haptics | 14-data-assets |
|
||||
| 121 | [`121_DA_HapticProfile`](14-data-assets/121_DA_HapticProfile.md) | `DA_` Data Asset | `PrimaryDataAsset` | Haptic/force feedback profile | 14-data-assets |
|
||||
| — | [`DA_RenderPipelineProfile`](14-data-assets/DA_RenderPipelineProfile.md) | `DA_` Data Asset | `PrimaryDataAsset` | Render pipeline config; quality presets, GI/shadows/upscaling/Nanite per platform | 14-data-assets |
|
||||
| 122 | [`122_DA_InteractionData`](14-data-assets/122_DA_InteractionData.md) | `DA_` Data Asset | `PrimaryDataAsset` | Interaction definition; prompt text, duration, icon, conditions | 14-data-assets |
|
||||
| 123 | [`123_DA_ObjectiveData`](14-data-assets/123_DA_ObjectiveData.md) | `DA_` Data Asset | `PrimaryDataAsset` | Objective/quest data; description, prerequisites, rewards | 14-data-assets |
|
||||
| 124 | [`124_DA_PuzzleData`](14-data-assets/124_DA_PuzzleData.md) | `DA_` Data Asset | `PrimaryDataAsset` | Puzzle definition; solution, steps, hints, rewards | 14-data-assets |
|
||||
@@ -235,10 +237,10 @@ docs/blueprints/
|
||||
|
||||
| Prefix | Type | Count |
|
||||
|--------|------|-------|
|
||||
| `BPC_` | Blueprint Component | 81 |
|
||||
| `BPC_` | Blueprint Component | 82 |
|
||||
| `BP_` | Blueprint Actor | 11 |
|
||||
| `WBP_` | Widget Blueprint | 14 |
|
||||
| `DA_` | Data Asset | 19 |
|
||||
| `DA_` | Data Asset | 20 |
|
||||
| `SS_` | GameInstance Subsystem | 7 |
|
||||
| `GI_` | Game Instance | 2 |
|
||||
| `GM_` | Game Mode | 1 |
|
||||
@@ -248,7 +250,7 @@ docs/blueprints/
|
||||
| `AI_` | AI Controller | 1 |
|
||||
| `BB_` | Blackboard | 1 |
|
||||
| `E_` | Enum | 5 |
|
||||
| **Total** | | **159** |
|
||||
| **Total** | | **161** |
|
||||
|
||||
---
|
||||
|
||||
@@ -266,6 +268,7 @@ Below are the most cross-referenced systems — these are the ones the State Man
|
||||
| `BPC_StateManager` (130) | EVERY system (central query point) |
|
||||
| `SS_AudioManager` (132) | ALL systems that play audio, BP_RoomAudioZone, WBP_SettingsMenu, BPC_StateManager (heart rate → audio) |
|
||||
| `BPC_HapticsController` (148) | HealthSystem, FirearmSystem, MeleeSystem, ScareEventSystem, PhysicsDrag, MovementState, ReloadSystem, DeathHandling, Staminasystem, StateManager → heartbeat, AccessibilitySettings |
|
||||
| `BPC_RenderPipelineManager` (149) | PerformanceScaler (delegates CVars), SettingsSystem (quality persistence), PlanarCaptureManager (budget adjustment), SettingsMenu (upscaler query), AtmosphereController |
|
||||
| `ABP_GASP` (external) | StateManager (overlay + action intensity), MovementState, Hiding, Stamina, Embodiment |
|
||||
|
||||
---
|
||||
@@ -328,7 +331,7 @@ Below are the most cross-referenced systems — these are the ones the State Man
|
||||
|
||||
---
|
||||
|
||||
*Master Blueprint Index v3.5 — The single reference document for every file in the framework. Now 148 files with State Management, MetaSounds Audio, Multiplayer Networking, Planar Capture System, and Haptics Controller support.*
|
||||
*Master Blueprint Index v3.6 — The single reference document for every file in the framework. Now 149 files + 2 supplementary with State Management, MetaSounds Audio, Multiplayer Networking, Planar Capture System, Haptics Controller, and Render Pipeline Manager support.*
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user