Houdini 20.0 Nodes Geometry nodes

Topo Flow geometry node

Deforms a surface to match the size, shape, and texture of a different surface.

On this page
This is an example of Topo Flow. From left to right: neutral reference scan, Topo Transfer template, Topo Flow result, target pose scan. Scan data courtesy of Industrial Pixel VFX.

Overview

Topo Flow extends the Topo Transfer retopology workflow to 4D processing of scanned geometry with texture alignment. After you create a template mesh from the neutral reference scan with Topo Transfer, use Topo Flow to capture additional poses from associated scans. The Topo Flow process uses optical flow to maintain texture alignment while deforming the template mesh to capture the shape of the pose.

The optical flow tracking is based on a set of constraint points given in the texture map as input to Topo Flow. Use the Topo Flow Sample node to create these tracking samples. These samples usually track facial markers that you apply to the subject during the scanning process.

Use the Topo Landmark node to specify additional landmarking constraints to help guide the fitting. For 4D processing, these landmarks constrain facial regions around the eyes and lips that generally don’t track well with optical flow.

This node supports constraints to specify rigid primitives and points, and constraints to maintain correspondence with additional geometry components in the same manner as they are in Topo Transfer.

Topo Flow requires a neutral pose scan mesh with a texture map and a target pose scan mesh with a texture map (see References). This data creates consistent maps for the optical flow process.

After you set up the constraints and samples, update the pose scan information and any additional landmarks for that pose to process a sequence of poses. Configure the Optical Flow parameters to adjust the results for a particular pose.

For scene files that demonstrate how Topo Flow can fit a template mesh to a series of scans for the purpose of capturing facial expressions with correct texture alignment, see the Content Library. The following is an example of a Topo Flow scan (left) and its results (right).

Scan data courtesy of Industrial Pixel VFX.

Inputs

Template Mesh

When you connect to this node’s first input, this is the template mesh geometry aligned with the reference scan data.

Template Texture Constraints

When you connect to this node’s second input, these are the sample points in the texture map used for the optical flow tracking.

Template Mesh Landmarks

If you connect to this node’s third input, these are optional points to use as reference landmarks.

Target Mesh Landmarks

If you connect to this node’s fourth input, these are optional points to use as target landmarks.

Parameters

References

Rest

Mesh

The reference scan geometry, which is usually the neutral pose scan.

Texture

The reference scan texture, which is usually the texture map applied to the neutral pose scan.

Targets

Mesh

The target pose scan geometry.

Texture

The target pose scan texture.

Constraints

Enable Geometry Constraints

Adds a constraint so secondary geometry is factored into the Topo Flow process.

Constraint Selection

The main geometry component that acts as the constraint source of the support geometry.

Auto (default)

The node automatically determines the main geometry component.

Manual

Use the Constraint Source parameter to specify the main geometry component.

Constraint Source

When Constraint Selection is set to Manual, this is the main geometry component that acts as the constraint source of the support geometry.

Landmark Attribute

The string attribute on the input that you want to contain the landmark labels.

Rigid Primitives

The template mesh primitive groups to exclude from the deformation process and instead parent into the deformation process.

Rigid Mask

When set to Mask On, this is the Point Attribute parameter on the Template Mesh that applies rigid weights to each point as a percentage between a deformed result and a parented result.

Sampling

Resolution Percentage

The percentage of the input’s original image (scan) resolution to use. Values lower than 1 decrease the image resolution.

Set this parameter to a value lower than 1 to accelerate the input image’s optical flow process and increase accuracy when there are large changes in the textures. The accuracy decreases if you use a value lower than 1 when there are small changes in the textures.

For example, if the input’s image resolution is 1024 X 1024 pixels, setting this parameter to .5 resizes the image to 512 X 512 pixels.

The default value is 1.

Alpha Cutoff

The amount of falloff from the boundaries of the UV islands in the texture map.

Higher values decrease the amount of padding around the UV island boundaries. Higher values can accelerate the optical flow process, but they can also create inaccuracies when tracking the texture flow near the island boundaries.

Lower values increase the amount of padding around the UV island boundaries and decrease the speed of the optical flow process.

The default value is 0.25.

Optical Flow

Flow Method

The optical flow method to use for texture tracking.

Farneback

This method can more accurately track larger changes in motion, but the overall results are less accurate when there is a mix of areas with large and small motion.

DIS (default)

The Dense Inverse Search (DIS) method is faster and more accurate, but has a higher tendency to overshoot.

Search Window Radius

The radius (in pixels) that limits how far the optical flow searches for the best tracking location around a particular pixel.

Lower values accelerate the optical flow process and improve accuracy for small changes between textures. Typically, lower values work best with the DIS method and higher values work best with the Farneback method.

The default value is 8.

Iterations

The number of iterations to use when aligning textures.

Increasing the number of iterations can improve the results' accuracy, but also increase the cook time. The Farneback method typically requires mutliple iterations while the DIS method should function with a single iteration.

The default value is 1.

See also

Geometry nodes