Setting up Pomfort Virtual LUT Box for Unreal Engine

This article covers features which are only available in Livegrade Studio.

Note: This is documentation for features available with Livegrade Studio 6.0 or higher and the PomfortVL plugin (in Beta). Latest beta downloads for the PomfortVL plugin can be found on our virtual production workflow page.

The Pomfort Virtual LUT Box for Unreal Engine allows creatives to interact with the Unreal Engine’s image through Livegrade Studio. It is intended to provide the typical behavior (for example, ASC-CDL in working color space ACEScct) and known tools (standard grading controls and color wheel controllers) for creative color adjustments in virtual production environments. While being color managed in itself, the color adjustments of the Pomfort Virtual LUT Box should be used for creative adjustments of the image only and are not intended to be used for calibration efforts or other color management tasks.

The Pomfort Virtual LUT Box for Unreal Engine consists of two parts:

  • Plugin, components, and assets for Unreal Editor include the PomfortVL plugin, a custom actor component, several shaders, and example blueprints for UE4 that perform the color manipulations in Unreal Engine.
  • Device support in Livegrade Studio for controlling the Pomfort virtual LUT box from the grade controls in LiveGrade Studio.
Unreal Engine Viewport

Unreal Engine Viewport with active Pomfort Virtual LUT Box

The Pomfort Virtual LUT Box can be used to either apply a shader to the entire scene (as a post process material), or to manipulate individual objects in the scene. That way the appearance of a scene can be changed interactively from Livegrade Studio. The example blueprints’ shaders are configured to apply an ASC-CDL color filter in the working color space ACEScct and can be easily modified to individual project setups.

Note: The PomfortVL plugin components and thus the color grade are only active in the scene rendering when the scene is in “Play” mode.

Installing the Pomfort Virtual LUT Box Plugin with the Example Assets (Shaders and Blueprints)

  • Unzip the download for the Pomfort Virtual LUT Box. It contains the plugin as well as the assets.
  • Move the folder for the plugin (“PomfortVL”) to the “Plugins” folder of your project. You might need to create a folder “Plugins” in the root directory of your project if it doesn’t exist.

PomfortVL Plugin:

After restarting Unreal Editor make sure you see the “PomfortVL” plugin installed in the plugin overview (via “Plugins” in the “Edit” menu). If the Unreal Editor shows a message that the plugin needs to be recompiled, do so. The source of the plugin is contained in the plugin’s folder.

Note: Visual Studio including Desktop Development with C++ and the .NET SDK needs to be installed to compile plugins.

PomfortVL Plugin

PomfortVL Plugin

Plugin Assets:

Make also sure the plugin’s assets are visible in the Content Browser in Unreal Editor. The assets are located in the plugin’s Content folder and don’t need to be installed separately, but may not be shown by default in the Content Browser.

  • Enable plugin assets to be shown in the Content Browser to see the plugin’s assets:
    • Click on the “View Options” button of the Content Browser
    • Make sure the “Show Plugin Content” option is checked
  • To navigate to the plugin’s assets, click on the folder icon in the title bar of the Content Browser and choose “PomfortVL Content”.
Displaying assets of the Pomfort Virtual LUT Box in the Content Browser

Displaying assets of the Pomfort Virtual LUT Box in the Content Browser

Basic Setup

Follow the steps below to get started with the virtual LUT Box:

Unreal Editor:

  1. Navigate to the PomfortVL plugin’s assets in the Content Browser.
  2. Drag the LGVL-GlobalCDLGrade-Actor into your scene. The ChannelName of the LivegradeVLComponent for that actor is “global-cdl”.
  3. The LGVL-GlobalCDLGrade-Actor blueprint assumes a standard sRGB viewport configuration. You can also use in other configurations (e.g. HDR output, OCIO), but the working-color space will not match ACEScct then. See below for different color pipeline configurations.
  4. Switch the Unreal Editor to “Play” mode.

Livegrade Studio:

  1. Set up a new slot and switch the grading mode to “ACES CDL”.
  2. Add the “PomfortVL for UE” virtual LUT box device to the slot (for example, in the device manager). Enter
    • the IP address of the machine running Unreal Editor,
    • the ChannelName value of the LGVL-GlobalCDLGrade-Actor that you plan to control (for example, “global-cdl” for the example above), and
    • the Channel Mode to “CDL”.
  3. [OPTIONAL] Set the IDT to “Academy – Reverse sRGB 100 nits (ODT)” and the ODT to “sRGB – sRGB 100 nits (dim)”. With these settings, an ungraded/neutral reference still in sRGB (for example a hires screenshot from UE4) can be used in Livegrade Studio for preview. With the correct color pipelines set up, Livegrade’s  viewer should reproduce the same image as the Unreal Engine with the PomfortVL plugin.

You now should be able to control the look of the scene by changing the CDL controls/color wheels of the configured slot from that Livegrade. The Output Log in Unreal Editor shows one line per change of CDL values (see screenshot below).

Log

Output Log of the Pomfort Virtual LUT Box

Channel Mode:

A connection between Livegrade and Unreal Engine is either using CDL parameters or a 3D LUT for communicating look information. Depending on this setting, Livegrade prepares information differently:

  • CDL: Livegrade only sends the parameters of the CDL grading nodes, no matter what additional nodes or IDT/ODT nodes are set.
  • LUT: Livegrade combines all grading nodes into a 3D LUT, except IDT and ODT nodes. It is always assumed (and implemented in the example Blueprints), that the working color space is set up in the shaders and materials in Unreal Engine.

Persistence of Look Information in the Unreal Engine Project:

CDL and LUT values are stored in the project so that the last look can be recalled even if no Livegrade is connected. The information is stored in the PomfortVL plugin’s folder named “SaveState”.

As soon as Livegrade connects again, the current values from Livegrade are applied again.

Assets of the “Pomfort Virtual LUT Box” in Unreal Editor

The Pomfort virtual LUT box for Unreal Engine comes with the following assets and components:

Main Actor Components:

  • LGVL-GlobalCDLGrade-Actor: An example actor setting up a dynamic material with a CDL shader as a post-process material. The actor uses an instance of the LivegradeVLComponent (ChannelName “global-cdl”) to provide remote access to the color grade parameters (CDL parameters).
  • LGVL-GlobalLUTGrade-Actor: An example actor setting up a dynamic material with a 3D LUT shader as a post-process material. The actor uses an instance of the LivegradeVLComponent (ChannelName “global-lut”) to provide remote access to the color grade parameters (dynamic 3D LUT texture).

You can change the materials/shaders used with the “Parent” parameter of the “Create Dynamic Material Instance Node” of the Blueprint (for example, for different color pipelines).

You can set the identifier in the detail section “Live Grading” as the “ChannelName” property (see screenshot).

Component Configuration

Component Configuration and ChannelName (in “Live Grading” section on the right)

Note: Multiple instances of LivegradeVL Component must have different/unique values for ChannelName. Identical values for ChannelNames will lead to undefined behavior.

Other Actor Components:

  • LGVL-CylinderCDLGrade-Actor: An example actor setting up a dynamic material with a CDL shader as a surface material for a cylinder object. The actor uses an instance of the LivegradeVLComponent (ChannelName “cylinder-cdl”) to provide remote access to the color grade parameters (CDL parameters).
  • LGVL-CylinderLUTGrade-Actor: An example actor setting up a dynamic material with a 3D LUT shader as a surface material for a cylinder object. The actor uses an instance of the LivegradeVLComponent (ChannelName “cylinder-lut”) to provide remote access to the color grade parameters (dynamic 3D LUT texture).
  • LGVL-GlobalCDL+InvGradeActor: An example actor setting up a dynamic material with two CDL shaders as a post-process material. The actor uses two instances of the LivegradeVLComponent (ChannelNames “global-cdl” and “global-invcdl”) to provide remote access to the color grade parameters (CDL parameters). See Setting up PomfortVL for Foreground Grading for use cases.

These assets illustrate the basic functionality and interaction of the virtual LUT box, can be used as a starting point for your own integration development.

Color Management and Grading Shaders:

  • CDLPostShader-sRGB and CDLPostShader-Rec2020PQ: Post-process shaders used to color grade the entire scene. A CDL is applied in working color space ACEScct. The blendable location is set to “After Tonemapping” and the shader is built for tone mappers to sRGB and PQ (with Rec.2020). The shader CDLPostShader-sRGB is used by default by the LGVL-GlobalCDLGrade-Actor.
  • LUTPostShader-sRGB: Post-process shaders used to color grade the entire scene. A 3D LUT is applied in working color space ACEScct. The blendable location is set to “After Tonemapping” and the shader is built for tone mappers to sRGB.
  • CDLPostShader-OCIO: A post-process shader used to color grade the entire scene. A CDL is applied in working color space ACEScct. The blendable location is set to “Before Tonemapping” and the shader is built for OCIO-based ACES processing in the viewport. The shader assumes the color space of the engine’s rendering to be sRGB with linear enoding.
Color pipeline for foreground grading

Color pipeline in Unreal Engine with PomfortVL shaders

  • CDLSurfaceShader: A surface shader used to color grade the emissive color of a material. A CDL is applied in working color space ACEScct. The shader is used by default by the LGVL-CylinderCDLGrade-Actor.
  • LUTSurfaceShader: A surface shader used to color grade the emissive color of a material. A 3D LUT is applied in working color space ACEScct. The shader is used by default by the LGVL-CylinderLUTGrade-Actor.

Other  Setup Options

Bottom Color Bars

The color bars on the bottom of the image can be used to quickly indicate if a grade is applied. This is especially helpful when setting up the Pomfort Virtual LUT Box.

If the color bar has only one row, no grade is applied. If the color bar is split into two rows (a neutral on the bottom and a modified row above), a grade is applied.

You can modify or bypass the ramps in each shader asset by manipulating the “Patch-Ramp” nodes in the Material assets. The neutral and the graded  color bar are created by one “Patch-Ramp” node each.

  • You can change the height of both bars by changing the yStart parameter of each PatchRamp node. yStart is a value from 0.0 to 1.0 spanning the y axis from top (0.0) to bottom (1.0). The color bar is painted from yStart to the bottom of the image.
  • You can disable the color bar by bypassing the “Patch-Ramp” nodes (i.e. connecting the output of the previous node directly with the input of the next node).

You can explore the blueprints and shaders for more options.

Trouble Shooting

If you start the Unreal Engine after you configured the devices in Livegrade Studio, you can click the “Reload devices” button beside the “Devices…” button in the main window to reconnect to the PomfortVL plugin. A yellow warning triangle in the slot UI can indicate that the slot is not in Play mode.

Known Issues

  • Amount of logging in Output Log cannot be configured yet.
  • LUTs used in CDLPostShader-sRGB and CDLPostShader-Rec2020PQ currently only for tone mapping to sRGB and PQ (with Rec.2020) output color space. In case you are using the tone mapping to other output color spaces, different LUTs need to be used. Please contact us at virtualproduction@pomfort.com.