VFXForge Pro User Guide

VFXForgePRO01.png 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_Channels geometry-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.json sidecar. 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 .abc or .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

  1. Drag the .abc file into the Content Browser
  2. Import Type: Geometry Cache
  3. 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
  4. 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)
  5. 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

  1. Install the free HoudiniNiagara plugin (via Fab, or GitHub sideeffects/HoudiniNiagara — no Houdini license required) → enable it under Edit > Plugins
  2. Drag the .hjson/.hbjson file into the Content Browser → creates a Houdini Point Cache asset
  3. 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/...
  4. If everything reads -1 and the Attribute Array is empty, you imported the wrong file (e.g. the metadata json) — see Troubleshooting below
  5. Create a Niagara System and set Sim Target = CPUSim (required — the Houdini Data Interface does not work under GPU simulation)
  6. Easiest path: duplicate one of the plugin's example systems and reuse it
  7. Content Browser, bottom-right Settings → check Show Plugin Content
  8. Duplicate Plugins > HoudiniNiagara Content > Particles > Systems > HoudiniEventsSimple into your project → open it and swap the Houdini Point Cache slot for the asset you just created
  9. To wire it up manually, use the modules under Plugins > HoudiniNiagara Content > Modules:
  10. Emitter Update: SpawnParticlesFromHoudiniPointCache
  11. Particle Spawn: InitHoudiniPointCache
  12. Particle Update: SampleHoudiniPointCache (inter-frame interpolation)
  13. 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