B站制作过程展示: Houdini To UE4 程序化地形生成制作过程与效果展示
Github Houdini与HDA源文件:Houdini-PCG-Environment-Generator

目录
一、简单介绍
一直以来对于开放世界的程序化生成比较感兴趣,各种原因选择了程序化野外山谷作为第一个研究目标。
实现的效果还算达到预期,但是性能还是不满意,修改参数后需要计算一些时间,可能是因为用了Erode计算侵蚀的原因吧。
后续仍需要不少优化,也希望大佬能指导指导,暂想通过分Tile,重构Houdini与UE4的基础管线方式提升,具体参考自该技术大佬分享。
二、制作步骤
这里仅将最终的制作思路作讲解,期间零碎的测试不再赘述。
2.1 Houdini制作步骤
2.1.1 地形创建
通过学习与研究,我决定采用擅长制作程序化地形的Height Field节点,在该领域花费了较多的时间,首先创建一个默认大小的Height Field高度图区域,大小刚好是题目要求的1k x 1k。Grid Spacing网格上两点之间的距离,相当于这块高度图的分辨率大小,设置为2。
使用Height Field Noise节点对高度值添加噪声模拟地形,我将噪声振幅、大小与模式参数暴露在了HDA中,使得在UE4中能够进行进一步调整。
为了使地形形状能够更加真实,我使用了Height Field Erode节点模拟自然中的雨水、风力侵蚀,这里需要通过时间轴模拟侵蚀随时间的变化,时间越久越耗费性能,我将帧数锁在了20帧左右,这样即使不小心移动了时间轴也不会对已经调整的效果产生影响,也避免了耗时的计算;紧接着通过Height Field Distort对地形进行扭曲,添加更多的细节,得到了不错的山地与平原轮廓;最后通过Transform节点对地形整体进行了适度的抬升,方便后续的高度蒙版值设置。
2.1.2 层级划分
虽然创建好了地形,但我们需要让程序能够知道树木、草地或是石块应该放置在哪,或是地表的材质会根据地区的不同而有所变化。Houdini提供了一个强大的节点Height Field Mask By Feature,它能够根据一些参数的设置对当前地形进行分区。比如我通过坡度筛选,将20-80度的山地标记出来用于生成树木。
使用Height Field Blur模糊上方的蒙版,让过渡区域别那