Houdini 20.0 Feathers

Rendering feather deformation

On this page

When you look at the Houdini Feather Procedural LOP’s, you can see Deformer Rest and Deformer Anim parameters. Both parameters let you generate animated/deformed feathers directly at render time.

The idea behind the deformation workflow is to create rest and animation states in addition to the groom itself. All this happens inside the groom’s SOP network. Then you can use Houdini’s Component Builder tool to import the states to Solaris and connect your feather SOP network to the Houdini Feather Procedural LOP. The procedural will trace the differences between the two states and apply them to the feathers during the render process. With the help of the procedural’s Transfer Velocity toggle you make sure that you’ll get correct motion blur.

If you have already read the Feather rendering page, you might be familiar with the usage of the Component Builder. However, this setup has a couple of significant enhancements and extensions, because now you’ll be dealing with multiple data streams, not just the groom’s geometry.

SOP: feathers

Before you can render the feathers you have to create them, of course. This happens inside a SOP network on the obj level.

The screenshot above shows a very basic groom with a feather template that is copied to the points of a Sphere SOP. All relevant nodes are displayed in red. The Attribute Wrangle SOP is in Points mode. A single line of VEX code makes sure that the points' up vector is Y to correctly align the feathers

v@up = {0,1,0};

A Copy to Point SOP finally applies the feathers to the points of the sphere. The network from the screenshot is the basis for the following considerations.

SOP: capturing

The capturing part writes the feathers' rest state to the their points. In the screenshot you can see a Feather Deform SOP.

The node’s first input expects the condensed feathers. The fourth input, however, is of particular importance. This input contains the rest state of the feathers that are converted into polygons with Feather Surface SOP. There are also two more things to consider

  • Since we're dealing with polygon surfaces here, the deformer node’s Deformer Type must be set to Surfaces.

  • The deformer’s Mode is Capture to make sure that the node stores the deformation information from the fourth input as a point attribute.

SOP: nulls

Here you can see three network branches that are terminated with Null SOPs.

Click the image to zoom.
  • GROOM contains the feathers with the rest state on the feathers' points.

  • RENDER_DEFORMER_REST contains the rest geometry of the feathers' surface polygons.

  • RENDER_DEFORMER_ANIM contains the animated surface polygons.

The nodes of the RENDER_DEFORMER_ANIM branch create the animation. The Transform SOP rotates the feather polygon surfaces around the Y axis. During their rotation, the surfaces pass through a noise field introduced by an Attribute Noise SOP to deform them.

A Trail SOP calculates the surfaces' velocities and angular velocities and writes them to appropriate v and w point attributes. The attributes are required for rendering motion blur. Below you can see a sequence from the animation and how the feathers deform.

Stage: Component Builder

To render the deformed feathers you must switch to the Solaris stage. A very good method to do this is to load the Solaris desktop from the main menu’s first dropdown menu (the default entry there is Build). The advantage with this desktop is that you have instant access to the most important UI elements of Solaris.

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 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 five nodes, but you also need a couple of new 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 relevant for the following considerations and therefore not explained. You can read more adding materials to the feathers on the Feather rendering 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 reads the GROOM from the SOP network. Note that you won’t load polygon surfaces here, but actual feathers with shafts and barbs. From the Source menu, choose External SOP Network.

  2. The Default/Render parameter contains the path to the GROOM null. 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.

Stage: Feather Procedural

The Houdini Feather Procedural also requires some preparation. The procedural’s power lies under its hood it’s the node where the threads come together.

  1. Add a Primitive LOP and place it between the Component Geometry and Component Material LOP to connect it. This node is primarily useful for setting up a quick scene graph hierarchy using a single node. Here you’ll be creating a hierarchy of curves.

  2. On the Primitives Paths field, enter ASSET/geo/procedural to add an entry to the Component Builder’s tree structure.

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

  4. Now, lay down a Houdini Feather Procedural LOP and place it between the Primitive and Component Material LOP s to connect it.

  5. For Procedural Prim, enter ASSET/geo/procedural. This is the very same path from step 2 above where you've added the Primitive LOP.

  6. 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.

When you look at the Scene Graph tree, you can see a new proc entry.

Stage: SOP Import

You can also see Deformer Rest and a Deformer Anim parameters. Both entries are now required and you might remember that you've already created RENDER_DEFORMER_RESTand RENDER_DEFORMER_ANIM SOP network branches to provide the appropriate information.

  1. Add a SOP Import LOP nodes and place it between the Primitive and Houdini Feather 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. Without going into technical details, this option improves performance.

  4. Import Path Prefix is required to add 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_ANIM null.

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

Stage: connect deformer states

Noe you have to make the Houdini Feather Procedural LOP aware of the rest and animated states.

  1. Select the procedural.

  2. For Deformer Rest, enter /ASSET/geo/deformer_rest to point the node to the rest state.

  3. The Deformer Anim path is /ASSET/geo/deformer_anim.

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

Stage: 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/feather 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.

Stage: 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 Feather Procedural.

  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/feathers/geo/deformer_* /world/feathers/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.

The image shows an enlarged section of the feathers with motion blur.

Feathers

Basic setup

Drawing and shaping

Brushing and grooming

Simulation

Textures and rendering

Tools

Videos