使用houdini替代world machine来制作开放世界无缝地形的技术,最早是出现在育碧的《Ghost Recon: Wildlands》里,并且在GDC17和GDC18有很详细的Speech。因为具体方法在网上很多地方已经有详细的讲解了,所以有重复的部分就只是做点补充说明,主要还是放一些相关资料的索引以及实现过程踩到的坑,如有错误还望指出。
关键的实现过程我已经写在实验室的汇报PPT里,同时附带了Biome和Cliff生成的hda文件(排版挂图太麻烦了,直接点开看吧..):Github仓库
主要参考有:
- TraceYang 大佬的几篇入门介绍(膜
- Ma Yidong 大佬关于峭壁生成的介绍 (感谢大佬的指导
- GDC18 : Procedural World Generation of ‘Far Cry 5’
- GDC18 Terrain Rendering in ‘Far Cry 5’
- GDC17 : ‘Ghost Recon Wildlands’: Terrain Tools and Technology
下面做点补充说明:
一、Houdini Heightfield模块
这部分没有太多说明,官方文档介绍得十分详细。
二、Cliff
这部分主要参考峭壁生成的介绍 ,需要使用到houdini的GameDevToolset的autoUV进行展开。具体代码在PPT中已有介绍,同时也可以参考我的CliffTool.HDA文件。
三、Biome
这部分主要参考Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1),除此之外我再补充几个实现过程中踩的坑:
1.Parameter面板中,如需在下拉框中获取mask信息,可以使用
1 | import terraintoolutils |
2.由于HDA在导出过程中是处于lock的状态,因此使用python来修改节点参数在engine中会失效,如报错:PermissionError: Failed to modify node or parameter because of a permission error. Possible causes include locked assets, takes, product permissions or user specified permissions
解决方法:因为hda在lock的状态下python代码是不允许修改node的,因此需要在Parameter面板的Editable nodes中添加需要修改parm的node
四、Houdini Engine
在unreal与hda的交互这部分我还没实践,其余的实现可以参考官方文档。
一个小坑就是,用于生成地形的hda导入场景后要将坐标点归0,否则在后续步骤计算z轴的时候会算上transform的偏移值。