- 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.
160 lines
8.2 KiB
Markdown
160 lines
8.2 KiB
Markdown
# 136 — Planar Capture Component (`BPC_PlanarCapture`)
|
|
|
|
## Purpose
|
|
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, [`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
|
|
|
|
## Class Info
|
|
| Property | Value |
|
|
|----------|-------|
|
|
| **Parent Class** | `ActorComponent` (C++ `UBPC_PlanarCapture`) |
|
|
| **Class Type** | Blueprint Component (C++ Full Implementation) |
|
|
| **Asset Path** | `Content/Framework/Capture/` |
|
|
| **C++ Header** | `Source/PG_Framework/Public/Capture/BPC_PlanarCapture.h` |
|
|
| **C++ Source** | `Source/PG_Framework/Private/Capture/BPC_PlanarCapture.cpp` |
|
|
| **C++ Status** | ✅ Full Implementation |
|
|
| **BP Asset** | None — use C++ component directly on actors |
|
|
|
|
## 1. Enums
|
|
*Defined in `PlanarCaptureCommon.h` — see Architecture doc for full listing.*
|
|
|
|
| Enum | Values | Description |
|
|
|------|--------|-------------|
|
|
| `EPlanarCaptureMode` | Mirror, Portal, Monitor, HorrorMirror, HorrorPortal, FakeWindow | Capture surface mode |
|
|
| `EPlanarCaptureQualityTier` | Off, Low, Medium, High, Hero | Quality tier levels |
|
|
| `EPlanarCaptureInitResult` | Success, NoRenderTargetPool, InvalidSurfaceMesh, BudgetExceeded, ManagerUnavailable | Init result codes |
|
|
|
|
## 2. Structs
|
|
*Defined in `PlanarCaptureCommon.h`*
|
|
|
|
### `FPlanarCaptureQualityProfile`
|
|
| Field | Type | Default | Description |
|
|
|-------|------|---------|-------------|
|
|
| `RenderTargetSize` | int32 | 512 | Square RT resolution (256/512/1024/2048) |
|
|
| `CaptureInterval` | float | 0.0667 | Min seconds between captures (~15fps default) |
|
|
| `bEnableShadows` | bool | true | Shadow rendering toggle |
|
|
| `bEnablePostProcess` | bool | false | Post-process toggle |
|
|
| `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 — 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 |
|
|
|
|
## 3. Variables
|
|
|
|
### Configuration (EditAnywhere, BlueprintReadOnly)
|
|
| Variable | Type | Default | Category | Description |
|
|
|----------|------|---------|----------|-------------|
|
|
| `CaptureMode` | EPlanarCaptureMode | Mirror | `Capture\|Config` | Surface type |
|
|
| `QualityProfiles` | TArray〈FPlanarCaptureQualityProfile〉 | 4 entries | `Capture\|Config` | Quality profiles per tier [0=Low,1=Med,2=High,3=Hero] |
|
|
| `CaptureFOV` | float | 90.0 | `Capture\|Config` | Capture camera FOV |
|
|
| `MaxViewDistance` | float | 5000.0 | `Capture\|Config` | Max render distance |
|
|
| `ShowOnlyActors` | TArray〈FPlanarCaptureActorListEntry〉 | — | `Capture\|ActorLists` | Exclusive show actors |
|
|
| `HiddenActors` | TArray〈FPlanarCaptureActorListEntry〉 | — | `Capture\|ActorLists` | Hidden actors |
|
|
| `WrongReflectionActor` | TSoftObjectPtr〈AActor〉 | — | `Capture\|Horror` | Horror mode wrong reflection swap |
|
|
| `SurfaceMeshComponent` | TSoftObjectPtr〈UStaticMeshComponent〉 | — | `Capture\|Config` | Mesh for clip plane calculation |
|
|
| `LinkedTargetSurface` | TSoftObjectPtr〈ABP_PlanarCaptureActor〉 | — | `Capture\|Portal` | Portal destination surface |
|
|
| `FixedCameraActor` | TSoftObjectPtr〈AActor〉 | — | `Capture\|Monitor` | Monitor fixed camera |
|
|
|
|
### Runtime (BlueprintReadOnly)
|
|
| Variable | Type | Description |
|
|
|----------|------|-------------|
|
|
| `CurrentQualityTier` | EPlanarCaptureQualityTier | Assigned quality tier |
|
|
| `bIsCapturing` | bool | Is capture currently active |
|
|
| `CaptureRenderTarget` | UTextureRenderTarget2D* | Active render target |
|
|
|
|
## 4. Functions
|
|
|
|
### Public (BlueprintCallable)
|
|
|
|
#### `InitializeCapture()` → `EPlanarCaptureInitResult`
|
|
- **Description:** Allocates RT from pool, creates USceneCaptureComponent2D, configures show flags
|
|
- **Flow:** Request RT → Create SceneCapture → ApplyShowFlags → UpdateActorLists → Set bIsCapturing
|
|
- **Nodes Used:** `RequestRenderTarget`, `CreateSceneCaptureComponent2D`, `ApplyShowFlags`, `UpdateActorLists`
|
|
|
|
#### `ShutdownCapture()`
|
|
- **Description:** Stops capture, releases RT to pool, destroys SceneCapture2D
|
|
- **Flow:** Set bIsCapturing=false → DestroyComponent → ReleaseRenderTarget → Clear ring buffer
|
|
|
|
#### `ApplyQualityTier(Tier: EPlanarCaptureQualityTier)`
|
|
- **Description:** Apply a quality tier profile immediately. Called by SS_PlanarCaptureManager.
|
|
- **Flow:** If Off → ShutdownCapture. If transitioning from Off → InitializeCapture. Else → UpdateShowFlags + ApplyProfile.
|
|
|
|
#### `CaptureNow()`
|
|
- **Description:** Bypasses tick interval, captures immediately. Used for event-driven captures.
|
|
- **Blueprint Authority:** Any (local)
|
|
- **Flow:** Get viewer camera → ComputeCaptureCameraTransform → Set SceneCapture transform → CaptureScene → PushMPCParameters
|
|
|
|
#### `ActivateHorrorReflection()`
|
|
- **Description:** Saves original ShowOnly list, swaps to WrongReflectionActor
|
|
- **Flow:** Save ShowOnlyActors → Clear list → Add WrongReflectionActor → UpdateActorLists
|
|
|
|
#### `DeactivateHorrorReflection()`
|
|
- **Description:** Restores original ShowOnly list after horror event
|
|
- **Flow:** Clear list → Restore from SavedShowOnlyActors → UpdateActorLists
|
|
|
|
#### `SetScriptedPriority(Priority: float)`
|
|
- **Description:** Scripted priority override (0.0-1.0). Higher values force higher quality tier.
|
|
|
|
#### `PushMPCParameters(MPC: UMaterialParameterCollection*)`
|
|
- **Description:** Push all 10 MPC scalar parameters for surface material effects
|
|
|
|
### Compute (BlueprintPure)
|
|
|
|
#### `ComputeCaptureCameraTransform(ViewerCamera: FTransform)` → `FTransform`
|
|
- **Description:** Computes capture camera position based on mode (mirror reflection, portal relative, etc.)
|
|
|
|
#### `GetCurrentScore()` → `FPlanarCaptureScore`
|
|
- **Description:** Returns current composite quality score for this surface
|
|
|
|
## 5. Event Dispatchers
|
|
| Dispatcher | Parameters | Description |
|
|
|------------|-----------|-------------|
|
|
| `OnCaptureQualityChanged` | OldTier, NewTier | Quality tier changed |
|
|
| `OnCaptureInitialized` | Result: EPlanarCaptureInitResult | Init completed |
|
|
| `OnCaptureRendered` | — | Each frame rendered |
|
|
|
|
## 6. Communication Matrix
|
|
| Target System | Method | What |
|
|
|---------------|--------|------|
|
|
| `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 |
|
|
|
|
## 7. Manual Implementation Guide
|
|
|
|
*The C++ component is fully functional. Blueprint users interact through the public API:*
|
|
|
|
1. To force a capture (e.g., on a sequencer event):
|
|
```
|
|
Get BPC_PlanarCapture → Call CaptureNow()
|
|
```
|
|
|
|
2. To trigger a horror mirror wrong reflection:
|
|
```
|
|
Get BPC_PlanarCapture → Call ActivateHorrorReflection()
|
|
Wait (duration from curve) → Call DeactivateHorrorReflection()
|
|
```
|
|
|
|
3. To boost a specific mirror for a scare moment:
|
|
```
|
|
Get BPC_PlanarCapture → Call SetScriptedPriority(1.0)
|
|
Wait (scare duration) → Call SetScriptedPriority(0.0)
|
|
```
|
|
|
|
## 8. Build Checklist
|
|
- [ ] C++ component compiled and functional
|
|
- [ ] No BP child needed — attach directly to actor
|
|
- [ ] Configure QualityProfiles array in component defaults (4 entries)
|
|
- [ ] Set CaptureMode in component defaults
|
|
- [ ] Assign SurfaceMeshComponent reference
|