Add Planar Capture System implementation checklist and developer reference

- Created a comprehensive implementation checklist for the Planar Capture System (Systems 136-147) detailing tasks across multiple phases including C++ core, material foundation, Blueprint actors, data assets, integration, and performance testing.
- Added a developer reference document outlining the architecture, data flow, state machine, budget enforcement, render target pooling, horror features, integration points, multiplayer networking, performance characteristics, debugging methods, and build order for the capture systems.
- Introduced examples of capture surface usage in the Project Void horror game, including specific implementations for mirrors, monitors, portals, and fake windows, along with a checklist for integration tasks.
This commit is contained in:
Lefteris Notas
2026-05-22 15:36:08 +03:00
parent 6b6c702dd7
commit 0a2d08b2ad
34 changed files with 5245 additions and 32 deletions

View File

@@ -0,0 +1,129 @@
# 141 — Monitor Surface Actor (`BP_Monitor`)
## Purpose
Security screen, TV, or diegetic display monitor. Uses a fixed camera actor reference instead of dynamic mirror/portal math. Runs at low FPS by default (5fps) with scanline and static noise effects.
## Dependencies
- **Requires:** `BP_PlanarCaptureActor` (137), `BPC_PlanarCapture` (136)
- **Required By:** `BPC_DiegeticDisplay` (18) — can display diegetic HUD content
- **Engine/Plugin Requirements:** None additional
## Class Info
| Property | Value |
|----------|-------|
| **Parent Class** | `BP_PlanarCaptureActor` (C++ `ABP_PlanarCaptureActor`) |
| **Class Type** | Blueprint Actor |
| **Asset Path** | `Content/Framework/Capture/BP_Monitor.uasset` |
| **C++ Status** | 🔵 BP Spec Only |
| **BP Asset** | Create in editor: `BP_Monitor` |
## 1. Configuration (Class Defaults)
| Variable | Value | Description |
|----------|-------|-------------|
| `CaptureComponent.CaptureMode` | `Monitor` | Fixed to Monitor mode |
| `CaptureComponent.CaptureFOV` | `70.0` | Narrower FOV for security camera feel |
| `CaptureComponent.QualityProfiles[0].CaptureInterval` | `0.2` | 5fps Low quality (override) |
| `SurfaceMPC` | `MPC_CaptureSurface` | Global MPC |
### Monitor-Specific Properties (Add to BP)
| Variable | Type | Default | Description |
|----------|------|---------|-------------|
| `bPoweredOn` | bool | true | On/off state |
| `bShowScanlines` | bool | false | CRT scanline overlay |
| `StaticNoiseIntensity` | float | 0.0 | Static/noise overlay (0.01.0) |
| `FlickerCurve` | UCurveFloat | — | On/off flicker timing curve |
| `PoweredOffMaterial` | UMaterialInterface | — | Material shown when off (black screen, cracked) |
## 2. Material Setup
| Slot | Material | Description |
|------|----------|-------------|
| SurfaceMesh[0] | `MI_Monitor_Security` | Security screen with scanline support |
## 3. Event Graph
### Event BeginPlay
```
Event BeginPlay
├─ Parent: BeginPlay
├─ Set CaptureComponent.CaptureMode = Monitor
├─ Set CaptureComponent.CaptureFOV = 70.0
├─ [If bPoweredOn] EnableSurface
└─ [Else] SetSurfaceMaterial(PoweredOffMaterial)
```
### Event: PowerOn
```
PowerOn()
├─ Set bPoweredOn = true
├─ SetSurfaceMaterial(MI_Monitor_Security)
├─ EnableSurface()
└─ [If FlickerCurve valid] StartFlickerTimeline
```
### Event: PowerOff
```
PowerOff()
├─ Set bPoweredOn = false
├─ DisableSurface()
├─ SetSurfaceMaterial(PoweredOffMaterial)
└─ StopFlickerTimeline
```
### Event: SetStaticNoise(Intensity: float)
```
SetStaticNoise(Intensity)
├─ Clamp Intensity 0.01.0
├─ Set StaticNoiseIntensity = Intensity
└─ SetSurfaceMPCParameter("StaticNoiseIntensity", Intensity)
```
## 4. Flicker Timeline Setup
If `FlickerCurve` is assigned, create a Timeline that drives:
```
Timeline: FlickerTimeline
Curve: FlickerCurve (Float Track)
On Update:
├─ Read curve value → bIsFlickerOn
├─ If bIsFlickerOn and not bPoweredOn → PowerOn (brief)
└─ If not bIsFlickerOn and bPoweredOn → PowerOff (brief)
```
## 5. Communication Matrix
| Target | Method | What |
|--------|--------|------|
| `BPC_DiegeticDisplay` (18) | Interface (I_DiegeticDisplay) | Can display diegetic HUD content as secondary output |
| `SS_AudioManager` (132) | Direct | Monitor static/buzz/hum SFX |
| `BPC_ScareEventSystem` (101) | Dispatcher | Monitor flicker/horror image scare |
## 6. Manual Implementation Guide
### 6.1 Create BP_Monitor
1. Create Blueprint Class: Parent = `BP_PlanarCaptureActor`, Name = `BP_Monitor`
2. Set `CaptureComponent.CaptureMode = Monitor` in defaults
3. Set `CaptureComponent.CaptureFOV = 70.0`
4. Override QualityProfiles[0].CaptureInterval to 0.2 (5fps Low)
5. Assign `MI_Monitor_Security` to SurfaceMesh
6. Create `PoweredOffMaterial` — simple dark/black emissive material
### 6.2 Camera Placement
1. Create a `CameraActor` or `SceneCaptureCamera` (BP child of CameraActor) in the level
2. Position it where the monitor should "look from"
3. In BP_Monitor instance: set `CaptureComponent.FixedCameraActor` → your camera actor
### 6.3 Power Control
For narrative-driven power control:
```
External system calls: BP_Monitor → PowerOn() / PowerOff()
Trigger: Narrative flag set → Branch → PowerOn or PowerOff
```
## 7. Build Checklist
- [ ] Create BP_Monitor Blueprint child
- [ ] Assign MI_Monitor_Security material
- [ ] Create PoweredOffMaterial (dark screen)
- [ ] Place camera actor and assign FixedCameraActor
- [ ] Test PowerOn/PowerOff cycle
- [ ] Test flicker curve timeline
- [ ] Test static noise parameter
- [ ] Test: place multiple monitors, verify quality budget works