← Learn library

Houdini & Procedural Workflows / Houdini

Copying and Changing Geometry with Copy Stamp Node | Houdini Tutorial

Channel: CGI Nerd ·

Legacy TutorialWritten guide

This tutorial is part of the CGI Nerd archive. Some software features, interfaces, or workflows may have changed since it was recorded.

Original CGI Nerd video thumbnail
Copying and Changing Geometry with Copy Stamp Node | Houdini TutorialCGI Nerd · Video hosted on YouTube

Playing loads YouTube content. YouTube processes data after activation.

Watch on YouTube

If the player is blocked or unavailable, use Watch on YouTube.

Software: Houdini

Copying a procedural rock creates repetition unless something changes the source for each copy. This lesson uses a template point number to drive an existing rock asset’s variation control, then adds rotation variation. The important relationship is between a value defined on the Copy Stamp node and an upstream parameter that reads that value while each copy is evaluated.

The rock generator already exists at the start; this recording does not rebuild it. It is a historical Copy Stamp lesson with no exact Houdini build established. SideFX marks Copy with Stamp as deprecated since Houdini 19.5. Preserve that context when studying the setup; the separate Copy to Points lesson covers a different workflow.

Prepare a volume of template points

At 01:04, the instructor first considers a separate ground object, then creates the Grid inside the existing rock asset’s geometry network. Increase the grid divisions and area, then use Mountain to form an uneven terrain-like surface. PolyExtrude gives it depth, with Output Back enabled to close the volume. A null named OUT_GROUND_GEO preserves the ground result for later use.

IsoOffset converts that closed geometry into the fog volume used by Scatter. At 04:05, the Scatter count is reduced to 50. The first volume approximation is too broad, so increase the IsoOffset division sampling until it follows the geometry more closely.

This is a volume-based distribution, not a demonstration of placing every point exactly on the top surface. That distinction explains why some resulting rocks can be buried or appear to float. Inspect the source volume and its points before judging the final copied geometry.

Separate copying from variation

At 05:01, connect the rock geometry to Copy Stamp’s source input and the scattered points to its template input. The first result contains identical rocks, which confirms the copy relationship but does not yet exercise the procedural asset’s variation control. Merge the ground with the copies so placement can be judged in context.

Enable Stamp Inputs and define a variable called rockType. The narrated expression uses rand($PT) and remaps the resulting value to the asset’s zero-to-100 variation range. In normalized HScript syntax, that expression is:

fit01(rand($PT), 0, 100)

Here $PT is the template point number used as the input to the variation calculation. The expression produces a value for each template point, but merely defining it does not change an arbitrary upstream asset parameter. A reader on that parameter must retrieve it. The zero-to-100 range belongs to this existing rock control; it is not an automatic list of one hundred different mesh files.

Read the stamp value from the source asset

At 08:04, rename the copy node copyRocks, then edit the existing upstream rock-variation parameter to read rockType from it:

stamp("../copyRocks", "rockType", 0)

This normalized form follows the narrated node and variable names. The relative path only applies from the matching network location shown in the demonstration; if the reader parameter is elsewhere, its path to the Copy Stamp node must change.

The arguments have separate roles: node path, variable name and numeric fallback. The narration briefly calls the third item a string, but it is the default numeric value. SideFX’s stamp expression reference confirms that meaning. The fallback is used when the token cannot be retrieved; it is not another random seed.

After recalculation, inspect several rocks and confirm their shapes differ. If copies remain identical, check Stamp Inputs, the spelling and case of rockType, the path to copyRocks, and whether the lookup was placed on the parameter that actually changes the rock. Distinguish a delayed recook from a setup that is reading the fallback for every copy.

At 10:00, the instructor adds a small vertical adjustment before the ground output and accepts a negative 0.1 value to improve the visible placement. Some floating is acknowledged during the trial. This is an artistic offset, not a collision, ray-projection or grounding solution for every rock.

Add rotation and recognize the correlation in the example

At 11:01, add a second stamp variable for rotation and remap its point-based random value into a zero-to-360 range. An upstream Transform reads that variable through another stamp() expression. The narration initially tries to use the variable name directly, then corrects it to the lookup call.

The captions render the rotation token inconsistently as singular and plural. Use one exact spelling in both the variable definition and reader; do not copy a mismatched phonetic transcription. The same principle applies to the renamed Copy Stamp node path.

For convenience, the instructor pastes the same rotation lookup into all three rotation channels. This varies orientation between copies, but the three axes receive the same sampled value for each copy. It is not three independently randomized rotations. Separate variables are mentioned as an option but are not implemented here.

The final result is a set of differently shaped and rotated rocks distributed through the ground volume. The lesson does not demonstrate independent axis sampling, packed-instance optimization, terrain-contact correction or export. Its useful checks are narrower and concrete: copies appear on the template points, the asset’s shape control changes per copy, the rotation lookup matches its variable, and placement is judged against the visible ground rather than assumed correct from the scatter alone.