VFXForge Pro User Guide
An addon that exports Blender particles (point clouds / geometry-node points /
VDB volumes / mesh vertices) to Unreal Engine. Two output paths are supported.
- Alembic (.abc) — import as a Geometry Cache, for mesh rendering / motion blur
- Houdini Point Cache (.hjson / .hbjson) — import with the free HoudiniNiagara plugin and play back as real Niagara particles (position, velocity, color, age, ID, and every other channel is actually consumed)
Regular mesh export is also supported (hair curves are excluded — handled by the separate GroomForge addon).
1. Installation & Status Check
Drop the folder into scripts/addons/VFXForge_PRO and restart Blender. A
VFXForge tab appears in the 3D Viewport's N-panel.
Check the status box at the top of the panel:
- ✅ Alembic Core: Ready — good to go
- ⚠️ Alembic Core: Load Failed — the bundled library failed to load. Reinstall the addon or fully restart Blender (Reload Scripts alone may not be enough)
2. Panel Overview
Export Mode
- Mesh Mode — exports objects selected in the scene (default)
- VDB Mode — converts a VDB cache sequence on disk (smoke/fire, etc.) into particles and exports it
Target & Path Settings
- Export ... — output path. Point it at a folder and files are
auto-named
objectname_vfx.abc, etc. - Mesh Vertices as Particles (Mesh Mode only) — when on, each vertex of the selected plain mesh(es) is treated as a particle. No geometry nodes required — works for static meshes and deforming/animated meshes alike. While this is on, the ABC output becomes small particle triangles instead of the real mesh — turn it off and export separately if you need the actual mesh as abc
- VDB Cache (VDB Mode) — folder containing the VDB sequence (frame numbers are auto-detected from filenames)
- VDB Mesh (VDB Mode) — reference object used only to name the output file
- Point Spacing / Density Threshold (VDB Mode) — point density and minimum-density cutoff used when converting the density grid to points
Niagara Channels status box
Automatically checks whether the selected object (or its geometry-node evaluated output) has the channels Niagara expects (velocity/id/rotation/age/lifetime/scale/color/dynamic_param).
- 🔴 Fix & Add Missing Niagara Channels — red if anything is missing. Clicking it:
- On objects with geometry nodes → appends a helper
VFXForge_Channelsgeometry-node modifier at the end of the stack that fills the missing channels (the original data is left untouched) - On plain objects → creates the attributes directly on the data (existing data is preserved)
- ✅ Niagara Channels Synced — everything is present
- In VDB Mode this box becomes an info message instead — channels there are generated automatically from the VDB grids, so there's nothing to check on scene objects
Frame Range Settings
Start / End frame. The chosen range is written to the cache as-is.
Transform Settings
- Global Scale — default 100 (m → cm)
- Fix Axis for Unreal — enables Unreal coordinate-system correction. Turn it off to export with no axis correction at all
- Particle Size — the size of the triangle generated per particle (ABC only). If it's too small to see in the UE viewport, try bumping it to 0.05–0.1 for a quick visual check
Output Formats
- Alembic Geometry Cache (.abc) — writes an abc when enabled. If you only need Niagara particles, turn this off to save time and disk space (abc files from dense simulations can reach hundreds of MB to several GB)
- Houdini Cache — Off / hjson (text) / hbjson (binary, default and recommended)
- Use hbjson as your default. hjson is human-readable text, handy for debugging, but the files get huge (e.g. ~1.6GB at roughly 9 million samples in real testing). Always use hbjson for actual work
- Niagara Max Points — per-frame point cap (default 100,000). Points beyond the cap are uniformly decimated. 0 = unlimited. This is the key setting for keeping file size and UE memory usage reasonable on dense simulations
- Export Niagara Setup Json — writes a
name_vfx_meta.jsonsidecar. This is not something you import — it's a reference note recording frame range, fps, channel list, point counts, etc. The files you actually import into UE are.abcor.hjson/.hbjson
Alembic Niagara Attributes Stream / Visual & Shader Mapping Attributes
Toggles for which channels are included in the abc/hjson/hbjson output. The Fix button turns all of them on automatically.
| Channel | What it does |
|---|---|
| Velocity | Uses the attribute if present; otherwise computed automatically from frame-to-frame position differencing |
| Persistent ID | Identifies individual particles (tracking across frames, anti-flicker) |
| Orientation | Quaternion rotation (euler-vector attributes are converted automatically) |
| Normalized Age | 0–1 normalized from age/lifetime attributes |
| Mesh Scale | Non-uniform scale |
| Color | RGBA, shows up in UE as vertex color (Cd) |
| Dynamic Parameter | Free-form float (e.g. physics parameters) |
Export button (bottom)
The button label reflects exactly what will be written, e.g. "Export ABC + hbjson for Unreal" or "Export hbjson for Unreal". If every output format is disabled it reads "enable an output format!" and clicking it produces an error.
3. Using the Output in Unreal Engine
3-1. Geometry Cache (.abc) — for mesh rendering
- Drag the
.abcfile into the Content Browser - Import Type: Geometry Cache
- Switch Conversion to Custom and set Scale (1,1,1) / Rotation (0,0,0) — the addon already applies the coordinate/scale conversion, so using UE's default preset on top of that double-converts it
- For motion blur, set the Geometry Cache section's Motion Vectors to "Import Abc Velocities as Motion Vectors" (it defaults to Off, so you must change it)
- To use color in a material, wire up a VertexColor node and check Two Sided
3-2. Houdini Point Cache (.hjson / .hbjson) — for Niagara particles
- Install the free HoudiniNiagara plugin (via Fab, or GitHub
sideeffects/HoudiniNiagara— no Houdini license required) → enable it under Edit > Plugins - Drag the
.hjson/.hbjsonfile into the Content Browser → creates a Houdini Point Cache asset - To confirm a correct import: the Details panel's Number Of Points/Frames/Attributes should show real numbers, and the Attribute Array should be populated with P/time/id/v/Cd/...
- If everything reads -1 and the Attribute Array is empty, you imported the wrong file (e.g. the metadata json) — see Troubleshooting below
- Create a Niagara System and set Sim Target = CPUSim (required — the Houdini Data Interface does not work under GPU simulation)
- Easiest path: duplicate one of the plugin's example systems and reuse it
- Content Browser, bottom-right Settings → check Show Plugin Content
- Duplicate
Plugins > HoudiniNiagara Content > Particles > Systems > HoudiniEventsSimpleinto your project → open it and swap the Houdini Point Cache slot for the asset you just created - To wire it up manually, use the modules under
Plugins > HoudiniNiagara Content > Modules: - Emitter Update: SpawnParticlesFromHoudiniPointCache
- Particle Spawn: InitHoudiniPointCache
- Particle Update: SampleHoudiniPointCache (inter-frame interpolation)
- Short caches finish playing almost instantly — set the System's Loop Behavior to Infinite while you're checking the result
4. Troubleshooting
Color shows up as pure black or pure white - Black: UE's Alembic importer only reads face-varying color sets. VFXForge already writes color the correct way, so make sure you re-exported with the latest version of the addon - White: the color pipeline is working, but the source points simply have no color value. This can happen right after clicking Fix, which creates a default white channel — feed real color into the geometry nodes or attribute if you want something other than white
The Fix button stays red no matter how many times I click it - Make sure you've fully restarted Blender (the current version works by adding a helper modifier to geometry-node objects)
No velocity / motion blur showing up - For the abc path, you must switch Motion Vectors to "Import Abc Velocities as Motion Vectors" on import in UE (it's off by default) - If your material is Translucent, also enable Output Velocity under the Translucency section - The velocity buffer can look empty if the viewport isn't actually playing (a single static frame)
Houdini Point Cache imported, but Details shows all -1s and an empty
Attribute Array
- You imported the metadata sidecar (_meta.json) by mistake. The file you
actually want to import is .hjson or .hbjson
No particles visible in Niagara - Confirm Sim Target is CPUSim - If the particle count reads 0, it's a spawn-module wiring issue; if the count is nonzero but nothing renders, check the renderer / sprite size / camera distance - Make sure Initialize Particle's Lifetime isn't 0 (particles would die the instant they spawn)
VDB Mode gives a "Points-grid VDB is not supported" error - OpenVDB Points grids (e.g. FLIP particle caches from external tools) can't be read by Blender and aren't supported. Only fog/density VDBs (smoke, fire, etc.) work. If the particle simulation itself lives inside Blender, export it via Mesh Mode + Mesh Vertices as Particles (or geometry-node points) instead
Files are too large - Use hbjson instead of hjson - Set a per-frame cap with Niagara Max Points (default 100,000) - If you only need Niagara particles, turn off the Alembic (.abc) output to avoid generating a huge, unnecessary abc file
5. Quick Start Summary
Turning a mesh/point source into Niagara particles: 1. Select the particle source object(s) (point cloud, GN points, or a plain mesh with Mesh Vertices as Particles enabled) 2. Use the Fix button to fill in any missing channels, if needed 3. Output Formats: turn ABC off, set Houdini Cache = hbjson 4. Click Export 5. In UE, import the hbjson → wire it up with the HoudiniNiagara modules → play