← Learn library

Houdini & Procedural Workflows / Houdini

How to make a 3D Tree | Houdini Tutorial

Channel: CGI Nerd ·

Written guide

Original CGI Nerd video thumbnail
How to make a 3D Tree | 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

This lesson constructs a stylized tree from nested copies: twigs attach to a branch, the branch assembly attaches to a trunk, and leaves attach to selected points on the twig geometry. Lines establish the underlying paths, PolyWire gives them thickness, and point groups control where new growth appears.

The demonstration uses Houdini’s historical Copy Stamp workflow. The exact software release is not identified. It produces a colored procedural model, without demonstrating realistic bark and leaf shaders, botanical accuracy, export optimization or a modern attribute-based replacement for stamping.

Keep the trunk rooted while adding irregularity

During 00:00–05:03, create a geometry object and replace its initial File node with a Line. Add Point Jitter to make the trunk less straight. A two-point line has little shape to vary, so increase its point count and reduce the jitter scale to obtain a manageable curve.

The first jitter also moves the base away from the origin. Insert Group by Range, set its entity type to points, and exclude the first point while retaining the later points. Display point numbers to distinguish the beginning from the end of the line, then apply Point Jitter only to this group.

The base now remains in place while the rest of the line changes. This matters later because copied geometry is positioned from its source origin. A drifting base would make branches or twigs appear detached even if the destination points were correct.

Add PolyWire to give the line a trunk surface. Increasing its radial divisions makes the cross-section rounder. Path-point count, jitter strength and PolyWire divisions affect different properties: silhouette, irregularity and cross-sectional smoothness respectively.

Resample the path before choosing branch locations

At 05:03–09:01, add Resample after the jittered line. This supplies more points along the existing path without simply increasing the number of independently jittered source points. The source uses the resulting denser path as the basis for branch placement.

Create another Group by Range after Resample. It should select the points where branches will begin, leaving a bare lower section of trunk. Its position in the network is consequential: grouping before resampling would refer to a different point distribution.

Duplicate the basic line-and-PolyWire construction for a branch source. Make it thinner and shorter relative to the trunk, and change its jitter seed so it does not simply repeat the trunk’s exact shape. Keep its attachment end at the origin.

The group that protects the source base from jitter and the group that chooses branch destinations have different jobs. Give them distinct names so the Copy node receives the destination group rather than the trunk-jitter group.

Copy branches to a sparse point group and vary their direction

During 09:01–14:02, Copy Stamp receives the branch as source geometry and the resampled trunk line as its template-point input. Set its template group to the branch group. The initial group is accidentally a primitive group; switching it to points makes it available for the intended filtering.

Adjust the group start to lift the first branch higher, and use a range pattern such as one point out of every four to reduce the number of branches. Merge the copied branches with the trunk surface to inspect the complete silhouette.

The source disables Transform Cumulative and rotates the branch out from the trunk. At first all branches face the same side. In the Copy node’s Y rotation, use a random value seeded by the template point number, $PT, then remap its zero-to-one output with fit01 into a zero-to-360-degree range.

This gives each selected destination point a repeatable orientation rather than one shared rotation. Changing the seed expression changes the arrangement. Changing the point distribution can also change the point numbers on which those choices depend, so the silhouette is tied to both the groups and the seed.

The transcript explains the functions and inputs but is not a complete code listing. Preserve the exact expression syntax used in the recorded parameter field when recreating it.

Assemble twigs inside the branch before copying the branch

At 14:02–18:05, duplicate the source construction again for a thinner twig. Create a twig-destination point group on the branch path and use another Copy Stamp to place the twig source onto those points. As before, the group must be points, the template group must be selected, and the source needs an outward rotation.

Reuse the point-seeded rotation idea to vary the twig directions. Then merge the twig copies with their parent branch before that branch assembly is copied onto the trunk. Finally, merge the resulting branch assemblies with the trunk.

This ordering creates the hierarchy. Copying bare branches onto the trunk and keeping a separate twig assembly elsewhere would not automatically attach those twigs to every branch. Display the branch-level merge first to verify that it contains the intended subassembly, then inspect the tree-level result.

The instructor notes that another level of smaller twigs could be added using the same approach, but proceeds directly to leaves. Additional branching levels are an option, not part of the demonstrated final model.

Attach modeled leaves to selected surface points

During 18:05–26:04, shape a small Grid into a leaf by editing its points. Keep the leaf’s attachment end at the origin so copying places the base rather than the middle on the tree. Add green point color. An alpha-textured plane is mentioned as an alternative, but this lesson models the leaf geometry instead.

For leaf placement, the instructor chooses points on the twig’s generated geometry rather than only its sparse centerline, obtaining more potential destinations. A point group defined by a bounding region selects the desired upper area. Name it and set the leaf Copy Stamp node’s template group to that group.

Reduce the copied leaf scale and inspect the selected region. If leaves cover too much of the twig, adjust the group boundary rather than shrinking every leaf in an attempt to hide incorrect placement.

Randomize rotation with the same point-number-based approach. The first expression makes the result disappear because rand was entered with an uppercase initial letter; changing it to lowercase fixes the expression. This is a syntax failure, not a reason to alter the geometry or copy count.

Add a small orientation adjustment, merge the leaves into their parent assembly, and inspect the whole tree. The demonstrated colors help distinguish leaves from branches, but they are not finished shading.

Stamp branch length upstream and enable the stamp input

At 26:04–30:07, the initial tree looks rather spherical because its branches have similar lengths. The instructor introduces a stamp variable on the branch-copy node, gives it a random value based on $PT, and references that variable from the source branch Line’s Length parameter.

The reference needs three matching pieces: the relative path to the controlling Copy node, the stamp-variable name, and a numeric fallback for when no stamped value is supplied. The source captions alternate between abbreviations resembling BR and BL. Use the actual variable name in the Copy node consistently; these should not be treated as two distinct required variables.

The first setup does not vary the tree because stamping is not enabled. Turn on Stamp Inputs in the controlling Copy node, then inspect the copied branch lengths. Defining a variable and writing a stamp reference are insufficient if the copy operation never supplies that per-copy value.

The source also changes the seed multiplier to explore different arrangements. This controls variation, not a guarantee of botanical plausibility. The fallback value and full node path are not reliably narrated, so this guide does not supply an invented paste-ready stamp expression.

Refine density while keeping the assembly understandable

During 30:07–32:17, add brown color to trunk and branch geometry, leaving leaves green. Adjust the twig group’s range to increase the number of twigs; selecting every point produces a fuller tree than a sparse interval.

Revisit the model at three scales. The trunk should stay rooted, each branch assembly should contain its twigs and leaves, and the complete silhouette should have the desired density and length variation. If a change produces too much geometry, inspect the group interval at the relevant level rather than changing all copy stages together.

The final result demonstrates a reusable nested construction method. It does not include a tree-species model, production materials, wind deformation or a verified migration away from Copy Stamp. Those would require additional work beyond the source.