Scaling the Smoke: A Technical Autopsy of Houdini’s ML Volume Upres Workflows

Share
Scaling the Smoke: A Technical Autopsy of Houdini’s ML Volume Upres Workflows

Executive Overview

In the rapidly evolving landscape of VFX production pipelines, the promise of machine learning is rarely found in total automation; rather, it lives in the tactical acceleration of heavy procedural bottlenecks. SideFX Houdini 22.0.429 introduces a potent toolset aimed squarely at one of simulation’s most resource-heavy tasks: volumetric up-resolution.

Utilizing the newly minted ML Volume Upres nodes, technical artists can theoretically bypass the excruciating compute times of ultra-dense Pyro simulations by employing pre-trained or custom-trained ONNX models to sharpen, detail, and expand coarse spatial grids.

However, moving from marketing promise to production reality requires navigating a minefield of environment configurations, driver quirks, hardware constraints, and unexpected data behaviors. A recent technical cook log, published on Digital Garden by Alicia, details a rigorous, hands-on exploration of these ML workflows. Running on a modern Windows 11 workstation equipped with an AMD Ryzen 9 9950X, 64 GB of RAM, and an NVIDIA RTX 5070 Ti (16 GB VRAM), the experiment exposes both the raw power and the nuanced footguns hidden within Houdini’s new machine learning architecture.

The core takeaway for pipeline developers and technical directors is pragmatic: start with the pre-trained ML Volume Upres nodes, and only transition to training custom models after the data ingestion and inference pathways are thoroughly vetted. While native recipes successfully export functional ONNX models and dramatically speed up render-ready detail generation, successful deployment hinges on meticulous field selection, hardware-accelerated provider verification, and a clear-eyed understanding of what a short, four-epoch training run can actually prove.


Detailed Chronology: From Coarse Cache to Custom ONNX Export

To establish a reproducible baseline, the investigation began inside a commercial license of Houdini 22.0.429, integrated with OpenUSD 26.5. PyTorch 2.9.0+cu130 operated within a separate, recipe-managed Python environment, while hardware execution toggled between CPU, CUDA, and DirectML backends.

Phase 1: Reproducing the Pre-Trained Path

The journey started with the native sidefx::recipe::pyro::billowysmoke recipe. This built-in macro generates a complete procedural network: a Pyro source, a rasterization node, a standard Pyro solver, a file-cache node, the ml_volumeupres_2x and ml_volumeupres_3x nodes, and a finalizing PyroLook node.

Setting the solver’s voxel size to a coarse 0.15 and caching frames 1 through 12 established the low-resolution baseline.

  • Performance Metric: The initial frame took 1.54 seconds to process, with subsequent frames dropping to a swift 0.06 to 0.30 seconds. The total low-resolution cache generation consumed roughly 2.56 seconds.
  • Inference Isolation: To prevent live simulation recooks from corrupting timing metrics, a dedicated File SOP was piped directly into the cached frames for all inference tests.

When rendered side-by-side in Blender 5.2 using a shared volume shader, the results were visually striking. The low-resolution base volume lacked fine surface definition, whereas the 2× and 3× pre-trained models introduced convincing, sharp billows and surface folds without requiring a full high-resolution fluid solve.

Phase 2: CPU vs. GPU Inference Performance

Comparative benchmarking between CPU and GPU execution paths on the exact same input data yielded critical operational insights. Using the 2× and 3× pre-trained models, single sequential cook-and-write operations were recorded:

  • Pre-trained 2× Model: Automatic provider setting completed in 2.582s, CPU execution finished in 1.104s, and DirectML accelerated the pass down to 0.638s.
  • Pre-trained 3× Model: Automatic provider setting registered 2.155s, CPU compute ballooned to 12.943s, and DirectML kept performance snappy at 1.990s.

These figures underscore the importance of explicitly declaring compute backends. Selecting "Automatic" in the node parameters does not guarantee optimal hardware routing; in certain scenarios, explicit declarations like DirectML on Windows yield predictable, rapid throughput.

Phase 3: The Field-Resolution Trap

One of the most insidious pitfalls discovered during the experiment was the "field-resolution trap." By default, the ML Volume Upres node targets @name=density. Consequently, while the density field successfully scales down to a finer voxel size (e.g., 0.075 for the 2× model), companion fields—such as temperature and velocity—remain locked at their original, coarser resolutions.

Merely observing a detailed density output creates a false sense of security. If downstream shading or motion blur relies on accurate velocity or temperature alignment, spatial mismatches will introduce rendering artifacts.

To combat this, the investigation tested enabling Naive Upsample Other Fields paired with primitive-group expressions:

Houdini ML Volume Upres for Pyro: Pretrained Models and a Real Training Run
@name=temperature @name=vel

While this successfully upsampled temperature to match the density grid, the velocity field stubbornly retained its coarser scale. The operation scales existing grids rather than forcing every field onto a unified density transform. Technical artists must explicitly verify voxel transforms rather than trusting checked UI parameters.

Phase 4: Executing a Deliberately Small Training Run

Moving beyond pre-trained weights, the native ML Train Volume Upres recipe was put to the test. High-resolution reference frames were cached at a 0.075 voxel size, feeding frames 8 through 12 into the training subnet.

Configured with a scale factor of 2, 2 tiles per frame, a tile size of 48 with 6 pixels of input padding, and a batch size of 1, the pipeline underwent a deliberate short-run training schedule: two partial cooks of two epochs each (four epochs total) utilizing CUDA.

  • Training Overhead: The initial end-to-end cook—including the automated creation and population of the isolated Python environment—took 226.7 seconds. A subsequent partial cook resuming from the checkpoint completed in just 22.2 seconds (though this measurement reflects task orchestration rather than pure GPU training kernel duration).
  • Artifact Generation: The process successfully compiled an ONNX graph measuring 20,304 bytes, accompanied by 210,816 bytes of external tensor data (.onnx.data).

When this custom-trained model was loaded back into the ML Volume Upres node, it processed the low-resolution cache flawlessly, producing a valid density volume at a 0.075 voxel size in roughly 0.517 seconds via DirectML, completely free of node errors or warnings.


Supporting Context & Metrics

To contextualize these findings, it is essential to examine the hardware footprint, data scaling behavior, and architectural limitations observed during the tests.

Metric / Parameter Low-Resolution Base Pre-trained 2× (DirectML) Pre-trained 3× (DirectML) Custom Trained (2×)
Voxel Size 0.15 0.075 0.05 0.075
Active Grid Dimensions 33 × 17 × 32 68 × 36 × 64 102 × 54 × 96 68 × 36 × 64
Compressed Cache Size 97,957 bytes 412,887 bytes 1,164,333 bytes ~410,000 bytes
Inference Cook Time N/A (Source Cache) 0.638 s 1.990 s 0.517 s
Hardware Environment Ryzen 9 9950X / RTX 5070 Ti (16GB VRAM) Windows 11 / OpenUSD 26.5 / PyTorch 2.9.0

What the Training Run Does Not Establish

It is vital to temper enthusiasm with analytical rigor. A four-epoch training run across a mere ten source tiles is strictly a functional smoke test. It successfully proves that the pipeline can ingest high-res caches, execute native CUDA training, serialize checkpoints, export valid ONNX graphs, and perform subsequent inference.

However, it does not establish that a hastily trained custom model outperforms SideFX’s factory-shipped weights. Nor does it prove generalizability across diverse phenomena such as roaring fire, heavy mist, wind vectors, or complex collision interactions. Furthermore, the model cannot be labeled as "converged"—it is simply a verified technical loop.


Official Statements and Pipeline Implications

SideFX’s official documentation establishes clear boundaries regarding license eligibility and software architecture. Crucially, while the ML Volume Upres node operates entirely within the Geometry (SOP) context, SideFX mandates DOP-level permissions for execution. Supported commercial and non-commercial license tiers include FX, Apprentice, Indie, and Education; notably, Houdini Core is strictly excluded from accessing these machine learning tools.

Furthermore, studio pipeline architects must evaluate how these nodes fit into broader USD and multi-app workflows. As noted in parallel pipeline investigations into ComfyUI 3D workflows and OpenUSD stage assemblies, volume up-resolution is an isolated optimization step, not a silver bullet. It does not replace image-to-mesh converters, nor does it guarantee that a coarse simulation possesses the true physical momentum and vorticity of an authentic high-resolution fluid solve.

Artists must still art-direct sources, manage particle dynamics, and carefully tune lighting. A sharper cache is merely the final polish on a well-orchestrated simulation foundation.


Future Outlook & Production Recommendations

As visual effects studios increasingly adopt localized machine learning inference to trim render farm costs and iterate faster, tools like Houdini’s ML Volume Upres represent the future of procedural artistry. Yet, transitioning these features from experimental sandboxes to production shots demands a disciplined methodology:

  1. Lock the Simulation First: Never rely on machine learning to fix fundamentally broken motion or poor emitter behavior. If the underlying coarse simulation lacks artistic intent, up-scaling it only yields higher-resolution garbage.
  2. Audit Your Fields: Always verify companion fields. Implement explicit expressions for temperature and velocity upsampling, and check resulting voxel transforms rather than trusting interface checkboxes.
  3. Benchmark Hardware Providers: Do not rely on "Automatic" hardware routing. Explicitly test CPU, CUDA, and DirectML backends to identify the optimal processing path for your specific local workstation architecture.
  4. Rigorous Quality Control: Before greenlighting a custom-trained model for a hero shot, hold out test frames, compare the ML output against both pre-trained baselines and genuine high-resolution solves, check temporal stability across frames, and inspect the volume under final production lighting and shaders.

By treating machine learning upres nodes as highly specialized sharpening filters rather than magical simulation solvers, technical directors can successfully harness their speed while maintaining the uncompromising visual fidelity modern filmmaking demands.

Did you find this story helpful?

Share it with your friends and colleagues on social media.

Share