Cinematics and Video for Games
A week before deadline, the team ships the build. Then they discover: the cutscene that looked fine in the editor is falling apart in the build—characters freeze momentarily, the camera stutters, lighting doesn't match the gameplay scene. This is a typical situation when cutscenes are made last-minute with tools not designed for production quality. A proper cinematics pipeline works differently.
What the Service Includes
- Storyboarding and pre-visualization — animatic with timing, visual breakdown, narrative alignment before production
- In-engine cinematics — Timeline, Cinemachine (Unity), Sequencer (Unreal)
- Rendered cutscenes — pre-rendered video integrated into the engine
- Procedural environment generation — for projects with large content volumes
- Technical art for cinematics — camera rigs, custom Timeline tracks
In-Engine Cinematics: Timeline and Cinemachine
In-engine cutscenes have obvious advantages over pre-rendered video: they use current assets, respond to player state (character customization, dynamic lighting), and don't require separate video file storage. This comes at the cost of pipeline complexity.
Timeline Architecture
Timeline in Unity isn't just an animation tool—it's a full-featured time management system for any game object. Each PlayableDirector manages a TimelineAsset containing tracks:
| Track Type | Purpose |
|---|---|
AnimationTrack |
Character and object animations |
CinemachineTrack |
Virtual camera switching |
AudioTrack |
Music, voice, SFX |
ActivationTrack |
Object enable/disable |
ControlTrack |
Child Timeline, Particle Systems |
SignalTrack |
Event calls to code |
Custom tracks via PlayableBehaviour + PlayableAsset — key capability for complex cutscenes. For example, a track managing post-processing overrides, smooth DOF blending, or syncing subtitles with audio.
Cinemachine: Virtual Cameras
Cinemachine fundamentally changes camera workflow. Instead of one camera with keyframes—a system of virtual cameras (CinemachineVirtualCamera, CinemachineFreeLook, CinemachineStateDrivenCamera) that smoothly transition via blend rules.
Most useful for cinematics:
CinemachineVirtualCamera — the primary tool. Each virtual camera has its own Body (how the camera follows the target) and Aim (how the camera looks at the target). Useful combinations:
-
Transposer+Composer: camera follows the character, keeping them in frame -
OrbitalTransposer+POV: third-person camera -
DoNothing+DoNothing: completely static camera, controlled via keyframes
Dolly Track (CinemachinePathBase + CinemachineTrackedDolly) — camera moves along a spline. Perfect for flybys and cinematic passes: designers define the path in the scene, animators control position via Timeline.
Camera Blend in CinemachineBrain: transitions between virtual cameras can be Cut, Ease In/Out, Linear, or via custom AnimationCurve. For dialogue scenes, standard is Cut between lines, Ease for emotional transitions.
Common Issues and Solutions
Jitter when following characters — frequent problem when physics update frequency (FixedUpdate) doesn't match rendering. Solution: CinemachineVirtualCamera > Body > Binding Mode: World Space + enable Stabilize Roll. If insufficient—custom CinemachineExtension with additional position smoothing.
Lighting mismatch between gameplay and cutscene—occurs when switching between Unity scenes or using different Lighting Settings. Solved via Volume Profile Override on CinemachineVirtualCamera or Timeline ControlTrack to activate the right Volume.
Lip sync — for dialogue with voice-over, use Salsa LipSync (Unity) or native Audio2Face (Unreal + MetaHuman). Basic approach — viseme-driven animation via AnimationTrack with keyframes per line.
Sequencer in Unreal Engine
Unreal's Sequencer is the functional equivalent of Timeline with key differences. For cinematic-quality cutscenes, Sequencer is more convenient:
- Movie Render Queue instead of Play Mode for final render—provides path tracing, motion blur with subsampling, and frame-perfect consistency
- Level Sequence Actor allows subsequence nesting—convenient for large projects where different cutscene parts are worked on in parallel
- Control Rig integration: direct FK/IK rig control in Sequencer without switching to Animation Blueprint
For MetaHuman characters, Sequencer is essential: face animations via Face AR or Performance Capture are recorded directly in Sequencer tracks.
Procedural Generation: Wave Function Collapse
For projects with large content volume (roguelike, open world), manually creating every level is impractical. Wave Function Collapse (WFC) — a tile-generation algorithm based on entropy principles from quantum mechanics (the name is metaphorical; the algorithm is deterministic).
Core concept: each grid cell can be one of N tiles. The algorithm iteratively "collapses" cells—selecting a tile based on compatibility rules with already-placed neighbors. The cell with minimum entropy (fewest valid options) collapses first.
Practical application in Unity: library mxgmn/WaveFunctionCollapse or custom implementation. Compatibility rules are defined either manually (JSON describing which tiles neighbor) or learned from example levels.
BSP (Binary Space Partitioning) — classic algorithm for dungeon level generation. Recursively divides space into rooms, connects with corridors. Simpler to implement, less flexible in results, but predictable—works well for roguelikes where level readability matters.
For cinematics, procedural generation applies differently: procedural camera animation (handheld camera shake, breathing idle) via Cinemachine Noise or custom Perlin noise-based controllers—adds cinematic liveliness without manually keyframing every move.
Pre-rendered Video: When and Why
Pre-rendered cutscenes are justified for intros/outros where quality outweighs interactivity. Render via Unity Recorder or Movie Render Queue (Unreal); final editing and color correction in DaVinci Resolve.
Engine integration: .mp4/.webm via VideoPlayer (Unity) or Media Framework (Unreal). Important for mobile—video doesn't always decode in hardware on all target devices; check codec support early (H.264 is safe, H.265 better quality but not all Android devices support it).





