Deborah R. Fowler

Houdini Height Fields

Posted Sept 24 2017 Updated April 30 2023
Overview New in H16

Height fields were introduced in H16 and are 2D volumes that make complex terrain lightweight. There are new tools for height fields (type hf in the tab menu) and much to explore.

Highly recommended resources:

Quick Examples Sample Files
In Game Unreal & Unity

Note: As of Houdini 19.0 and up, there is a SideFX Labs node that should be used instead of the older workflow.

Unreal Engine:

Unity:

Data Sources Real-World Terrain

Recommended places for data:

  • Open Topography — recommended as of April 2023
  • If you find references in forums to terrain.party and MapBox.com (including a Labs MapBox, unfortunately those are no longer available). It appeared mapbox was moving to gl/js but for now, use Open Topography (checked on 4/30/2023 Houdini 19.5.303

Cool to try:

  1. Download a map (maybe your home town) from Open Topography
  2. Create a geo node, dive inside, create a Height Field File node — read in your file.png
  3. Increase the setting on the Height Scale

Quick sample:

Notes & Tips From the Masterclass

Height fields store 2D data but are treated as a volume (i.e. height). There are no polys — don't convert unless you want them to bog down your session. They use the GL tessellation shader on the video card.

Since they are volumes, you can use volume tools with them: volume blur, re-sample, etc. They are tile-based as well. Volume Compress will reduce memory footprint (similar to how it is used for pyro). It is possible to create another matching volume and merge — e.g. height and rainfall.

Useful nodes: Height Field Visualize · Height Field Wrangle (really a volume wrangle) · HF Copy Layer

In the Collisions tab there is a Terrain Object — the Bullet solver is aware of height fields. They are a new type of primitive to work with 2D data. The teal input is for height volumes, not polygons.

Fun things to try:

  • Add geometry by projecting onto an existing terrain (height fields can't be "bent," but this provides a cave workaround) —
  • HF Layer has a third input you can use as a mask. Sinusoid noise (turn center off) can be useful for creating slopes —
    EXAMPLE FILE terrainExample.hipnc

Some interesting results from others:

Rendering Karma · Redshift · Mantra

Karma: If you use SOP Import you can check the box to have it convert on import to render

Redshift:

  • You can convert (using Convert Heightfield) — be sure to check Bake Point Colors
  • To keep your heightfields lightweight, the recommended approach in the Entagma tutorial (timestamp 15:29) — taking the images into the Redshift shader with a little COP manipulation, similar to what you do with Unreal

Mantra: No need to convert to poly.

If you are having issues with uvquickshade, you can also use a layered material.


When adding displacement, beware that the IPR render may not keep up with auto-update — use mplay render.

To create a mask attribute you can bind, use HF Copy. Use these much like grouped UVs — chained, NOT merged.