houdini_usd_gsplatNative 3D Gaussian Splat Rendering in Houdini Solaris
An open-source native integration of 3D Gaussian Splatting into Houdini Solaris via a first-class USD schema, UsdImaging adapter, and CPU Hydra render delegate, bringing Gaussian splats into the USD scene graph as proper USD primitives with full Houdini LOP workflows.
Overview
houdini_usd_gsplat is a native open-source integration of 3D Gaussian Splatting into Houdini Solaris. Rather than treating Gaussian splats as a foreign format loaded through a workaround, this project defines splats as first-class USD primitives, complete with a custom USD schema, a UsdImaging adapter, and a Hydra render delegate that performs CPU rasterisation with EWA splatting and spherical harmonics.
The result is a proper USD-native workflow: Gaussian splat .ply captures slot into any Houdini LOP graph, compose with other USD prims, and render through the same Hydra viewport pipeline used by every other primitive type in Solaris.
GitHub: github.com/plattipus/houdini-gsplat
Why This Matters
If you have landed here from a link and don't live inside USD, here is what this does.
3D Gaussian Splatting is a way of capturing a real place from photographs and rebuilding it as something you can move a camera through. It produces images with a realism that modelling by hand does not reach, and it produces them fast. The catch has always been that splats live outside the pipeline: they arrive as a foreign format, they don't compose with the rest of a scene, and getting one into a shot means a chain of exports and workarounds that break the moment anything changes.
This project makes splats ordinary. A capture becomes a first-class USD primitive, which means it sits in the same scene graph as every other asset, obeys the same layering and composition rules, and renders through the same viewport as everything else. An artist can light it, cut a camera through it, and place built geometry inside it without leaving Solaris.
That matters because it moves photographic capture from a novelty into something a supervisor can plan a sequence around. The technology widens what is achievable in a schedule; the decisions about what to shoot, where to put the camera, and what the shot is for stay with the directors and artists making them. This is the kind of tool we build so our people can attempt more, not so the work can be handed over.
What's Included
ParticleField3DGaussianSplat: USD Schema
A new USD prim schema (ParticleField3DGaussianSplat) that encodes every per-Gaussian attribute directly in the USD scene graph:
- Position, opacity, covariance scale and rotation
- Spherical harmonic coefficients for view-dependent colour
Splats authored against this schema compose, reference, layer, and variant-switch like any other USD primitive.
UsdImaging Adapter
The UsdVolParticleFieldImaging adapter bridges the USD schema to Hydra. It reads ParticleField3DGaussianSplat prims and populates the Hydra render index so any delegate, including the native viewport, can consume them without bespoke format handling.
Hydra Render Delegate: HdParticleField
HdParticleField is a CPU rasteriser built as a Hydra delegate:
- EWA splatting: elliptical weighted average filtering for sharp, alias-free splat edges
- Spherical harmonics: view-dependent colour evaluated per-Gaussian at render time
- Depth-sorted compositing: back-to-front alpha compositing in the Hydra pipeline
PLY Import LOP
A Houdini LOP node (Ply Import) that ingests standard .ply Gaussian splat captures and writes them directly into the USD stage as ParticleField3DGaussianSplat prims. No intermediate conversion step required.
Gsplat Instancer LOP

The Gsplat Instancer LOP enables Gaussian splat instancing at the USD level: place, transform, and scatter splat captures across a scene using standard USD instancing semantics.
Uruk LOP
A specialised LOP for scene composition workflows involving splat-heavy scenes, named for the internal pipeline step that merges environment captures with hero geometry.
ply2usd CLI
A command-line tool that converts any .ply Gaussian splat file to a standalone USD file containing a ParticleField3DGaussianSplat prim. Useful for pre-processing captures outside of Houdini or integrating into existing USD pipeline tooling.
USD Architecture
The key design decision is treating each Gaussian splat capture as a USD primitive, not a viewport overlay or custom drawable. This means:
- Splats participate in USD composition: layering, referencing, variants, payload loading
- Scene assembly in Solaris works identically whether the prim is a mesh, volume, or Gaussian splat
- Downstream tools that speak USD (Karma, USD render delegates, custom Hydra delegates) can address splat prims through the standard imaging API
- Render-time data flow follows the Hydra contract: schema → imaging adapter → render index → delegate
The UsdVolParticleFieldImaging adapter name reflects the early prototyping lineage (Gaussian splats share volumetric compositing characteristics with USD volumes) and is preserved in the release for pipeline compatibility.
Requirements
| Dependency | Version |
|---|---|
| Houdini | 21.0.559 or later |
| CMake | 3.20 or later |
| Platform | macOS ARM64 (Linux RPATH wired, untested) |
License
MIT: open for production use, modification, and redistribution. Contributions welcome via the GitHub repository.
From the Lab
houdini_usd_gsplat comes out of our open research practice, where methods found in live production are published in full rather than kept in-house. The capture and pipeline work it enables runs straight into our visual effects and animation and film and commercial production projects.