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.

Prerequisites
How-To: Live Render Target Preview is done - 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.

Plain maps only
World Partition is not supported - the subsystem detects a partitioned map, logs an error naming it, and falls back to the built-in studio stage. Sublevels and External Actors (One File Per Actor) are unsupported too. Turn External Actors off for this level before you place anything in it.
Verify
The Outliner holds nothing but the level's own default entries, and World Settings shows no World Partition setup.

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.

RuleWhy
No Level Blueprint logicThere is no game running in the pocket world to drive it
No actor that expects a PlayerController, GameState or inputNone of them exist in that world
Color grading in an unbound Post Process Volume; exposure on the captureScene 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 offManual 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 volumeScene 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 loadsNothing refreshes them for a world the engine's loop never ticks
Save the map before testingThe instance loads the on-disk package, so unsaved editor edits are invisible to the showcase
Verify
The level looks right in the editor viewport with Lit view mode and the game view (G) on.

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.

Slots are all or nothing
The stage uses the slots only when the level holds at least as many slots as characters. With too few, the procedural formation places everyone instead and a warning names both counts - because a half-slotted, half-procedural group reads as a mistake, and dropping a character is never an option. Place enough slots for the largest roster this stage is meant to show.
Verify
Each slot shows its arrow in the viewport and its Slot Index is unique. Duplicate indices are allowed but keep discovery order, which is not something to rely on.

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.

PropertyDefaultMeaning
CharacterCount0The exact head count this shot was framed for. 0 means any count - the fallback shot.
bAutoFittrueKeeps 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.

Verify
Select the camera and use the preview thumbnail in the viewport corner. A shot framed for one character plus an any-count shot for everything else is a good starting pair.
Screenshot pendingImages/CrimsonLoadingScreen/howto_stagelevel_layout.png
A stage level open in the editor: floor, movable key/fill/rim lights, four ACrimsonShowcaseSlot marks with their facing arrows, and one any-count ACrimsonShowcaseCamera, with the Outliner beside it.

5. 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 propertyDefaultWhat it controls
TurntableSpeed18 degrees/secondRotation 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 / LookAtHeight800 / 120 / 95 cmThe built-in camera direction, used when no ACrimsonShowcaseCamera applies.
CameraFOV32 degreesHorizontal field of view of the built-in shot. Narrow reads as a portrait lens.
FramingPadding1.15Breathing room the auto-fit leaves around the characters - 1.15 is 15 percent.
FormationLateralStep75 cmLateral distance between two neighboring characters in the procedural formation.
FormationRowDepth120 cmHow far behind the primary the formation's back row stands.
FormationFrontRowInset30 cmHow far behind the primary the rest of the formation's front row stands.
FormationArcDepthPerStep8 cmExtra depth every lateral step adds on top of its row, arcing the group back.
FormationYawPerStep3 degreesHow far every lateral step turns toward the center.
bStudioSetupEnabledtrueThe three built-in lights and the capture's manual exposure override, switched together - they are one look.
Verify
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.

Verify
Force a screen with 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.

Verify
Cook or package the project and look for 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.

Never keep a hard reference into the stage level
The streamed level is unloaded when the loading screen hides. A surviving hard reference to the stage, a slot, a camera or anything else inside it - a UPROPERTY on a game object, a Blueprint variable - is a 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.