Skip to content
Rhino 3D — Modeling Rhino · 05 of 08

Terrain Creation with Grasshopper

The terrain is the foundation of the model. Everything else is split from it, placed on it, or extruded above it.

Why this matters

Site design is fundamentally about working with the ground plane. The terrain surface in your Rhino model is the spatial foundation that makes everything else — grade changes, paving areas, planting beds, water features — geometrically accurate rather than illustratively approximate. The workflow below uses Grasshopper to generate an accurate mesh from your imported contour lines, then converts it to a NURBS surface you can model with.

Before you open Grasshopper

Contour lines must be clean before the Grasshopper workflow will produce usable results. Each contour must be a single, continuous, closed or connected curve with no gaps, overlaps, or duplicate segments. Run CRVEND in Rhino to visualize open curve endpoints — every point that appears is a gap or a disconnected segment that needs to be fixed with JOIN before proceeding. Move all contour curves to a single layer before starting Grasshopper.

Grasshopper terrain workflow

Open Grasshopper: type GRASSHOPPER or go to Tools → Grasshopper. Double-click on the canvas to search for and place each component. Connect outputs to inputs by clicking and dragging between the circles on the component edges.

StepComponentWhat to do
1CurveRight-click the component → Set Multiple Curves. In Rhino, select all your contour lines. Press Enter. The curves are now referenced in Grasshopper.
2Control PointConnect the Curve output to the Control Point input. Right-click the Control Point output → Flatten. This flattens the point tree into a single list — required for the mesh to process all points together.
3Delaunay MeshConnect the flattened Control Point output to the Delaunay Mesh input. The mesh should appear as a preview overlay on your contours in Rhino.
4BakeRight-click the Delaunay Mesh component → Bake. In the bake dialog, assign it to a new layer named "Terrain Mesh." The mesh now exists as a Rhino object. Turn off the Grasshopper preview for this component to reduce visual clutter.

Converting mesh to NURBS surface

CommandSettingsWhat you're doing
REDUCEMESHReduce by 0–30%Optional. If your mesh has thousands of faces and the model feels slow, REDUCEMESH reduces face count while maintaining form. Don't reduce more than 30% or terrain detail degrades visibly. Only use this if absolutely necessary.
Create "Terrain" layerCreate a new layer named "Terrain." Make it the active layer.
DRAPE (Top view)Spacing: smaller = higher definitionIn the Top viewport, type DRAPE. Drag a rectangle over the entire terrain mesh extents. Set the spacing — a smaller number produces a denser surface that follows the mesh more accurately, at the cost of file weight. Start at your grid spacing and adjust based on results.
DUPBORDERSelect terrain meshCreates a closed curve at the outer edge of the mesh. You'll use this to trim the DRAPE surface down to the actual site boundary.
TRIMUse DUPBORDER curve as cutterTrim the DRAPE surface outside the border curve. This removes the flat extended plane beyond the terrain edge, leaving only the contoured site surface.
DeleteTerrain Mesh layer contentDelete the mesh and the border curve. The clean NURBS terrain surface on the Terrain layer is what you model from.

Try this

After DRAPE, switch to the Front viewport and examine the terrain profile. Does it match the slope you'd expect from reading the contour lines? Find the area of greatest grade change in the plan and verify that your terrain surface reflects it correctly. The terrain is the first check on whether your contour linework was accurate — a terrain that doesn't look right almost always points to a contour that wasn't clean.

What breaks

Contour lines with gaps — Grasshopper's Delaunay Mesh needs point data from curves. An open contour contributes its endpoints but drops all intermediate points along the gap segment, producing a flat or incorrect section of terrain. CRVEND before Grasshopper, every time.

DRAPE spacing too large — a large DRAPE spacing produces a surface that is flatter than the terrain mesh it was draped over. The surface connects fewer sample points and skips over grade transitions. If your terrain looks smoother than it should, reduce the spacing.

Not trimming the DRAPE surface — the DRAPE command produces a surface that extends well beyond your terrain mesh extents. If you don't trim it, SPLIT operations later will try to process the entire flat extended plane, producing unexpected results.

LA117 — Design Communication II — David Barbarash — Purdue University Terrain Creation with Grasshopper