# 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
