Houdini 20.5 Feathers

Feather simulation and animation

On this page
Image courtesy of Andriy Bilichenko.

Feathers aren’t static objects, but living entities with lots of dynamic properties. The shaft of many feather types is rigid, while the barbs are elastic, but held together through tiny hooks. Fluffy down, however, behave almost like hair and their shafts are also flexible. And, of course, you have countless transition forms.

Houdini’s feather system is capable of simulating some of the effects listed above. Anyway, it’s not possible to simulate the interactions between individual barbs that you can see with real feathers. In Houdini, the feather is simulated as a whole and the barbs follow the motion of the shaft/feather’s body. This approach creates a very realistic impression already as you can see in the video below. Adding dynamics to potentially hundreds of millions of barbs, however, is extremely challenging.

All simulation work is performed by Houdini’s versatile Vellum solver. This system lets you create believable wind, gravity and turbulence effects. Feather simulations in Houdini take a couple of steps.

Here’s a preview of the simulation network you’ll be creating. Note that all workflows, presented here, are just one method to perform simulations. Of course you can apply our own techniques and use wrangles instead of point selections.

Feathers and groom by Andriy Bilichenko

Single feather simulation

To understand the basic idea of the workflow, described above, start with a single feather. Later you will learn how to use this method with a complete feather atlas.

  1. On the obj level, press ⇥ Tab to open the tab menu. From there, add a Geometry OBJ. Double-click the node to dive inside.

  2. Open the tab menu again and choose the Feather Template entry. This tool creates a network with three nodes and draws a complete feather. The feather will be the basis for the simulation.

  3. Go to Resolution ▸ Barb Density and increase the value to 500 to get more barbs.

  4. Terminate the network stream with a Null SOP and rename it to FEATHERGEO.

Resampling and conversion

The idea is to create a low-res version of the feather to speed up the simulation. Later you’ll transfer the motion from the proxy to the high-res feather.

  1. Add a Feather Resample SOP to decrease the number of barbs for the proxy. Connect its first input with the output of the FEATHERGEO null.

  2. Turn on all three Resample toggles.

  3. For Shaft ▸ Segments, enter 12. The actual number depends on the feather’s complexity, but values between 10 and 20 should work in many cases.

  4. To turn the “skeleton” into a surface, put down a Feather Surface SOP. Connect its first input with the first output of the resample node.

  5. When you turn on the surface node’s blue Display/Render flag, you’ll see an enlarged shaft. To fix this, open the Surface section and decrease Shaft Width, e.g. to 0.005.

  6. Now, open the Output Groups tab and turn on Create Shaft Group.

    The shaft group’s points will remain static during the simulation and so you must separate them from the rest of the feather.

Tip

The Feather Surface SOP is not only interesting for simulations, but also for previewing your groom and evaluating the overall impression of the character’s feathering.

Remeshing (optional)

The remeshing process is optional. For highly detailed feathers, however, remeshing can improve your results, because you can define the simulation’s level of detail.

  1. Put down a Remesh SOP and connect its first input with the first output of the surface node. Remeshing does not only convert the surface’s quads into triangles, you can also use it to control the number of triangles.

  2. Right now, the mesh’s resolution is very coarse. To get a denser mesh, go to Element Sizing and set Target Size to 0.04. You can change this value if you need more or less resolution for the Vellum simulation.

    With smaller settings you get more polygons and more accurate simulation results. The flip side is that the simulation can take significantly longer.

The shaft

The shaft is of particular importance, because it will act like an anchor to hold the feather in place. Currently, the shaft group is a primitive group. However, for the Vellum simulation you need points. In this step you add the points to the shaft group.

Note

If you don’t need fixed points, for example if you want to simulate the motion of a single feather in the wind, you can skip this chapter.

  1. Add a Group Promote SOP and connect its input with the output of the remesh node.

  2. For Group Name and New Name, enter shaft.

    When you open the Geometry Spreadsheet pane, you can see entries with an orange label. A closer look reveals that these points now belong to group:shaft.

  3. To complete this part of the network, lay down a Group Expand SOP and connect its input with the output of the promote node. The idea behind this node is add some barb points to the shaft group. This will care for a more smoother and more realistic behavior. This node is optional, but it’s a convenient method add new points without having to change the original point selection.

  4. Use the Steps parameter to control the expansion of the shaft group. Higher values add more points to the group.

For demonstration purposes and a better impression of the points in the image, the Remesh SOP’s Target Size was decreased to 0.02.

Vellum Solver

The feather surface is simulated as a sheet of cloth. If you're not familiar with Vellum, we recommend reading the Vellum Cloth chapters for more information.

  1. From the tab menu, add a Vellum Configure Cloth tool. This helper creates a preconfigured Vellum Conatraints SOP. Connect its first input with the output of the Group Expand SOP. If you don’t need static shaft points, connect the node to the output of the Remesh SOP.

  2. If you want the shaft to be static, go to the Pin to Animation section. For Pin Points. enter shaft - the group with the shaft’s points. Otherwise proceed with the default settings.

  3. Lay down a Vellum Solver SOP. Connect its three inputs with the three outputs of the constrains node. Start with the default settings on the Solver tab. If you observe problems like instabilities or intersecting polygons, increase Substeps and Constraint Iterations. The simulation will take longer, but it’ll also be more accurate.

Forces

The solver has some built-in forces on the Forces tab, but sometimes you can’t achieve the desired effect. To create noisy turbulence, for example, double-click the solver node to dive inside. There you can see a FORCE output.

  1. Add a POP Force DOP and connect its output to the FORCE node’s input. Instead of the POP Force node you can also use a POP Wind DOP. This node combines noise and wind.

  2. On the Noise tab you’ll find a wide range of parameter to control the force. With Amplitude you can define the force’s strength.

  3. Return to the solver level.

Click the image to zoom.

Caching

Simulations should be cached to reuse them, free system resources and guarantee smooth playback. For Vellum simulations there’s a specific node that lets you store all relevant data automatically.

  1. Add a Vellum I/O SOP and connect its three input with the three outputs of the solver.

  2. If you don’t want to use the Constructed file path, consisting of Base Name and Base Folder, you can specify an Explicit path. In both cases, click the Open floating file chooser button. Then, choose the folder where you want to save the simulation data.

  3. Once you've defined path and file, go to the Caching tab and click Save to Disk. Houdini will go through the frame range you can set on the Sequence section. The node will also turn on the Load from Disk option.

Motion transfer

The last step transfers the simulation data to the high-res feather. For this process you need a total of three input sources.

  1. Add a Feather Deform SOP.

  2. To transfer the data, connect the

    • first input with the output of the Feather Template from Shape SOP to get the high-res feather

    • fourth input with the first output of the Vellum Constraints SOP to read out the surface rest position

    • fifth input with the first output of the Vellum I/O SOP for the motion data.

  3. From the transfer node’s Deformer Type dropdown, choose Surfaces.

  4. On the playbar, click the Play button to see the motion of the high-res feather.

  5. Terminate your network with a Null SOP. You should also apply a name, e.g. FEATHERGEO_SIM.

With enough resolution and appropriate settings it’s possible to achieve convincing animations with a high level of detail.

Single feather animation

It’s not always necessary to perform a complete simulation through Vellum. Sometimes you can also use procedural animation methods to quickly achieve results. The advantage with this approach is that doesn’t differ very much from the simulation method presented above. The basic workflow is the same: you create a surface from a resampled feather, add the animation, and transfer the motion back to the high-res version.

Here’s the network you're going to create. Lets assume that you have created a feather and turned it into a low-res surface already.

Click the image to zoom.
  1. The shaft should remain static and you have to separate it from the vanes. Select the Feather Surface SOP and open the Output Groups section. Turn on Create Shaft Group to create the shaft primitive group.

  2. To turn the primitive group into a points group, add a Group Promote SOP and connect its input with the first output of the surface node.

  3. For both Group Name and New Name enter shaft.

  4. Put down a Group Invert SOP and connect its input with the output of the Group Promote SOP.

    With Group Invert you select the points of the feather’s vanes. The reason why you need this node is that the Vellum solver provides a Pin Point option, where you can just add the point group you want to remain static. This approach doesn’t have such an option and you must define an explicit group for the vanes.

  5. On the invert node, set Group Name to shaft, while the New Name will be vanes.

Noise deformation

Noise is a perfect method to mimic the influence of wind. Instead of a physically correct Vellum simulation, you're going to use a “hack” to create a turbulent behavior. However, if you need gravity or combinations of different forces, Vellum is the only solution to achieve believable results.

  1. Add an Attribute Noise SOP and connect its input with the output of the invert node.

  2. On the General section, go to Group and enter vanes.

  3. For Attribute Names, replace the default Cd entry with P to modify the feather’s point positions.

  4. On the Noise Value section you can find an Amplitude parameter to control the strength of the displacement effect. Start with a value around 0.05 or less.

  5. Open the Noise Pattern section and decrease Element Size to get more structure.

  6. Finally turn on Animation and expand the section. With Pulse Duration it’s possible to control the speed of the noise displacement.

Motion transfer

This last step transfers the motion from the low-res surface to the original feather.

  1. Add a Feather Deform SOP.

  2. From the Deformer Type submenu, choose Surfaces.

  3. To transfer the data, connect the

    • first input with the output of the FEATHERGEO null to get the high-res feather

    • fourth input with the output of the Feather Surface to read out the its rest position

    • fifth input with the output of the Attribute Noise SOP for the motion data.

  4. On the playbar, click the Play button to see the motion of the high-res feather.

Groom simulation

The previous chapters describe how to simulate a single feather, but in many cases you’ll add wind or turbulence to an entire groom.

Note

If you have followed the descriptions from Single feather simulation, you can reuse this network without changes.

This setup in this example is a mixture of the basic scattering project and the simulation method described on this page. The main difference to the single feather approach is that you're working with a complete groom, where a larger amount of instanced feathers is distributed over an object. Here you’ll learn how to connect feather, groom and simulation networks.

Click the image to zoom.

The scatter groom is described here for your convenience, so you don’t have to jump to the appropriate chapter page.

  1. For the groom, add an object of your choice, e.g. a Sphere SOP.

  2. Set Uniform Scale to 0.5.

  3. Lay down a Hair Generate SOP and connect its first input with the sphere’s output.

  4. For Distribution ▸ Total Count, enter a value of 1000. This parameter control the number of feathers on the object.

  5. Go to the Unguided Hairs section and set Length to 0.25 to create longer feathers.

  6. A Guide Tangent Space SOP is required to align the feathers along the base object’s (character’s) normals. Connect the node’s first input with the hair generator’s first output.

Template interpolation

The Hair Generate SOP scatters points, indicating where the feathers appear and creates “proxies”, showing the feathers' length and orientation. A Feather Template Interpolate SOP brings feather template and scattering data together.

  1. Add a Feather Template Interpolate SOP and connect its first input with the output of the tangent space node. The fourth input is connected to the Feather Template from Shape’s output.

  2. Go to the Templates section. From the Lookup Method dropdown, choose Group. Since you're dealing with just on feather type here, you don’t have to specify a Template Group. If the feather is part of an atlas, you have to define a name like @name==body.

  3. Turn on the interpolate node’s blue Display/Render flag to see the feathers.

Connect the networks

Now you can connect the groom with the simulation network.

  1. Connect the first output of the Feather Template Interpolate SOP with the first input of the Feather Resample SOP.

That’s already everything you have to do! Even the shaft group will be promoted to points correctly and the resulting points are still pinned. You can start to simulate by clicking the Play button. Of course, it’s again possible to save the simulation through the Vellum I/O SOP.

Here’s the result of the workshop with gravity, noise and wind forces. The feathers were colored to separate them visually.

Feathers

Basic setup

Drawing and shaping

Brushing and grooming

APEX Add Groom

Simulation

Textures and rendering

Tools

Videos