# 145 — Capture Surface Material Parameter Collection (`MPC_CaptureSurface`)

## Purpose
Global Material Parameter Collection with 10 scalar parameters that control all capture surface material effects at runtime. Pushed each frame by `UBPC_PlanarCapture::PushMPCParameters()`.

## Dependencies
- **Requires:** None (standalone MPC asset)
- **Required By:** `M_CaptureSurface_Master` (144), all capture surface actors (139-143)
- **Engine/Plugin Requirements:** None

## Class Info
| Property | Value |
|----------|-------|
| **Asset Type** | MaterialParameterCollection |
| **Asset Path** | `Content/Framework/Capture/MPC_CaptureSurface.uasset` |
| **C++ Status** | N/A (content asset) |
| **Asset to Create** | MPC in UE5 editor |

## 1. Scalar Parameters

| Parameter Name | Default Value | Range | Description |
|---------------|---------------|-------|-------------|
| `SteamIntensity` | 0.0 | 0.0–1.0 | Steam/fog opacity on mirror surface |
| `DirtOpacity` | 0.0 | 0.0–1.0 | Dirt/scratch layer opacity |
| `CondensationFlow` | 0.0 | 0.0–2.0 | Condensation normal map panning speed |
| `DistortionAmplitude` | 0.0 | 0.0–1.0 | UV distortion magnitude (breathing mirror) |
| `MirrorDarkness` | 0.0 | 0.0–1.0 | Mirror darkening (0=normal, 1=black) |
| `WrongReflectionBlend` | 0.0 | 0.0–1.0 | Wrong reflection crossfade (horror mode) |
| `TextRevealProgress` | 0.0 | 0.0–1.0 | Steam text reveal wipe progress |
| `SteamEmissiveIntensity` | 0.0 | 0.0–5.0 | Backlit fog emissive brightness |
| `DelayedReflectionBlend` | 0.0 | 0.0–1.0 | Delayed frame ring buffer blend |
| `SurfaceAge` | 0.0 | 0.0–1.0 | Oxidation / yellowing tint amount |

## 2. Vector Parameters (Optional — Legendary Tier)

| Parameter Name | Default Value | Description |
|---------------|---------------|-------------|
| `SurfaceTintColor` | (1.0, 1.0, 1.0, 1.0) | Oxidation/aging color tint |
| `SteamColor` | (0.8, 0.85, 0.9, 1.0) | Steam emissive color |

## 3. Runtime Control

All parameters are driven by C++ via `UBPC_PlanarCapture::PushMPCParameters()`. Blueprint actors call `SetSurfaceMPCParameter(Name, Value)` on the parent `BP_PlanarCaptureActor` to override specific values for that surface.

### Per-Surface Override Pattern
```
BP_HorrorMirror → SetSurfaceMPCParameter("WrongReflectionBlend", 1.0)
  └─ This sets the scalar on the surface's MID, which overrides the MPC value
     (MID overrides take priority over MPC in UE5 material system)
```

### Global Override Pattern
```
SS_PlanarCaptureManager → all surfaces get MPC pushed each frame
  └─ A gameplay system changes MPC global → affects ALL mirrors/potals/monitors
```

## 4. Manual Implementation Guide

1. Create Material Parameter Collection: Name = `MPC_CaptureSurface`
2. Add all 10 scalar parameters with names and default values from Section 1
3. Add 2 optional vector parameters if using color tinting
4. Assign this MPC to every capture surface actor's `SurfaceMPC` variable
5. In `M_CaptureSurface_Master`, link all `Collection Parameter` nodes to this MPC

## 5. Build Checklist
- [ ] Create MPC_CaptureSurface in editor
- [ ] Add all 10 scalar parameters
- [ ] Add 2 vector parameters (optional)
- [ ] Assign to all BP_* capture actors' SurfaceMPC variable
- [ ] Verify material compiles with MPC references
- [ ] Test: change SteamIntensity in MPC, verify all mirrors fog
