Projecting a Road Curve onto a Heightfield

calendar_today

03.04.2022

label

Environment

mouse

18.5

Description

Blending a curve into a terrain to create a smooth road.

1 Introduction

In this example we are going to blend a road into a terrain. Both the road and the terrain will mutually affect each other. First, the road curve will smoothly adapt to the height of the landscape, next, the landscape merges with the flow of the road. Thus we can ensure neither the landscape appears clipped nor the road turns out too bumpy.

2 Process

A point wrangle samples height values from the heightfield to the road curve. To maintain a smooth drive, these values are blurred along the curve.

CPP
        float lift = chf('lift');

f@height = volumesample(1, 'height', v@P) + lift;
    

Next, a volume wrangle is reapplying the blurred height information from the curve back to the heightfield, but only inside a smooth mask close to the road curve.

CPP
        float width_min = chf('min_width');
float width_max = chf('max_width');
float ease = chf('roll_off');

int prim;
vector uvw;
float dist_crv = xyzdist(1, v@P, prim, uvw);
float height_crv = primuv(1, 'height', prim, uvw);
float mask = 1.0 - smooth(width_min, width_max, dist_crv, ease);

f@height = lerp(f@height, height_crv, mask);
f@mask = mask;
    

3 Outlook

Further steps could include projecting a whole set of curves or a entire road network onto a landscape. Each curve may contain scale attributes to change the width, height and blend values of any given part of the road.

download

Downloads

smart_display

Videos

Integrating a Road into a Heightfield – Houdini Tutorial

link

Related articles

favorite

260

label

Environment

Accumulate snow behind rocks

favorite

247

label

Environment

Crop Fields

favorite

179

label

Environment

Deforming a Height Field

favorite

124

label

Environment

Eikonal Distance Terrains

favorite

25

label

Environment

Geometric Median on Mesh Pieces

favorite

179

label

Environment

Height Field Gradient Advection