Use Cases:

Rendering Linear Media

Perform batch rendering of images or video for non-interactive use.

Here's what you'll need:

Contents

Overview

Rendering images and video with the Unreal Engine for non-interactive use is becoming increasingly popular in industries such as automotive, architectural visualisation, and film and television. Unreal Engine containers make it possible to perform these rendering tasks at scale in the cloud.

Key considerations

Implementation guidelines

Rendering individual images

The framebuffer can be captured programmatically from within the Unreal Engine itself, either via the HighResShot console command or the classes from the MovieSceneCapture module. How you choose to trigger the image capture will depend on the specific details of your use case.

Rendering video frames

Cinematic sequences created using the Unreal Engine’s Sequencer system can be rendered to a set of video frames from the command-line using the flags described in the Command Line Arguments for Rendering Movies page of the official Unreal Engine documentation. These same flags also work inside Unreal Engine containers, albeit with the necessary addition of the -RenderOffscreen flag.

As an example, the following commands can be run from your Unreal project’s root directory (the one containing the .uproject file) to render a video sequence inside a GPU accelerated Linux container:

# Replace this value with the asset reference for your map
RENDER_MAP='/Game/Maps/ArchVis_Lightmap'

# Replace this value with the asset reference for your sequencer suquence
RENDER_SEQUENCE='/Game/Cinematic/archviz_cine_MASTER_MaxQuality.archviz_cine_MASTER_MaxQuality'

# This will render out frames to a subdirectory called "Rendered" inside your Unreal project's root directory
# (Note that if you haven't built the DDC for your project then the Unreal Engine will compile all of the shaders for the map before it starts rendering frames)
docker run --rm -ti "-v`pwd`:/hostdir" -w /hostdir --gpus all 'adamrehn/ue4-full:4.26.2' \
    ue4 run \
    "$RENDER_MAP" \
    -MovieSceneCaptureType="/Script/MovieSceneCapture.AutomatedLevelSequenceCapture" \
    -LevelSequence="$RENDER_SEQUENCE" \
    -game -NoLoadingScreen -NoSplash -RenderOffscreen -ForceRes \
    -MovieFrameRate=30 -ResX=1280 -ResY=720 -MovieQuality=100 \
    -MovieFormat=PNG -NoTextureStreaming -MovieCinematicMode=yes -NoScreenMessages \
    -MovieFolder='/hostdir/Rendered'