A plugin for Unreal Engine 5.7 (Windows) that renders a live Unreal scene to a Voxel VX2 / VX2-XL volumetric display in real time. Drop one actor into your level, position it over your subject, press Play.
The VLED Unreal Plugin renders a live Unreal scene to a Voxel VX2 / VX2-XL volumetric display in real time. Drop a single actor into your level, position it over your subject, press Play, and the scene appears on the volumetric display for an audience to walk around and explore from every angle. Drive it from Blueprint or C++, just like any other actor.
Every frame, the plugin:
ledhost.dll on a background display thread, and opens a LedWin simulator window you can orbit and zoom.The region that gets captured is shown in the editor as a green wireframe box (the camera faces) with an inscribed cylinder (the actual volume the VX2 shows) and a green text label on each face. Move and scale the actor to frame your subject, or use FollowTarget to track a pawn automatically.
All settings — capture resolution, voxel budget, gamma, sharpness, boost and face selection — are configured in the actor's Details panel and persist between sessions via Saved/VLEDConfig.json.
ledhost.dll, LedWin.dll and ledhost.ini, typically under C:/VLED/System/Runtime. These are installed as part of the VLED environment.Plugins/VLEDUnrealPlugin/ folder and let the editor rebuild it (a C++ project is required).The plugin contains C++, so the target project must be a C++ project (or be converted to one — adding any C++ class in the editor does this).
VLEDUnrealPlugin folder into your project's Plugins/ folder: <YourProject>/Plugins/VLEDUnrealPlugin/..uproject → Generate Visual Studio project files, then build the <YourProject>Editor target.)Binary (no-compile) deploy: if you already have a built UnrealEditor-UnrealVledPlugin.dll, you can drop the plugin's Binaries/Win64 and Source folders into a Blueprint-only project on the same engine version and it will load without compiling.
Only what's inside the volume is sent to the display.
The plugin sends voxels straight to the VX2 hardware via ledhost.dll and opens the LedWin simulator window. On Play, a background thread opens the window, spins the motor, and streams voxels.
The runtime is located at the default path (C:/VLED/System/Runtime) automatically, so there's normally nothing to set. If your runtime lives elsewhere, point LedHostDllDir at the folder containing ledhost.dll, LedWin.dll and ledhost.ini.
The simulator window lets you orbit (left-drag) and zoom (mouse wheel) to inspect the volumetric output. All other settings are configured in the actor's Details panel.
Press Play. Capture begins immediately (unless bCapturing is off).
Performance tips for a single-GPU machine:
Editor preview: flip bPreviewInEditor on the actor to stream to the display in edit mode (no Play needed). The plugin hands ledhost back cleanly when you press Play and resumes when PIE ends.
Everything below works during Play (and during editor preview when bPreviewInEditor is on).
The volume is positioned by moving and scaling the actor itself — there are no runtime keyboard or SpaceMouse controls.
| Method | How |
|---|---|
| Move the actor | Select the actor in the editor, press W, drag. |
| Scale the actor | Press R, drag to zoom: shrink = subject fills the display; grow = capture more of the scene. |
| FollowTarget | Set the actor's FollowTarget to your player / pawn so the volume tracks it every tick. Use FollowOffset to raise it and FollowBoneName to track a specific animated bone. |
The LedWin simulator window (Direct Display) shows a software render of the volumetric output. Two mouse interactions work in the window:
| Input | Action |
|---|---|
| Left-drag | Orbit — rotate the viewing angle around the volume. |
| Mouse wheel | Zoom — move the virtual camera closer or further from the volume. |
There is no menu bar, no sliders panel and no keyboard navigation in the simulator window. All settings are configured in the actor's Details panel.
The capture volume is drawn (editor only — never in the VX2 output) as:
The whole gizmo tracks the actor's position and scale, and reshapes when you switch format, so it always shows exactly what is being captured.
All settings live in the actor's Details panel. Changes during Play apply immediately, and settings are persisted automatically to Saved/VLEDConfig.json.
| Property | Default | Description |
|---|---|---|
Format | VX2 | VX2 = 256 px faces, 2 m cube. VX2-XL = 512 px faces, 4×2 m box. Applies live (rebuilds GPU buffers). |
bCapturing | true | Uncheck to pause the feed without stopping Play. |
bPreviewInEditor | false | Run the capture pipeline in edit mode (transient — off on level load). |
bDisableViewportRendering | false | Fully blank the main game viewport during Play to free the GPU. Restored on EndPlay. |
| Property | Default | Description |
|---|---|---|
CaptureResolution | Medium | Per-face capture resolution: Low / Medium / High = VX2 128/256/512 px, VX2-XL 256/512/1024 px. Applies live. |
CaptureTiltDegrees | 30° | Pitch the 4 side cameras down so they catch the ground under the subject. 0 = flat. |
bAntiMoire | false | Offset each capture camera's rotation slightly to break up moire/grid patterns in the voxel output. |
AntiMoireDegrees | 0.3° | Magnitude of the per-face anti-moire rotation offset. Only active when bAntiMoire is on. |
MaxCaptureHz | 30 | Max capture rate (fps). 0 = full tick rate (wasteful). |
bDisableHairRayTracing | true | Force r.HairStrands.Raytracing 0 on Play (avoids a GPU hang with MetaHuman hair). |
| Property | Default | Description |
|---|---|---|
FollowTarget | none | Actor to track during Play; the volume follows its location + FollowOffset. |
FollowOffset | (0,0,100) | World offset added on top of the follow target's location (default 1 m up). |
FollowBoneName | None | Bone or socket on the target's skeletal mesh to track. Useful for animated characters whose actor root stays static. |
| Property | Default | Description |
|---|---|---|
Exposure | 1.0 | Manual exposure multiplier applied before the ACES tonemap. 1.0 = neutral. Reduce a lot for bright/outdoor scenes. |
bAutoExposure | true | Meter the captured HDR each frame and adapt exposure automatically. When on, Exposure acts as an EV compensation. |
AutoExposureSpeed | 3.0 | How quickly auto-exposure adapts (stops/sec). |
AutoExposureCompensation | 0.0 | EV stops applied on top of auto-exposure (0 = neutral). Only active when bAutoExposure is on. |
Gamma | 1.0 | Brightness curve applied by the VX2 (lower = brighter midtones). |
Sharpness | 128 | VX2 dither threshold — higher = sharper point voxels, lower = smoother. |
VoxelBudgetMillions | 0.5 | Max voxels (millions). The scene is thinned evenly when it exceeds this count. |
bBoostX / bBoostY / bBoostZ | false | Duplicate each voxel along X/Y/Z by a short offset to brighten the image. |
BoostDistanceMm | 0.0 | Boost duplicate offset distance in mm. |
Each face is one orthographic camera. Disabled faces are skipped entirely (no capture/readback) — cheaper, but that side isn't seen. Each face is a full scene render, so enable more for more complete coverage at higher GPU cost.
| Property | Default | Face |
|---|---|---|
bEnableFace_PX | on | +X (right) |
bEnableFace_PY | on | +Y (front) |
bEnableFace_MX | off | −X (left) |
bEnableFace_MY | off | −Y (back) |
bEnableFace_Top | on | +Z (top) |
bEnableFace_Bottom | off | −Z (bottom) |
| Property | Default | Description |
|---|---|---|
LedHostDllDir | C:/VLED/System/Runtime | Folder containing ledhost.dll, LedWin.dll and ledhost.ini. Defaults to the standard runtime path, so you don't normally need to change it. |
| Property | Description |
|---|---|
bSimulatorBorder | Draw the VLED border in the LedWin simulator window. |
bShowSimStats | Overlay VPS + per-volume render time (ms) on the LedWin window, coloured green/yellow/red vs the 30 VPS target. |
bDebugShowFrame | Update DebugFrameRT each tick with the packed frame (apply to a plane material to inspect). |
bDebugSaveSingleFrame | Save one packed frame as a BMP to Saved/VoxelStudioDebug/frame.bmp. Resets automatically. |
bDebugTimingLog | Print a per-section timing breakdown to the viewport every 60 frames. |
Packaging works exactly like any standard Unreal project:
<Game>.exe plus supporting files.The VLED plugin is a runtime module, so it's included in packaged builds automatically — there's no extra step to enable it for packaging.
On the end-user's machine: to drive the hardware, the packaged game needs the native Voxel VLED runtime, which is installed as part of the VLED environment (along with the VX2 device driver and firmware). On a machine with no Voxel hardware or runtime, the game still runs normally — volumetric output is simply disabled, with no crash. Settings are saved to the game's Saved folder, so everything works even if the game is installed to a read-only location.
Explore the VX2 and VX2-XL, try the live simulator, or talk to us about your use case.