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,130 @@
# 147 — Capture Surface Material Instances (`MI_Mirror_*`, `MI_Portal_*`, `MI_Monitor_*`, `MI_FakeWindow_*`)
## Purpose
Pre-configured Material Instance Constants (MICs) for common capture surface states. These are children of `M_CaptureSurface_Master` (144) with static switches and default parameters pre-set for each use case.
## Dependencies
- **Requires:** `M_CaptureSurface_Master` (144), `MPC_CaptureSurface` (145)
- **Required By:** All capture surface actors (139-143)
- **Engine/Plugin Requirements:** None
## Class Info
| Property | Value |
|----------|-------|
| **Asset Type** | MaterialInstanceConstant |
| **Parent Material** | `M_CaptureSurface_Master` |
| **Asset Path** | `Content/Framework/Capture/Materials/` |
| **C++ Status** | N/A |
| **Assets to Create** | 7 material instances |
## 1. Material Instance Catalog
### MI_Mirror_Clean
| Static Switch | Value |
|---------------|-------|
| `bIsMirror` | `true` |
| `bEnableHorrorLayers` | `false` |
| Scalar Override | Value | Note |
|-----------------|-------|------|
| `SteamIntensity` | 0.0 | No fog |
| `DirtOpacity` | 0.0 | Clean |
| `SurfaceAge` | 0.0 | No oxidation |
### MI_Mirror_Dirty
| Static Switch | Value |
|---------------|-------|
| `bIsMirror` | `true` |
| `bEnableHorrorLayers` | `false` |
| Scalar Override | Value | Note |
|-----------------|-------|------|
| `DirtOpacity` | 0.4 | Moderate dirt |
| `SurfaceAge` | 0.3 | Slight yellowing |
### MI_Mirror_Steam
| Static Switch | Value |
|---------------|-------|
| `bIsMirror` | `true` |
| `bEnableHorrorLayers` | `false` |
| Scalar Override | Value | Note |
|-----------------|-------|------|
| `SteamIntensity` | 0.6 | Visible fog |
| `CondensationFlow` | 0.5 | Slow rivulet drift |
| `DistortionAmplitude` | 0.2 | Slight warp |
| `SteamEmissiveIntensity` | 0.3 | Subtle glow |
### MI_Mirror_Horror
| Static Switch | Value |
|---------------|-------|
| `bIsMirror` | `true` |
| `bEnableHorrorLayers` | `true` |
| Scalar Override | Value | Note |
|-----------------|-------|------|
| `WrongReflectionBlend` | 0.0 | Starts off (driven by MPC at runtime) |
| `MirrorDarkness` | 0.0 | Starts normal |
| `TextRevealProgress` | 0.0 | Hidden until scare |
| `DistortionAmplitude` | 0.0 | Normal until scare |
### MI_Portal_Standard
| Static Switch | Value |
|---------------|-------|
| `bIsMirror` | `false` |
| `bEnableHorrorLayers` | `false` |
| Texture Override | Value | Note |
|------------------|-------|------|
| `CaptureTexture` | (set at runtime by component) | RT assigned dynamically |
### MI_Monitor_Security
| Static Switch | Value |
|---------------|-------|
| `bIsMirror` | `false` |
| `bEnableHorrorLayers` | `false` |
| Scalar Override | Value | Note |
|-----------------|-------|------|
| `ScanlineIntensity` | 0.3 | CRT scanline overlay (add as custom parameter) |
### MI_FakeWindow_Interior
| Static Switch | Value |
|---------------|-------|
| `bIsMirror` | `false` |
| `bEnableHorrorLayers` | `false` |
| Scalar Override | Value | Note |
|-----------------|-------|------|
| `RainIntensity` | 0.0 | Weather overlay off (add as custom parameter) |
| `FrostIntensity` | 0.0 | Weather overlay off (add as custom parameter) |
## 2. Usage Assignment
| Actor | Default MI | Swap Options |
|-------|-----------|--------------|
| `BP_Mirror` | MI_Mirror_Clean | MI_Mirror_Dirty, MI_Mirror_Steam |
| `BP_Portal` | MI_Portal_Standard | — |
| `BP_Monitor` | MI_Monitor_Security | PoweredOffMaterial (custom) |
| `BP_HorrorMirror` | MI_Mirror_Horror | MI_Mirror_Clean (pre-scare), MI_Mirror_Steam |
| `BP_FakeWindow` | MI_FakeWindow_Interior | — |
## 3. Manual Implementation Guide
1. Create all 7 Material Instance Constants
2. Parent: `M_CaptureSurface_Master`
3. For each, set Static Switch Parameters as listed above
4. Set Scalar Parameter Overrides where non-zero
5. Assign to corresponding Blueprint actor defaults
6. Test: place mirror with MI_Mirror_Steam, verify fogged appearance
## 4. Build Checklist
- [ ] Create MI_Mirror_Clean (bIsMirror=true, all scalars=0)
- [ ] Create MI_Mirror_Dirty (DirtOpacity=0.4)
- [ ] Create MI_Mirror_Steam (SteamIntensity=0.6)
- [ ] Create MI_Mirror_Horror (bEnableHorrorLayers=true)
- [ ] Create MI_Portal_Standard (bIsMirror=false)
- [ ] Create MI_Monitor_Security (bIsMirror=false)
- [ ] Create MI_FakeWindow_Interior (bIsMirror=false)
- [ ] Assign defaults to each BP child's SurfaceMesh
- [ ] Verify all compile without material errors