Houdini 13.0 Nodes

interface version 1

An enhanced version of the original TimeBlend operator.

This operator is an enhanced version of the TimeBlend SOP, with emphasis on accurate particle evaluation for arbitrary sub-frames.

It supports the following additional features:

  • Support for sub-frame samples: some file formats like Alembic can support multiple geometry samples per frame. This SOP can properly utilize more than one samples per frame.

  • Pure velocity-based interpolation: current point positions are calculated using only their velocity vectors (e.g. particles without id attribute, or other simulated/generated geometry.)

  • Extrapolation of dying particles: motion of particles at the end of their lifespan will be extrapolated using their velocity vectors.

  • Deletion of "future" or not-yet-born particles: if particles have their accurate birth time stored, particles with birth times larger than the current time can be deleted. This is useful to get rid of 'emission popping' when retiming particle simulations. (See Trail Scatter qL node Birth Time related settings.)

Tip

When dealing with cached geometry (Cache or File SOP, etc.), be aware that the $F variable is rounded (it will be rounded up to the next frame for subframe 0.5 and higher).

To get the nearest whole frame number use an expression like floor($FF).

Note

Using Trail Scatter qL-based emission together with the death/birth extrapolation options on this node, particle simulations can be retimed to any degree without artifacts (and without the use of simulation oversampling).

The retiming features rely on a few extra per-point particle attributes (called birthtime, relbirthtime by default). Make sure the emitted particles inherit these attributes when generating them using SOPs.

See the example scene(s) for the Trail Scatter SOP for various techniques.

Parameters

Sample Slice Size

The step between each frame sample in the incoming geometry. The slice size can be calculated using the formula 1 / <no. of samples per frame> .

E.g.: the value for 20 samples per frame is 1 / 20 == 0.05.

This can be useful for file formats that can store multiple samples for each frame (e.g. Alembic).

Do not adjust this value for regular File or Cache sequences.

Toggle 'Integer Frames'

A convenience button that toggles the Global Animation Options -> Playback / Integer Frame Values switch.

Time Blend

See the original TimeBlend SOP help for the parameter descriptions. Additional parameters follow.

Interpolate Using Velocity

Use per-point velocity vector attributes to perform position interpolation.

This can be useful if the number of points change between frames and no id attribute present but velocities are available (e.g. particle fluid simulated with 'Reseed Particles').

Using this option implicitly enables extrapolation of dying particles (see below).

Note

This mode will not interpolate other attributes (colors, normals, etc.) See the related example file for a possible method of interpolating any attribute using a (simple and efficient) CHOP network.

Velocity Attribute

The vector attribute to be used for all velocity-based interpolations (including the extrapolation of dying particles, see below).

Velocity Scale

A constant scaling applied to velocity vectors.

Particles

This tab contains all settings related to subframe-accurate particle interpolation.

Tip

To see the results of the various subframe-accurate features, disable “Integer Frame Values” in the Global Animation Options.

For any age-based particle attribute mapping (e.g. color-by-age, etc.) it’s highly recommended to do it after the adjustments made by this node.

Current Time, Current Frame, FPS

These values are used for all the internal time- and subframe-related operations. They can be overridden here in case of an advanced scenario, but usually there’s no need to change them.

Subframe-Accurate Age

If enabled, per-point age attribute of particles will always be set to have exact values that are accurate at any given sub-frame.

Adjust Age by (relbirthtime)

All per-point age attributes will be adjusted with another per-point attribute representing the sub-frame the particle was born (called relbirthtime by default).

This is necessary to have particle birth times distributed on the sub-frame level (instead of all particle popping into existence at the beginning of a frame).

Delete Unborn/Dead Particles

A particle post-processing feature that eliminates the visual artifact of particle chunks “popping in and out of existence” for retimed (e.g. slo-mo) points. (A birthtime per-point attribute is required.)

This option deletes all particles that are “not born yet” (when the birthtime attribute is larger than the current time) or “should be dead” (when the – adjusted – age attribute exceeds the life span).

  1. “Not born yet”

    Since birthtime values are distributed throughout the duration of a frame (in the range [$F..$F+1]), this has the result of particles “belonging to the future”, which should be deleted until the appropriate time (or sub-frame) is reached.

  2. “Should be dead”

    After the particle ages adjusted for sub-frame accuracy (see features above), some particles might reach or exceed their lifespan limit. These particles will be deleted as well.

This option will have its effect when blending between timesteps: instead of particles popping into existence in chunks, it will look as if particles appear gradually.

Birth Time Attrib

The per-point attribute that stores subframe-exact particle birth times.

Interpolate Dying Particles

Positions of particles not present in the following geometry sample (ie. on the next frame) will be extrapolated along their velocity vectors.

Add Near-Death Attribute

Adds an attribute (float) that stores the phase of the velocity extrapolation for dying particles.

(In other words, it can be used to determine how close is a dying particle to actual death.)

Tip

This can be useful for fadeout-like effects on heavily slo-mo'd particles.

Attribute Name

Attribute to store the near-death phase values to.

Close-to-Life Value

Particles that just started dying (i.e. will not exist in the next geometry sample) will have this value. (Non-dying particles assume this value as well.)

Close-to-Death Value

The particle will reach this value at the time of its death (at the end of its velocity-extrapolated sample).

All dying particles will have their values blended between the close-to-life and -death values accordingly.

Tip

To scale particles to non-existence, use pscale as the Near-Death Attribute, and 1.0 for near-life and 0.0 for near-death values.

(hack) Delete Larger than Life

This option will delete all particles whose age exceeded their lifespan (before any of the subframe-related age correction is applied).

It can be useful to counter a bug where particles coming from a POP solver in a DOP network sometimes “refuse” to die for a few more frames after their lifespan ran its course.

Unfortunately using this toggle can ruin the regular subframe-interpolation results. Use it with consideration.

Warning

This is a temporary hack which might get removed without warning and an iota of caring for backwards-compatibility. You have been warned.

Backwards Compatible

If enabled, the original time blending method is used. Should not be necessary to use.

Note

Please report any problems where this switch had to be enabled.

Debug

Display additional debuging-related parameters (currently the generated point-attribute interpolation code).

To Do

  • Test new interpolation code (especially w/ integers)

  • Remove temporary debug switches

Release Notes

interface version 1

2014-07-09
  • Interpolation is now performed on all (numeric) per-point attributes

  • Minor UI/descriptive parm cleanups

2013-05-25
  • Various (particle interpolation-related) bug fixes

  • Revised subframe-accurate particle deletion (should behave much better now)

  • Internal cleanups

  • Major speedup when using Interpolate Dying Particles (dying particle detection)

  • Near-Death attribute calculation is not yet updated (==buggy)

2013-05-19
  • Added convenience button for toggling “Integer Frame Values” playbar prefs

  • Help card cleanup

  • Added a switch to the earlier change as it can mess up otherwise proper subframe-accurate interpolations (called “Hack: Delete Larger than Life” – this is for POP solvers in DOP networks, where particles “refuse to die”)

2013-05-17
  • “Delete Unborn Particles” now also deletes particles with age larger than their lifespan (DOP/POP networks can create such particles)

2013-05-02
  • Parameter UI rearrangements

  • Delete Unborn Particles now also deletes “too old” ones as well (w/ lifespan exceeded)

  • Added Subframe-Accurage Age and Adjust Age by (relbirthtime) attribute (generated by Trail Scatter SOP)

2013-05-01
  • Fixed internal collision with phase geometry attribute.

  • Help card and other misc improvements.

older versions

Version 0.0.4
  • Minor UI changes

  • Optimization: should be way faster when not using Interpolate Dying Particles (needs TESTING if it works as expected)

Version 0.0.3
  • Added “Delete Unborn Particles” feature

  • UI and help cleanup

Version 0.0.2

Added “Near-Death Attribute” features.

Version 0.0.1

Initial release.