Setting up Pomfort Virtual LUT box for Unreal Engine
This article covers features that require activation via a module license.
The Pomfort Virtual LUT Box for Unreal Engine allows creatives to interact with the Unreal Engine’s image through Livegrade. 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 materials, and example actor blueprints for Unreal Editor that perform the color manipulations in Unreal Engine.
- Device support in Livegrade for controlling the Pomfort virtual LUT box from the grade controls in LiveGrade.

Unreal Engine Viewport with active Pomfort Virtual LUT Box
The Pomfort Virtual LUT Box is intended to be used to apply a shader to the entire scene (as a post process material), or to individual frustums, for example, in an nDisplay setup. That way the appearance of a scene on certain parts of the LED wall can be changed interactively from Livegrade. 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.
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.

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
Basic setup#
Follow the steps below to get started with the virtual LUT Box:
Unreal editor:
- Set the “MPCInnerFrustum-PostShader-CDL-OCIO” material as a Post Process Material in your scene.

Set post process material in Unreal Editor
-
Navigate to the PomfortVL plugin’s assets in the Content Browser.
-
Drag the “LGVL-InnerFrustumMPC-CDL-Actor” into your scene. The “Channel Name” of the LivegradeVLComponent for that actor is “innerfrustum”.

LivegradeVL actor component with channel name
Adding Unreal as look device#
Open the slot manager
- by clicking on the Slot Manager symbol in the toolbar or via the menu: Slots > [Slot Manager…]

In the Slot Manager, click the input slot you want to add the device to.
In the Slot settings, click + Add Device in the Look Devices section to add the Unreal plugin to the slot.
Host textfield
Enter the IP address of the computer running Unreal. If your device should be accessed via a custom port, add a : to the IP address followed by the port (Example: 192.168.1.2:8001).
Channel textfield
Enter the channel name that you used for the “Channel Name” field of the actor in Unreal.
Look Update toggle
Choose how to update the look on the device.
- Interactive: Adjustments of the look will be sent immediately to the device.
- Manual Upload: Adjustments of the look will be sent on “Upload Look” actions. These actions are available as menu items (Slots > [Upload Look to Device(s)] menu), Toolbar button, Stream Deck and Tangent action
Look Control dropdown
A connection between Livegrade and Unreal Engine is made 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, even when your look contains LUTs, Curve, LMT, Input or Output Transform nodes.
- LUT: Livegrade combines all grading nodes into a 3D LUT. When using ACES CDL or ACES CDL Advanced grading mode in Livegrade, Input and Output transforms won’t be included. 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.
Connect button
Click on Connect to add the device to the slot. After that the current look of the corresponding input slot will always be sent to the look device as long as the input slot is in Live mode.Livegrade is then able to control the CDL or LUT in Unreal Engine, depending on the chosen channel mode.
Remove button
Click on Remove to remove the device from the slot. After that the current look of the corresponding input slot won’t be sent to the look device anymore.
Live-grading a scene in Unreal#
After connecting the Unreal device in Livegrade, you now should be able to control the look of the scene by changing the grade controls of the configured slot from that Livegrade. The Output Log in Unreal Editor shows one line per change of CDL values (see screenshot below).

Example Output Log of the Pomfort Virtual LUT Box
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.
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:
MPCs (Material Parameter Collections), in Materials/:
The MPCs act as an intermediate storage of look metadata between the PomfortVL plugin (through the actor components) and the post process materials.
- Frustum_Global_MPC, Frustum_Inner_MPC, Frustum_Outer_MPC: Material parameter collections for the individual actors/materials.
The mechanism to connect post process materials to parameters from the PomfortVL plugin through MPCs enables instantiation of multiple, independent materials to be controlled from Livegrade Studio, e.g. for different frustums (the different materials are bound to independent MPCs, which get their updates from independent PomfortVL instances/actor components, which can be controlled from different connections/channel names from Livegrade Studio).
Main Actor components:
- LGVL-GlobalMPC-CDL-Actor, LGVL-InnerFrustumMPC-CDL-Actor, LGVL-OuterFrustumMPC-CDL-Actor: An example actor that updates a certain MPC with a CDL values. The actor uses an instance of the LivegradeVLComponent (e.g., ChannelName “innerfrustum”) to provide remote access to the color grade parameters (CDL parameters).
Actor components from previous versions of the PomfortVL plugins:
- 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 set the identifier in the detail section “Live Grading” as the “ChannelName” property (see screenshot).
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 and assets:
- 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).
- LGVL_EditorTick_BPI and LGVL_EditorTicker_BP: Blueprints with functionality for triggering updates of CDL-based post process materials also in non-“play” mode.
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:
- MPCGlobal-PostShader-CDL-OCIO, MPCInnerFrustum-PostShader-CDL-OCIO, MPCOuterFrustum-PostShader-CDL-OCIO: Post-process shaders bound to corresponding MPC objects, to be instantiated manually
Grading shaders from previous versions of the PomfortVL plugins:
- 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 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.
Troubleshooting#
If you start the Unreal Engine after you configured the devices in Livegrade, you can click the “Reconnect” button in the Slot Collection Header to reconnect to the PomfortVL plugin.
Known issues#
- Amount of logging in Output Log cannot be configured yet.
- Multi-processing is not supported 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.