背景
通过之前的几篇分析实践,已经基本打通了UE4的Houdini植被管线部分,并对Far Cry5(简称FC5)的植被系统的需求做了整理,在接下来的几节中,会关注于如何使用Houdini基于UE4来开发类似FC5的植被生成系统。这里按工具制作流程分为几个部分来做阐述。
- 使用Houdini开发类似FC5里的Generate_Terrain_Entities的HDA节点
- 修改Houdini Engine,让Generate_Terrain_Entities的Input和Output可以支持在UE4里生成植被
- 进一步优化Houdini Engine,可以让关卡设计人员可以在UE4 Editor里更加灵活和方便的修改
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRZMU5ETTVPQzB4TXpBd05qQTFOVEF6TG1wd1p3PT0uanBn.jpg?w=700&webp=1)
本节的目标就是如何开发一个Generate_Terrain_Entities的HDA节点,并在Houdini里实现类似上图中FC5的效果,大致流程分为:
- 创建HDA面板,为内部的过程化实现创建参数关联
- 根据Viability中选择Terrain Data以其他的过程化生成的2D data,确定植被的生成范围
- 根据Density,Sizes,Scale,Color,Rotation等面板参数,来生成Point Colud,以及Point对应的旋转,颜色,缩放等信息。
- 多个HDA连接,每个HDA代表一种植被类型。并实现按照Viability范围和优先级的选择正确的Species。
- 根据最终的PointCloud,用Copy to Point节点做植被的Instance化
面板制作
首先要做的,是创建一个Generate_Terrain_Entities的SOP节点,并且HDA的参数面板和Input/Ouput,这里先创建一个SOP节点,
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRZMU9UTXhNQzB6TlRNM05ERTVOell1Y0c1bi5qcGc%3D.jpg?w=700&webp=1)
参考FC5,创建一个类似的Generate_Terrain_Entities的参数面板和Input,Output的输出。
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRjd016STBOQzB4TkRNeE1UVTRNRFV1Y0c1bi5qcGc%3D.jpg?w=700&webp=1)
参数面板就和FC5文档里介绍的一样,具体做法就不多做叙述了,稍微有些Houdini经验的美术都可以实现。
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRjd056TXdOUzB4TWpZMk1UazFNREF5TG5CdVp3PT0uanBn.jpg?w=700&webp=1)
参考FC5把Input Laber 设置为2个,Output为3个,Input Output接续的数据在下图有注释。这样把每个Speices链接链接在一起,具体如何起作用的在后文会有介绍。
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRjeE5ESXdNeTA1TmpneU5EQXhOak11Y0c1bi5qcGc%3D.jpg?w=700&webp=1)
复制完参数面板后,就是要实现根据参数来生成植被的Point Cloud信息的功能了,在之前管线里已经提到过,Point Cloud是使用Scatter节点,基于Heightfiled Mask的信息来生成的。接下来的目标就是如何根据植被系统的设置,正确的生成所对应的Mask。
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRjeE9USXlOUzB4TnpNNE1qZ3hPRFU1TG5CdVp3PT0uanBn.jpg?w=700&webp=1)
确定生成区域
FC5的植被系统的生成区域来源主要是两部分,一个是基于地形数据生成的各种Mask数据,例如AO,Flow,Slope,这些Mask通常确定植被会生长在哪些区域,
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRjeU5qRTRNUzAyTlRJNE9EY3dPRGt1YW5Cbi5qcGc%3D.jpg?w=700&webp=1)
另外一种就是直接导入的2D数据,比如场景美术手绘的区域,以及一些在引擎里通过其他的过程化工具生成内容,比如街道,水塘的Mask,保证这些区域不会有植被放置。
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRjek1ETXpOUzB4TXpVM01UWTBNamt3TG1wd1p3PT0uanBn.jpg?w=700&webp=1)
把这不同Mask的组合根据规则和面板参数做数学组合,就得出最终的生成区域结果,这里简单的介绍下如何使用VEX脚本结合Houdini的节点来实现功能。
首先是AO,Flow,Slope,Direction(Sun or Wind)等Terrain Abiotic Data的生成,这些大部分可以用Houdini自带的节点来生成
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRjek16TTNPQzB6TWpNNE5UQTVNRFF1YW5Cbi5qcGc%3D.jpg?w=700&webp=1)
AO的生成,这里使用官方论坛上的一个OpenCL加速的heigtfiled AO节点,链接地址:https://www.sidefx.com/forum/topic/54318/?page=1#post-243847
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRjek5qTXpNUzB5TVRJd056VXdPVEkwTG1wd1p3PT0uanBn.jpg?w=700&webp=1)
Altitude可以直接读取height信息,但因为一些特殊的缘故,height的最低值并不一定为0,这里使用了一个Python节点,调用terraintoolutils.computeInputRange的函数来获得height的范围
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRjek9EUXhOeTB6TnpRNU56ZzJOVFF1Y0c1bi5qcGc%3D.jpg?w=700&webp=1)
这里增加一个altitude的Attribute的Ramp,用来获取制定范围内的高度信息
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRjME1EUXdNQzAwT0RFeE9UUTROREF1Y0c1bi5qcGc%3D.jpg?w=700&webp=1)
在Generate_Terrain_Entities内部,在名为Mask的SubNetwork里主要做这些各种Mask的处理工作
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRjME1qTTVNQzB4TkRJeU9ETXpNVFV4TG1wd1p3PT0uanBn.jpg?w=700&webp=1)
这个示例Vex代码里,迭代每一个Attribute的Ramp的Mask,然后合并到一起。为了简化有些功能没实现到Vex里,比如每个Attribute的Toggle开关和Power值的判断,不同的Attirbute,例如Altitued还要做一些特殊处理等等。另外FC5可以支持多组Combined Data后的Data Group再做二次Combine。最终会是双重循环的形式。
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRjME16TXpOaTB4TmpreU1EazRNREl1Y0c1bi5qcGc%3D.jpg?w=700&webp=1)
下图的效果就是只有一个Altitude(Height) Attribute的效果。
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRjME5USTRPUzB4TmpFMk16TTRPVFV1YW5Cbi5qcGc%3D.jpg?w=700&webp=1)
接着,在单独加入一个Slope的Attribute的效果
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRjME56TTBOQzAzTnpBNU16ZzBNamN1Y0c1bi5qcGc%3D.jpg?w=700&webp=1)
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRjME9ESTJNUzAyTWprNE9EazFOelF1YW5Cbi5qcGc%3D.jpg?w=700&webp=1)
最后得到两个Attribute合并的效果。
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRjME9EZzVPQzB4TnpFM016STBNelExTG1wd1p3PT0uanBn.jpg?w=700&webp=1)
这样,houdini的生成区域的基本功能就完成了,后面就可以参考FC5,基于flow,direction等信息,制作出不同的植被生成区域的pattern
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRjME9UY3lNQzB4TmpZMU1qUXpOemcxTG1wd1p3PT0uanBn.jpg?w=700&webp=1)
除此之外,FC5中还有一些用过程化工具生成mask要做为exclusion区域来使用,
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRjMU1USXdOaTAyT1Rnek9EZ3lNVFV1YW5Cbi5qcGc%3D.jpg?w=700&webp=1)
比如这里把生成water的区域,作为exclusion mask。
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRjMU1qWTFNeTAyT1RneU16SXdORGN1YW5Cbi5qcGc%3D.jpg?w=700&webp=1)
把exclusion mask作用到Alittude Attribute上,
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRjMU5ESXlOaTB4TXpnME1EUTRPVEF4TG5CdVp3PT0uanBn.jpg?w=700&webp=1)
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRjMU5USTJNQzAzTURFMU1qVXlPRE11YW5Cbi5qcGc%3D.jpg?w=700&webp=1)
就得到了exclusion后的结果。
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRjMU5qSTVOUzB4T0RFNU5qUTNNVE16TG1wd1p3PT0uanBn.jpg?w=700&webp=1)
除此之外还有Noise,FC5的Noise的Size是受地形法线影响的,这根据Volume中height的位置,来取得height mesh里对应的Point的Normal,根据Normal的Y值来控制生成Noise的Size。
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRjMU56STFNUzB4TWpFeE5EZ3pOakF3TG1wd1p3PT0uanBn.jpg?w=700&webp=1)
这样,不同坡度的噪声大小也不同。下图就是water和altitude attribute以及noise共通作用的结果。
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRjMU9ESTROUzB4TnpRek9EWTBNamN4TG1wd1p3PT0uanBn.jpg?w=700&webp=1)
最后得到的Mask,就是对应的植被生成区域。接下来就要根据Mask,来生成植被的Scatter Point Cloud了。
生成Point Cloud
基于HeightFiled Mask来生成Point Cloud,通常使用HeightField Scatter就可以实现,
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRnd01qSXlOaTA0TVRnME9EQTBNall1Y0c1bi5qcGc%3D.jpg?w=700&webp=1)
而FC5的植被系统里,还是要考虑植被的Size和Age参数,来确定最终的Point Cloud,这里使用下面两个Attribute的Data Group来作为植被的生成信息
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRnd056SXhOeTB4TWprMk9ESXlNamN6TG5CdVp3PT0uanBn.jpg?w=700&webp=1)
下图就是得到的Viability的信息。
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRnd09UTXhNQzB4TURnNE1qZzRNekU0TG1wd1p3PT0uanBn.jpg?w=700&webp=1)
接下来,需要把Viability Mask用SDF的方式转为Age的mask
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRneE16SXlNQzB6TlRrd01EVTBNREV1YW5Cbi5qcGc%3D.jpg?w=700&webp=1)
通过convertvolume和isooffset节点,用SDF方式重新生成Age Mask
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRneE5UVTNNQzAyTURnME5EVTBNRGd1YW5Cbi5qcGc%3D.jpg?w=700&webp=1)
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRneE9ESXhOQzAwTlRNNE1qYzBORFl1YW5Cbi5qcGc%3D.jpg?w=700&webp=1)
接下来,通过Density面板,来配置密度,然后把Density写入到HeightFiled的Mask里(也可以自己新建一个volume来保存)。而通过Density Ramp来控制不同Size植被的密度值,也就是Age(Mask)越小的外围的小树,密度越高,而Age(Mask)比较大的树林中心的大树,密度会比较小。
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRneU1EVTFNUzB4TnpNM05UYzRPVFF3TG5CdVp3PT0uanBn.jpg?w=700&webp=1)
把Density值作为Density Attriube传入到Scatter节点,同时输出Point的Radius属性。
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRneU1qSXlNaTAwTWpnNU5qVXpPVGd1Y0c1bi5qcGc%3D.jpg?w=700&webp=1)
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRneU5ESTVNeTAxTURjd01qWTBOamN1Y0c1bi5qcGc%3D.jpg?w=700&webp=1)
这样就得到了初步的Point Cloud,以及对应Point的Size,Pscale的信息。
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRneU5qSTRNaTAxTXpVMU16WXlOalV1YW5Cbi5qcGc%3D.jpg?w=700&webp=1)
然后,通过Size面板,设定不同等级的植被的具体大小。
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRnek1ESTJPQzB4TURFME1EZzRNelV3TG5CdVp3PT0uanBn.jpg?w=700&webp=1)
以及对应的植被的颜色值。
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRnek1qTXlOQzB4TVRJd01qQXdNVEEyTG5CdVp3PT0uanBn.jpg?w=700&webp=1)
就得到了带有具体Color和Transform信息的Point Cloud.
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRnek5USTRPUzB4TURjeU9EVXdOakl5TG1wd1p3PT0uanBn.jpg?w=700&webp=1)
再通过Copy to Point节点,用Debug Tree进行测试,这样就得到了一种植被的Scatter结果。可以看到Age信息外围颜色较浅的树木密度相对较大,尺寸也较小,而Age信息内部的颜色较深的树木则尺寸比较大,散布的也相对稀疏一些。
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRnek9ETXpNUzB6TWpreE9UTTJPREl1YW5Cbi5qcGc%3D.jpg?w=700&webp=1)
这样,一种植被的生成功能已经初步完成,但生态系统里,还是要考虑多种植被的共通生长的竞争关系。以及同一种植被之间的竞争关系。这就需要实现FC5里通过对Viability Radius的判断来选择Species的功能。
根据Viability选择Species
FC5使用的方法,是根据Viability Radius和Viability强度,来确定一个范围内生成哪种植被。
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRnME1qSTROUzB4TVRreU1EUTBNelUxTG1wd1p3PT0uanBn.jpg?w=700&webp=1)
这个实现也比较简单,先获取一个Point Radius范围内的全部Point,把Viability相对较小的剔除掉就可以了。
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRnME5ETXlOeTB4TkRBNU56STROREl3TG5CdVp3PT0uanBn.jpg?w=700&webp=1)
这样,在之前的演示的植被效果下面,再增加一个HDA节点。生成Species B
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRnME56STJOaTA1T1RZNE16VTFOaTV3Ym1jPS5qcGc%3D.jpg?w=700&webp=1)
Species B的生成信息如下。
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRnMU1ESTRPUzB4TVRjeE1UWTNOak11YW5Cbi5qcGc%3D.jpg?w=700&webp=1)
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRnMU5EVTRPUzAxTlRBd09UQXVhbkJuLmpwZw%3D%3D.jpg?w=700&webp=1)
这里Species B的Viability值比Species A要高
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRnMU56WXpOaTB4TlRBME1qQTRNekV6TG5CdVp3PT0uanBn.jpg?w=700&webp=1)
这样,Species B和Species A混合在一起后,Species B会把Viability Radius里的Species A剔除掉
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRnMU9USTFNQzAxT0RrM09EWTBNVFF1YW5Cbi5qcGc%3D.jpg?w=700&webp=1)
增加密度后,2种植被的布置效果。
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRrd01UY3dNQzB6TmpBMk5EQTFOeTVxY0djPS5qcGc%3D.jpg?w=700&webp=1)
最后像FC5这样,把地貌的生态环境中的每种特定位置的植被用HDA文件一一描述再串联起来,就可以构成区域复杂的植被体系了。
![Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1) Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UZ3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5ODFNRE14TWpNdk1qQXhPREEzTHpVd016RXlNeTB5TURFNE1EY3lOakV3TkRrd05ESTNNQzAwTkRBeU1UTTJOVFF1YW5Cbi5qcGc%3D.jpg?w=700&webp=1)
总结
这样,就初步实现了FC5的Generate Terrain Entities的基础功能,但欠缺的地方还是很多的。
- Density,Size,Age等参数使用以及规则上,需要去对应最终的游戏世界的尺寸做修改。
- 如何更优雅的与UE4的FoliageSystem结合,需要再Houdini Engine里做进一步的扩展
- 算法上的调试,优化,也需要基于具体的制作示例来进行
- 像Rotation,TerrainData的输出,在之前几节有过介绍,在后文与UE4的整合里也会有进一步的改进。
在下一节里,在介绍如何使用Generate Terrain Entitie在UE4里制作效果的同时,进一步的优化和改进功能。