Indoor Camera Layers let designers paint Level-local floor regions that apply camera modifier profiles while a player stands on them. Use them for room-specific camera behavior, combat/non-combat indoor tuning, tight corridors, storefronts, stairwells, and other spaces where a full camera type switch would be too heavy.
The system has two authoring surfaces:
| Command | Location | Purpose |
|---|---|---|
| Edit Indoor Camera Layers | Level Editor Tools -> Composable Camera System | Opens the paint tool for the current Level. |
| Show Indoor Camera Layers | Level Editor Tools -> Composable Camera System | Toggles read-only overlay rendering for loaded indoor layers. |
Runtime Model¶
An indoor layer stores a reference to an Indoor Profile. The profile contains modifier assets. At runtime, UComposableCameraIndoorWorldSubsystem queries the pawn position downward against loaded indoor surface data. When the winning profile changes, it duplicates that profile's modifier assets for the player's AComposableCameraPlayerCameraManager and replaces the previous indoor modifier set with one camera refresh.
Modifier assets still use their own CameraTagQuery. A single profile can therefore hold separate modifier assets for combat, exploration, aim, or cutscene camera tags without switching camera type assets.
Create an Indoor Profile¶
- Create a
ComposableCameraIndoorProfiledata asset. - Add one or more
Node Modifier Data Assetentries toModifierAssets. - Configure each modifier asset's
CameraTagQueryso it only affects the intended cameras.
The profile does not define camera types. It only supplies modifier assets.
Paint Layers¶
- Open the Level you want to author.
- Choose Tools -> Composable Camera System -> Edit Indoor Camera Layers.
- Add or select a Layer row.
- Set the Layer's name, priority, profile, enabled state, and debug color.
- Paint with the left mouse button. Hold Shift + left mouse to erase.
- Click Save in the tool when the Level-local document is ready.
The tool creates and maintains a hidden AComposableCameraIndoorSurfaceStorageActor in the current Level. Users should not place or edit that actor manually. Its transform anchors the painted data to the owning Level, so streamed Levels and Level Instances keep their local indoor document.
Layer Priority¶
If two enabled layers cover the same surface, the higher Priority wins. Disabled layers are ignored and reveal the next enabled layer beneath them.
The edit and preview overlays resolve coverage before drawing. Repeated paint stamps do not make the same layer darker, and lower-priority layers do not bleed through a higher-priority winner at the same surface location.
Brush Projection¶
The paint brush projects a ring onto compatible floor collision. It can cross collision-component seams, so Landscape components and modular floor pieces do not create artificial gaps. Samples still need a valid collision hit within the projection distance and must satisfy the minimum floor-normal threshold.
Preview¶
Use Show Indoor Camera Layers to render all loaded indoor surfaces without opening the edit tool. If the edit mode is active, the command closes it first and then enables preview. Closing the edit-mode tab also exits the mode and clears the overlay.
Data Boundaries¶
Indoor surface data has separate authoring and runtime forms:
- Authoring data keeps full-fidelity triangles and stable Layer GUIDs.
- Runtime data stores compact indexed triangles and Layer indices for query.
- Save/bake flows from authoring data to runtime data only.
Future simplification or acceleration should only replace runtime output. Do not round-trip simplified geometry back into authoring data.
Blueprint Query¶
UComposableCameraIndoorWorldSubsystem::QueryIndoorLayer can be called from Blueprint or C++ for diagnostics and custom gameplay. It returns the winning layer id, layer name, priority, profile, surface position, and vertical query distance.
The normal camera behavior path does not require manual query calls. The world subsystem ticks local players automatically in PIE and game worlds.