Houdini 16.5 Nodes Shader nodes

Material shader builder shader node

A higher-level shader that can contain one or more sub-shaders, such as surface shaders, displacement shaders, and property shaders.

On this page


The Material node is a container for other shader types, letting you "package up" combinations of lower-level shaders (such as surface shaders and displacement shaders) with individual settings into a new "look" you can assign as a single unit.

The gallery of materials in the material palette pane are all customized examples of the Material shader. See the documentation for the gallery materials that ship with Houdini.

It is necessary for some nodes to specify the context in which they belong.

  • Global VOP provides global variable for the specified context type.

  • Output VOP provides output variables to assign for the specified context type. The material knows which shader types the network implements by inspecting the context type for the Output VOPs.

  • Parameter VOP specifies the context in which it exports the variable, if it is indeed exporting at all.

Creating and editing materials

Through Houdini’s parameter editing interface, you can promote parameters from contained shaders onto the material, letting you create a material with a custom interface, where users can manipulate some of the underlying parameters but others are kept hidden.

To...Do this

Create a new Material from scratch

In the network editor, Go to the /shop level and create a Material node, then double-click the node to go inside. Create and edit shader nodes inside the material and connect them to the special "suboutput" node.

Customize an existing material from the gallery

Click the Material Palette pane. Drag one of the materials from the gallery (on the left) into the list of shaders in the scene (on the right). Then you can edit the material’s settings, edit the shaders inside, or edit its interface.

See the material palette documentation for more information.

Promote parameters from contained shaders onto the Material node

In the material’s parameter editor, click the Gear icon and choose Edit parameter interface. Under Create parameters, click the From nodes tab, then drag parameters from shaders inside the material into the Existing parameters list to promote them.

See the parameter editing window documentation for more information.

Override a material’s settings per-object or per-primitive

See rendering properties.


Time is the motion blur shutter time for the shader execution, which is a value between 0 to 1 for shader motion blur (it’s not the same as $T). Time is initialized to 0 for micropolygon rendering, since all shading occurs at the start of the frame. To use Time for motion blur calculations, you’ll need to render with the ray tracing engine which executes shaders once for every pixel sample.


The following examples include this node.

Street Crowd Example Example for Crowd Solver dynamics node

Crowd example showing a street setup with two agent groups

The setup creates two groups of agents. The yellow agents are zombies which follow a path of the street. The blue agents are living pedestrians that wander around until they come into proximity of the zombies and then they swtich into a running state.

Triggers to change agent states are setup in the crowd_sim dopnet. The zombies group uses proximity to the stoplights and the color of the light to transition into a standing state when lights are red. The living group transition into a running state when they get close to the zombie agents.


The animation clips need to be baked out before playing the scene. This should happen automatically if example is created from Crowds shelf. Otherwise save scene file to a location of your choice and click Render on '/obj/bake_cycles' ropnet to write out the files. The default path for the files is ${HIP}/agents.

FlipColumn Example for FLIP Solver dynamics node

This example demonstrates how a mixture of fluid colours can have their colour changed by a collision with a static object.

DiffuseSmoke Example for Gas Diffuse dynamics node

This example demonstrates how to diffuse the density of a smoke simulation using the Gas Diffuse DOP.


This example simulates grass being pushed down by an RBD object. Fur Objects are used to represent the blades of grass and Wire Objects are used to simulate the motion. When a single Fur Object is used to represent the grass, neighbouring blades of grass will have similar motion. Additional objects with different stiffness values can be used to make the motion less uniform. When "Complex Mode" is enabled, two objects are used to represent the grass. The stiffness of each set of curves can be controlled by adjusting the "Angular Spring Constant" and "Linear Spring Constant" parameters on the corresponding Wire Objects.

FluidGlass Example for Particle Fluid Solver dynamics node

This example demonstrates how to get a smooth fluid stream to pour into a glass.

CurveForce Example for POP Curve Force dynamics node

This example demonstrates the use of the POP Curve Force node to control the flow of a particle sim AND a flip fluid sim.

Volume Rendering - Metaballs as Volume Example for Mantra render node

Metaball geometry can be natively rendered as a volume in mantra. Metaball rendering can be enabled by checking the Metaballs as Volume parameter on the Geometry tab of a geometry object. Any point attributes on the metaballs will be interpolated to the shading position in the same manner that point attributes are interpolated for metaball surfaces.

Here is an example using randomized point color attributes:

Controlling Shadow Quality/Performance

Shadow map generation uses the Pixel Samples and Shadow Step Size parameters (in the Mantra Render Operator) to control quality and performance in exactly the same way they are used for surfaces. Since volumes often cast soft, diffuse shadows, it is often possible to use low-resolution deep shadow maps when rendering volumes, leading to much faster render times. Shadow map Resolution can be changed on the Shadow tab of a Houdini light.

StyleDisplacement Example for Material shader node

This is an example file showing an object made up of two quads, one with a bump map, the other with true displacement. This object is duplicated, and the second copy uses a style sheet to reverse the material assignments on the two quads.

BlendAttr Example for Attribute Composite geometry node

This example demonstrates how to blend attributes using the Attribute Composite SOP.

RandomMaterial Example for Attribute String Edit geometry node

This example demonstrates how to use the Attrib String Edit SOP to modify String primitive attributes and randomize the colours on a grid on a per-primitive basis.

AlphaOmega Example for Points from Volume geometry node

This example demonstrates how to use a Points From Volume SOP to create a target goal for a flip simulation and make it fill a given piece of geometry.

UnpackWithStyle Example for Unpack geometry node

This example demonstrates the Unpack SOPs ability to evaluate style sheet information while unpacking. Nested packed primitives are used to demonstrate partial unpacking while still preserving styling information. This example also demonstrates the use of a Python SOP to extract information from the per-primitive style sheets.

Shader nodes