Houdini 20.5 Feathers

Feather rendering

On this page

You put a lot of work in the creation of realistic feathers and a sophisticated groom and now you want to render your masterpiece. Houdini’s feather system is tightly connected to Solaris and the Karma CPU and XPU render engines. The centerpiece of the rendering workflow is the Houdini Procedural: Feather LOP. Houdini Procedurals are a renderer-agnostic mechanism to create or modify primitives on the stage at render time.

The procedural is perfectly suited for animation and complete grooms, but sometimes you want to render stills or just a few individual feathers. In this case you should import an uncondensed version of your feather to Solaris and do the rendering without the Houdini Procedural: Feather.

Tip

Before you start to create your render network, we recommend changing Houdini’s desktop. From the main menu bar, open the first dropdown menu (set to Build by default) and choose Solaris or Solaris LookDev. It’s important to have access to the Scene Graph tree, where you can see the scene’s primitives and their hierarchy.

Component Builder

The Component Builder is the centerpiece of the following LOP network. You can, of course, use a different setup, but the Component Builder is a very user-friendly, powerful and convenient tool. You can find the tool when you hover the mouse over the network editor and press ⇥ Tab to open the tab menu. From there, choose Component Builder. The tool creates a network with four nodes, but you also need a couple of other nodes to bring the procedural to life.

The Component Builder establishes a certain hierarchy in the Scene Graph Tree. If you're working with the Solaris desktop, you can find the tree in the UI’s lower left corner. We recommend using the Component Builder’s default hierarchy and names, because they play an important role when you connect groom and Component Builder.

Note

The material-related nodes of the Component Builder are not important for the following considerations and explained in a separate section at the end of this page.

The screenshot shows the network’s relevant nodes. The red operators are the Component Builder’s original nodes. The blue nodes are the ones you have to add to make the setup work.

Click the image to zoom.
  1. The Component Geometry LOP From the Source menu, choose External SOP Network, because you need data from a SOP network here.

  2. The Default/Render parameter must point to path to the RENDER_GROOM from the render setup. To get it, click the button and navigate to the null. Click Accept to confirm your choice. You’ll now see an /ASSET/geo/groom entry. groom is the name you've defined through a Name SOP in the render setup.

Creating a primitive

The idea behind this step might not be immediately obvious, because it basically creates a copy of the already existing curves. However, this copy will only provide the most basic attributes that are required by the procedural. So, you’ll get a more resource-friendly version.

  1. Add a Primitive LOP and place it between Component Geometry and Component Material LOP to connect it.

  2. Go to Primitive Path and enter ASSET/geo/procdural. The new primitive will also appear in the Scene Graph tree.

  3. From the Primitive Type dropdown menu, choose BasicCurves.

Rest and animated states

On the procedural you can see Deformer Rest and Deformer Anim parameters. You might remember that you've already created RENDER_DEFORMER_RESTand RENDER_DEFORMER_ANIMATION SOP network branches in the render setup network and now they're required.

  1. Add a SOP Import LOP node and place it between the primitive and procedural LOPs to connect it.

  2. On the first node’s SOP Path, click the button and navigate to the RENDER_DEFORMER_REST null. Click Accept.

  3. From the Sublayer Style dropdown menu, choose Copy SOP Layer Into New Active Layer for improving performance.

  4. Import Path Prefix adds the node’s imported data to the correct branch of the Scene Graph Tree. If you didn’t change the Component Builder’s default paths, the entry is ASSET/geo.

  5. Another performance toggle is located in the Primitive Definition. There, turn on the two toggles for Define Only Leaf Primitives.

  6. Finally, turn on Kind Authoring and choose None from the dropdown menu.

Use ⌃ Ctrl + C and ⌃ Ctrl + V to copy and paste the SOP Import LOP. Connect it downstream of the original importer. The only change you have to make concerns SOP Path. Again, click the button, but this time choose and accept the RENDER_DEFORMER_ANIMATION null.

You can see that the two states are now part of the Scene Graph Tree.

Feather procedural

The Houdini Procedural: Feather also requires some preparation. It’s the node where everything comes together. You can drag the entries from the Scene Graph Tree to the procedural’s parameters or enter the paths manually.

  1. Lay down a Houdini Procedural: Feather LOP and place it between the last SOP Import and Component Material LOPs to connect it.

  2. For Procedural Prim, enter ASSET/geo/procedural

  3. The Groom Rest path is /ASSET/geo/groom. This path should also be familiar to you, because you've created it on the Component Geometry LOP already.

  4. Set Deformer Rest to /ASSET/geo/deformer_rest.

  5. Finally, define the Deformer Anim state by adding /ASSET/geo/deformer_anim.

  6. To get motion blur, turn on Transfer Velocity to read out the v and w attributes from the feather surfaces.

When you look at the Scene Graph tree, you can that the procedural entry has changed.

Referencing

It’s not mandatory to turn the output from the Component Output LOP into a reference, but it’s a common process. In this setup, an Asset Reference LOP collects the relevant scene elements, and creates a new and clearly arranged tree structure.

  1. Add an Asset Reference LOP and connect its second (!) input with the output of the Component Output LOP.

  2. For Destination Primitive, enter /world/toucan or any other custom path. However, /world is an established prefix in the USD world. Note that additional elements, such as lights and cameras, should also live under /world.

Final steps

Right now, all three SOP streams (groom, rest, animation) are still visible and falsify the result. In the viewport you can see that the feathers differ from what you have in the SOP network. Therefore it’s necessary to delete the SOP streams to keep only the output of the Houdini Procedural: Feather.

  1. Lay down a Configure Primitive LOP and connect its input with the output of the Asset Reference LOP.

  2. The Primitives parameter must contain all geometry primitives that were created by the SOP network. Note that you must use the new reference paths. You can also use wildcards like * to catch primitives with a common prefix or suffix. The entry for this example setup is

    /world/bird/geo/deformer_* /world/bird/geo/groom

  • Turn on the Visibility toggle and choose Invisible from the dropdown menu to hide the objects.

  1. Finally, add a Houdini Preview Procedurals LOP to show only the render-time feathers in the viewport. Connect its input with the output with the output of the Configure Primitive LOP.

Material

A basic material is necessary to see the feathers and first of all you need a shader. Shaders strongly depend on personal preferences or production requirements. Therefore, you’ll only learn how to connect a shader. You can read more about building shaders in the Karma User Guide.

  1. Double-click the Material Library LOP to dive inside. There, open the tab menu and choose the Karma Material Builder tool. Rename the node to feather

  2. Also double-click the new feather node to dive inside.

  3. Put down a Karma Hair VOP or Karma Fur VOP and connect the shader’s surface output to the surface input of the Subnet Output VOP.

  4. Make your adjustments and load textures through a MtlX Image VOP to complete the shader. Then return to the stage level.

  5. Select the library node again and go to Material Path Prefix. Enter /ASSET/mtl/. This is the path that was created by the Component Material LOP and it’s the place where the shader should live.

Light, camera, render settings

To make things work correctly, you also need a light source and a camera, as well as render settings.

  1. Add a light source, for example an Environment Light LOP and connect its input with the output of the preview procedural. Environment lights let you load HDR textures for image-based lighting.

  2. On the viewport, use the Alt + , Alt + and Alt + combinations to rotate, pan and zoom. Once you've found a good perspective, go to the Viewport Options menu and change No Cam to New Camera.

    This action creates a new Camera LOP and connects it to the light source.

  3. Finally, open the tab menu again and choose the Karma tool. This tool adds a Karma Render Properties LOP and a USD Render OUT. Connect the first input of the render settings node to the output of the camera.

    The properties node lets you make adjustments like image resolution, motion blur or denoising. On the render node you define the frame range. Press one of the Render to … buttons to start the rendering process.

Viewport rendering

You can also render the viewport to get a preview of the final scene, e.g. for look development, and a general impression of your shaders and textures.

On the viewport’s upper right corner you can see a small dropdown with Persp as default. Open the menu and choose Karma CPU, for example to render the viewport. Any other render delegate will appear here as well. With Karma XPU it might take a while until the Optix GPU engine kicks in, because it has to compile the shaders first. Please also consider that feather rendering might require a lot of memory. Of course, you can choose any other available render delegate.

A viewport render could look as shown in the image below.

Feathers

Basic setup

Drawing and shaping

Brushing and grooming

APEX Add Groom

Simulation

Textures and rendering

Tools

Videos