How-To: Author a Stage Level
Goal: replace the showcase's black void with a set you authored - a floor, lights, a sky, props, post process - by pointing the plugin at an ordinary level asset.
A stage level is streamed into the showcase pocket world as a level instance while the loading screen is up. Leave ShowcaseStageLevel unset and the showcase renders against an empty world lit only by the stage's built-in three-point rig, which is also what you fall back to if the level cannot be used. This page is entirely optional.
bUseLivePreview is on, a render target is assigned, and the widget displays it. Everything here is authored in the level editor; no Blueprint and no C++ is involved, so this page has no audience tabs until the last step.1. Create an empty level
File -> New Level -> Empty Level. Empty, not Basic: the pocket world has no player, no game mode and never runs a game, so a default level's player start, fog and floor are noise. Save it wherever you keep levels - the plugin does not care where it lives.
2. Build the set
Add a floor - a scaled Cube static mesh is enough - so the characters have something to stand on and shadows have somewhere to land. Then add your lighting: a key, a fill and a rim is the standard three-point setup. Set every light to Movable. The level is loaded from its on-disk package as an instance, so built lighting through that path is not something this plugin can promise; if you bake anything, eyeball-test the result.
| Rule | Why |
|---|---|
| No Level Blueprint logic | There is no game running in the pocket world to drive it |
No actor that expects a PlayerController, GameState or input | None of them exist in that world |
| Color grading in an unbound Post Process Volume; exposure on the capture | Scene captures apply volumes first, then the capture component's own overrides win |
| A showcase camera, or a placed stage, on Manual exposure must also override Apply Physical Camera Exposure and turn it off | Manual exposure otherwise applies the physical camera's ISO, shutter and aperture, which is calibrated for daylight and renders studio lighting black |
| Lumen needs the capture component's post-process overrides, not a volume | Scene captures force Lumen GI and reflections off before the capture's overrides are applied |
| The Sky Light and reflection captures are captured once, when the stage loads | Nothing refreshes them for a world the engine's loop never ticks |
| Save the map before testing | The instance loads the on-disk package, so unsaved editor edits are invisible to the showcase |
3. Place the standing marks
Drag ACrimsonShowcaseSlot actors from the Place Actors panel (search Crimson Showcase Slot) to wherever you want characters to stand. Set Slot Index on each: 0, 1, 2 ... N-1. Slot 0 is the primary - the local player, the hero of the shot - and companions fill the rest in ascending index order. The actor's forward axis, drawn as an arrow in the editor, is the direction the character faces. The actor carries no logic and never ticks: a transform and an index, nothing else.
4. Author the shots (optional)
Place ACrimsonShowcaseCamera actors to decide how the stage is framed. It derives from ACameraActor, so you get the editor's camera preview for free - what the preview shows is what the loading screen renders, give or take the auto-fit dolly. Without any camera the stage uses its own built-in direction.
| Property | Default | Meaning |
|---|---|---|
CharacterCount | 0 | The exact head count this shot was framed for. 0 means any count - the fallback shot. |
bAutoFit | true | Keeps the authored rotation and field of view but dollies along the view axis until everyone fits. Untick to use the camera's world transform verbatim. |
The stage picks, in order: a camera whose CharacterCount equals the number of characters on stage, then a camera with CharacterCount == 0, then its own built-in direction. If several cameras claim the same count the lowest actor name wins, so the answer is stable rather than dependent on iteration order. The chosen camera hands the capture its field of view and its post-process settings.
Images/CrimsonLoadingScreen/howto_stagelevel_layout.png5. Place a stage actor (optional)
By default the subsystem spawns one ACrimsonShowcaseStage from the Showcase Stage Class setting and switches its built-in studio rig off, because your level brings its own lighting. Place an ACrimsonShowcaseStage in the level yourself when you want the capture, the framing values and the formation tuning authored in the level - the first one found wins, and the stage is a singleton by design. Untick Studio Setup Enabled on it if your level is already lit.
| Stage property | Default | What it controls |
|---|---|---|
TurntableSpeed | 18 degrees/second | Rotation speed. Only spins when exactly one character is shown and the formation placed it - never for a slot-placed or multi-character stage. |
CameraDistance / CameraHeight / LookAtHeight | 800 / 120 / 95 cm | The built-in camera direction, used when no ACrimsonShowcaseCamera applies. |
CameraFOV | 32 degrees | Horizontal field of view of the built-in shot. Narrow reads as a portrait lens. |
FramingPadding | 1.15 | Breathing room the auto-fit leaves around the characters - 1.15 is 15 percent. |
FormationLateralStep | 75 cm | Lateral distance between two neighboring characters in the procedural formation. |
FormationRowDepth | 120 cm | How far behind the primary the formation's back row stands. |
FormationFrontRowInset | 30 cm | How far behind the primary the rest of the formation's front row stands. |
FormationArcDepthPerStep | 8 cm | Extra depth every lateral step adds on top of its row, arcing the group back. |
FormationYawPerStep | 3 degrees | How far every lateral step turns toward the center. |
bStudioSetupEnabled | true | The three built-in lights and the capture's manual exposure override, switched together - they are one look. |
ACrimsonShowcaseStage is Blueprintable: subclass it, set these defaults there, and point Showcase Stage Class at your subclass if you would rather tune the stage once than place one per level.6. Point the setting at the level
Project Settings -> Crimson -> Crimson Loading Screen -> Cinematic Preview -> Showcase Stage Level. The field accepts any UWorld asset and unlocks once Use Live Preview is on. Set Showcase Stage Load Timeout Secs (default 10 seconds) if your stage is heavy.
CrimsonLoadingScreen.AlwaysShow 1 while a character is registered. The log prints Showcase: streaming stage level [...] into the pocket world. and then Showcase: pocket world active with N character(s) on an authored stage.7. Make sure it ships
A soft object path stored in a settings ini is invisible to the cooker, so a stage level would only ship if it happened to sit in a folder the Asset Manager already scans. The plugin's editor module adds ShowcaseStageLevel's package to the cook for you through the engine's modify-cook delegate, which is what keeps the setting folder-agnostic - put the map wherever you like. The same module logs a warning at editor startup if the setting points at a package that is not on disk.
Showcase stage level [...] added to the cook. in the cook log. Then run the packaged build and travel.When the stage level cannot be used
Three things end the load early, each logged as an error naming the package and the reason, and each falling back to the built-in studio stage in the empty world: the level failed to load, it turned out to be a World Partition map, or it did not become visible within ShowcaseStageLoadTimeoutSecs. A stage that never loads must not cost the player a preview.
check() in Debug game builds and a leaked-world fatal at the next map load. Keep weak references, or copy out the values you need and drop the pointer. The plugin's own references into the level are all weak for exactly this reason.See also
- How-To: Live Render Target Preview - the settings and the widget side.
- How-To: Show Multiple Characters - filling those slots with more than one character.
- Concept: The Cinematic Preview Pipeline - what runs when, and why the level work is deferred.
- API Reference -> Cinematic preview - every showcase type and setting.