工具概述

在 Houdini 中开发的道路生成 HDA。在 Unreal Engine 中直接编辑样条曲线,即可控制道路走向和车辙形态。道路两侧可配置岩石、树木和碎石等环境元素,调整资源类型、数量和缩放比例。路径变化时,地形会随之抬高、平整或雕刻,环境元素自动避让,保证道路与环境自然衔接。

Unreal Engine 中的 HDA 与环境元素参数。
场景展示。
场景展示。

道路路径与地形投射

用 Curve 节点绘制道路路径,通过 Sweep 扩展为带菱形截面的几何体,模拟道路截面结构。再用 HeightField Project 将其投射到地形上,并与原始地形做 Minimum 运算,得到与地形自然融合的基础路面。

Curve 与 Sweep 生成道路截面。
投射到地形后的道路与两侧隆起。

方向性地形与植被遮罩

为还原参考图中“南低北高”的地势,在原始地形上生成一个方向性渐变遮罩,用滑块控制褶皱的分布范围,实现从南向北逐渐抬升。该遮罩再与 HeightField Pattern 结合,叠加有节奏的起伏。植被只生长在较高且平缓的区域,因此用 HeightField Mask by Feature 结合坡度与高度条件生成树木分布遮罩,排除陡坡和低洼处。

方向性渐变遮罩与地形起伏。
查看 VEX 代码 · heightfield_wrangle2

生成方向性渐变遮罩:按位置把地形从一端到另一端映射为 0–1,再用 Ramp 曲线调整渐变形状,控制地势抬升的范围。

heightfield_wrangle2.parmVEX
float ramp = fit( @P.z, -200, 200, 0, 1 );

@mask *= chramp( "ramp", ramp );

树木与岩石分布

基于道路及两侧隆起形成的遮罩进行定向撒点。为了让遮罩中心分布大石块、两侧逐渐过渡为灌木和碎石,没有直接用 Scatter 控制尺寸,而是用 Copy to Points 配合 VEX 表达式,按遮罩梯度动态控制实例尺寸,使大小从中心到边缘平滑过渡。大型岩石会改变地表材质,因此用同样方式为岩石生成独立材质区域,并通过 HeightField Expand Mask 扩大范围,划出与沙地不同的地貌分区。岩石周围再撒布小碎石、灌木和杂草,丰富细节层级。

树木分布遮罩与撒点。
大型岩石的材质区域。
岩石与周边植被的节点网络。

杂草分布与遮罩整合

杂草使用前面所有遮罩的反向区域,避开树木、岩石和灌木,再做模糊、平滑并适度收缩,打破边缘,形成自然随机的覆盖。最后整合所有点信息与遮罩,排除多余区域,并重新分配和命名材质 ID 与遮罩层,使其与 Unreal Engine 5 中的 Landscape 混合材质对齐。

杂草分布遮罩。
合并所有遮罩与点信息,对应 Landscape 材质层。

展示视频

道路工具演示

技术内容整理自作者作品集及项目文件。

下一个项目科幻金属地板材质