背景

通过之前的几篇分析实践,已经基本打通了UE4的Houdini植被管线部分,并对Far Cry5(简称FC5)的植被系统的需求做了整理,在接下来的几节中,会关注于如何使用Houdini基于UE4来开发类似FC5的植被生成系统。这里按工具制作流程分为几个部分来做阐述。
  1. 使用Houdini开发类似FC5里的Generate_Terrain_Entities的HDA节点
  2. 修改Houdini Engine,让Generate_Terrain_Entities的Input和Output可以支持在UE4里生成植被
  3. 进一步优化Houdini Engine,可以让关卡设计人员可以在UE4 Editor里更加灵活和方便的修改
本节的目标就是如何开发一个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节点,
参考FC5,创建一个类似的Generate_Terrain_Entities的参数面板和Input,Output的输出。
参数面板就和FC5文档里介绍的一样,具体做法就不多做叙述了,稍微有些Houdini经验的美术都可以实现。
参考FC5把Input  Laber 设置为2个,Output为3个,Input Output接续的数据在下图有注释。这样把每个Speices链接链接在一起,具体如何起作用的在后文会有介绍。
复制完参数面板后,就是要实现根据参数来生成植被的Point Cloud信息的功能了,在之前管线里已经提到过,Point Cloud是使用Scatter节点,基于Heightfiled Mask的信息来生成的。接下来的目标就是如何根据植被系统的设置,正确的生成所对应的Mask。

确定生成区域

FC5的植被系统的生成区域来源主要是两部分,一个是基于地形数据生成的各种Mask数据,例如AO,Flow,Slope,这些Mask通常确定植被会生长在哪些区域,
另外一种就是直接导入的2D数据,比如场景美术手绘的区域,以及一些在引擎里通过其他的过程化工具生成内容,比如街道,水塘的Mask,保证这些区域不会有植被放置。
把这不同Mask的组合根据规则和面板参数做数学组合,就得出最终的生成区域结果,这里简单的介绍下如何使用VEX脚本结合Houdini的节点来实现功能。
首先是AO,Flow,Slope,Direction(Sun or Wind)等Terrain Abiotic Data的生成,这些大部分可以用Houdini自带的节点来生成
AO的生成,这里使用官方论坛上的一个OpenCL加速的heigtfiled AO节点,链接地址:https://www.sidefx.com/forum/topic/54318/?page=1#post-243847
Altitude可以直接读取height信息,但因为一些特殊的缘故,height的最低值并不一定为0,这里使用了一个Python节点,调用terraintoolutils.computeInputRange的函数来获得height的范围
这里增加一个altitude的Attribute的Ramp,用来获取制定范围内的高度信息
在Generate_Terrain_Entities内部,在名为Mask的SubNetwork里主要做这些各种Mask的处理工作
这个示例Vex代码里,迭代每一个Attribute的Ramp的Mask,然后合并到一起。为了简化有些功能没实现到Vex里,比如每个Attribute的Toggle开关和Power值的判断,不同的Attirbute,例如Altitued还要做一些特殊处理等等。另外FC5可以支持多组Combined Data后的Data Group再做二次Combine。最终会是双重循环的形式。
下图的效果就是只有一个Altitude(Height) Attribute的效果。
    
接着,在单独加入一个Slope的Attribute的效果
最后得到两个Attribute合并的效果。
这样,houdini的生成区域的基本功能就完成了,后面就可以参考FC5,基于flow,direction等信息,制作出不同的植被生成区域的pattern
除此之外,FC5中还有一些用过程化工具生成mask要做为exclusion区域来使用,
比如这里把生成water的区域,作为exclusion mask。
把exclusion mask作用到Alittude Attribute上,
就得到了exclusion后的结果。
除此之外还有Noise,FC5的Noise的Size是受地形法线影响的,这根据Volume中height的位置,来取得height mesh里对应的Point的Normal,根据Normal的Y值来控制生成Noise的Size。
这样,不同坡度的噪声大小也不同。下图就是water和altitude attribute以及noise共通作用的结果。
最后得到的Mask,就是对应的植被生成区域。接下来就要根据Mask,来生成植被的Scatter Point Cloud了。

生成Point Cloud

基于HeightFiled Mask来生成Point Cloud,通常使用HeightField Scatter就可以实现,
而FC5的植被系统里,还是要考虑植被的Size和Age参数,来确定最终的Point Cloud,这里使用下面两个Attribute的Data Group来作为植被的生成信息
下图就是得到的Viability的信息。
接下来,需要把Viability Mask用SDF的方式转为Age的mask
通过convertvolume和isooffset节点,用SDF方式重新生成Age Mask
接下来,通过Density面板,来配置密度,然后把Density写入到HeightFiled的Mask里(也可以自己新建一个volume来保存)。而通过Density Ramp来控制不同Size植被的密度值,也就是Age(Mask)越小的外围的小树,密度越高,而Age(Mask)比较大的树林中心的大树,密度会比较小。
把Density值作为Density Attriube传入到Scatter节点,同时输出Point的Radius属性。
这样就得到了初步的Point Cloud,以及对应Point的Size,Pscale的信息。
然后,通过Size面板,设定不同等级的植被的具体大小。
以及对应的植被的颜色值。
就得到了带有具体Color和Transform信息的Point Cloud.
再通过Copy to Point节点,用Debug Tree进行测试,这样就得到了一种植被的Scatter结果。可以看到Age信息外围颜色较浅的树木密度相对较大,尺寸也较小,而Age信息内部的颜色较深的树木则尺寸比较大,散布的也相对稀疏一些。
这样,一种植被的生成功能已经初步完成,但生态系统里,还是要考虑多种植被的共通生长的竞争关系。以及同一种植被之间的竞争关系。这就需要实现FC5里通过对Viability Radius的判断来选择Species的功能。

根据Viability选择Species

FC5使用的方法,是根据Viability Radius和Viability强度,来确定一个范围内生成哪种植被。
这个实现也比较简单,先获取一个Point Radius范围内的全部Point,把Viability相对较小的剔除掉就可以了。
这样,在之前的演示的植被效果下面,再增加一个HDA节点。生成Species B
Species B的生成信息如下。
这里Species B的Viability值比Species A要高
这样,Species B和Species A混合在一起后,Species B会把Viability Radius里的Species A剔除掉
增加密度后,2种植被的布置效果。
最后像FC5这样,把地貌的生态环境中的每种特定位置的植被用HDA文件一一描述再串联起来,就可以构成区域复杂的植被体系了。

总结

这样,就初步实现了FC5的Generate Terrain Entities的基础功能,但欠缺的地方还是很多的。
  • Density,Size,Age等参数使用以及规则上,需要去对应最终的游戏世界的尺寸做修改。
  • 如何更优雅的与UE4的FoliageSystem结合,需要再Houdini Engine里做进一步的扩展
  • 算法上的调试,优化,也需要基于具体的制作示例来进行
  • 像Rotation,TerrainData的输出,在之前几节有过介绍,在后文与UE4的整合里也会有进一步的改进。
在下一节里,在介绍如何使用Generate Terrain Entitie在UE4里制作效果的同时,进一步的优化和改进功能。

Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)相关推荐

  1. 过程化考核管理系统实现(1) - 需求功能分析

    过程化考核管理系的需求功能分析: 现在,大部分考试都是采用的传统的纸上考试,在这种考试方式下,每道题都需要人工评分,不能从题库中随机选出题目组成一张卷子,考试也只能从纸上看到错题,错题目不能汇总.所以 ...

  2. 如何搭建去中心化商城系统案例分析

    区块链,是基于互联网的一种高大上的技术,具有去中心化.防篡改.公开透明.共识机制等特点,随着区块链的兴起,越来越多的行业领域都在强调去中心化的思维."去中心化"是一种开放式.扁平化 ...

  3. Unity编辑器拓展之二十四:基于Unity Node Editor、ScriptableObject的配置化新手引导系统

    博客迁移 个人博客站点,欢迎访问,www.jiingfengji.tech 本文主要介绍根据一款Node Editor库开发的新手引导系统 git地址如下: https://github.com/lu ...

  4. 基于堆栈二值化自动编码器和二值化神经的无约束人脸表情识别算法(An efficient unconstrained FERa based on BAEs and BNN)

    摘要(abstract) 虽然深度学习在许多模式识别任务中都取得了良好的效果,但对于含有大量参数集.标记数据有限的深度网络,过拟合问题仍然是一个严重的问题.在这项工作中,二进制自动编码器(BAEs)和 ...

  5. 3步! 老司机教你如何在以太坊上构建基于Token去中心化投票系统!

    作者 | Doug Crescenzi 译者 | 王柯凝 出品 | CSDN.区块链大本营 如果想在以太坊平台上构建一个去中心化的自治系统,其实有很多种不同的方法可供你选择.其中,最常用的方法之一就是 ...

  6. 一种基于UE4平台多人交互3D家装设计系统及使用方法与流程

    本发明涉及一种基于UE4平台多人交互3D家装设计系统及使用方法,属虚拟现实技术领域. 背景技术: 目前随着虚拟现实技术的飞速发展,当前在进行家装实际工作中,为了提高设计方案对用户展示的便捷性和准确性, ...

  7. 双目立体视觉案例源代码 基于HALCCN的双目立体视觉系统实现 基于openev的双目测距 双目测距-opency 通用化视堂系线板架 Halcon视觉例子程序

    双目立体视觉案例源代码 双目测距 双目摄像头图像获取 标定代码 1.Halcoa 10三椎视党 2.Halcon视觉例子程序 wa2013 3.OpenCV+OpencL.双目立体视觉三幢重建 vs2 ...

  8. 基于区块链的防护物资捐赠监管系统(二):系统结构

    基于区块链的防护物资捐赠监管系统(二):系统结构 第1章 对研究背景及内容进行介绍 第2章 智能合约.密码学知识.共识机制等相关技术 第3章 系统的整体设计 第4章 系统功能的具体实现 第5章 系统的 ...

  9. 计算机应用基础课程是过程化考试吗,基于能力的计算机应用基础课程过程化考核标准构建与实施...

    基于能力的计算机应用基础课程过程化考核标准构建与实施 <计算机应用基础>是高职院校中一门实用性和操作性很强的公共基础课,在提高学生的计算机应用能力和信息素养上发挥着重要作用,为专业课的学习 ...

最新文章

  1. 靠拿奖学金完成学业后,博士生为女友放弃年薪30万工作选择留校任教
  2. 带你重读Youtube深度学习推荐系统论文,惊为神文
  3. Sequence Sorting CodeForces - 1223D(思维)
  4. word2vec应用场景_word2vec的使用参数解释和应用场景
  5. C# wpf编程CM框架快速入门项目实例
  6. mysql join 联合查询,MySQL连接(join)查询
  7. tomcat加上了https后访问不了_西部数码使用指南:部署https后访问提示存在安全隐患的排查解决方法...
  8. 一位Erlang程序员的自白
  9. 真假难辨,AI就能分得清?
  10. [翻译] ASP.NET MVC Framework控制器操作安全性
  11. python循环语句总结
  12. 数学分析教程(科大)——6.1笔记+习题
  13. 如何大量做外链 不仅正规而有效果
  14. deflate与gzip
  15. ctf:kali2:端口扫描:nmap和portscan
  16. 如何建立广泛、牢固的人脉?
  17. N76E003 串口接收字符串,完整输出
  18. 掘金15W沸点简单分析(二)
  19. Mn0.15V2O5·nH2O锌离子电池正极材料的储锌性能
  20. VSCode + JSDoc 完美实现(almost)JavaScript代码提示

热门文章

  1. 微信群管理之全网黑名单的实现
  2. 关于在POI以SAX方式解析,会导出拼音(音标)的问题解决
  3. office和WPS分别如何给文字注释音标
  4. 【华为校招】【校招】【Java】单词搜索(DFS)
  5. 程序员视角的计算机系统 第一章 计算机系统之旅
  6. 微信获取用户地理位置信息的原理与步骤
  7. 数制转换2(利用栈)
  8. win8通过u盘装linux系统文件下载,U盘安装纯净版WIN8方法步骤介绍
  9. vscode 取色器插件
  10. 伤寒论阳明篇(python文本搜索)