Houdini技术体系 过程化地形系统(一):Far Cry5的植被系统分析
2018-06-20 10:33
1821 查看
背景
在大世界游戏里,植被(biome)是自然环境非常重要的组成部分,虽然UE4里的也有比较不错的地形+植被系统,但相比国外AAA级游戏的效果,还是有不少的差距,简介如下:- UE4的植被分为(Folige Type)和(Grass Type),都是通过HierarchicalInstancedStaticMeshComponent来进行实例渲染,但生成方式不同
- Folige Type可以带有碰撞信息,通过Foliage Paint tool或Procedural Foliage Volumes 预先生成和放置,再跟随场景读取时加载。
- Grass Type自己不带碰撞,根据所在的Material Layer和设置预生成密度图,在运行时根据摄像机来生成视野周围的Grass。
- 当一块地表上出现多种Foliage或Grass时,还是会产生不同类型植被之间的竞争和重叠的情况
- Folige Type在特别是石块,树木,草体都存在的情况下,增减修改都会变的很麻烦
- 布局上还是要人为的控制,一旦场景地形要修改,就要重新各种刷新或配置Foliage Type,Grass Type也要跟着刷Material Layer来改变。
- Procedural Foliage Volumes可以一定程度上减少Paint的工作量,但可控的参数过少。
Far Cry 5的植被系统概述
- 植被的分层结构:每个地块有一个生态组(Main Biome),而主生态组又包含若干的子生态组(Sub Biome)。FC5里把一个Sub Biome结构称为Recipes,每个Recipes由代表不同的区域和种类来命名,比如biome_moutiain_forest,代表的是山上的树林。而一个Recipes里则是若干个Species组成,每个Species代表的是Recipes对应区域和生态里一个植物或物件种类的生成。
- Houdini与分层的联系:每个Species其实都是一个Generate Terrain Entities的Houdini HDA节点,把HDA节点一个接一个的连在一起组成Recipes(Sub Biome),而所有的Recipes再连接在一起成为一个Main Biome。每个HDA可以读取地形Mask信息和它的配置参数,输出自己对应的植被的摆放信息,而连在后面的HDA会根据前面HDA留下的信息,通过HDA内置的参数和算法,确定是否会覆盖前一个HDA的生成信息。
- 地形数据信息:根据地形的高度信息,生成不同的Mask信息,以及用户手绘的数据
- 包括Occlusion,Flow,Slope,Curvature,Illumination等通过高度生成的信息,以及海拔,经纬度,风向等人工输入的信息
- 湖泊,道路,栅栏,电线杆,峭壁等其他过程化生成的Mask信息也会被导出保存为2D贴图,确保植被不会生成到这些区域。
- Species的Entities功能 :生成地形上特定种类的实体,包括树,灌木,花草,岩石等等
- Viability : 每种物体在根据区域有自己的生存力,以及对应的生存范围和生存优先度,来避免物件之间重叠和穿插。
- Age:树木有自己的Age(年龄),根据Viability生成SDF的来决定。根据Age来控制树的高低。
- Size : 同一种类的树木有几种不同的Size,小树倾向在外围,大树倾向在中心,同一Size可以这种植被的变化(枯树等)。也可以用Age来替代Viability来控制Size
- Scale:在不同的Size等级之间里通过Scale来平滑过渡。
- Color: 每个植被实例可以根据地形或自身属性来改变的颜色变化,比如通过水体的SDF来控制草体Species的颜色。
- Density:树木密度,可以根据树的大小设置不同密度。
- Rotation:根据地形坡度,水源信息以及风力来改变草体的旋转和方向。
- Transform : 没有特意讲到,应该就是Transform信息
- Group : 同样没有特意讲到,可能就是Houdini的Group信息。
- Species的写回Terrain功能 : 布置的资源也可以影响到地形的信息。
- Terrain Color:地表植被信息可以给予地形贴图一个Tint Color,这个颜色也会通过shader影响到代表上草体的颜色,在地形贴图有限的情况下增加变化。
- Terrain Textures : 输出树根部分的贴图ID,以及混合系数,配置到Terrain Material的Layer Texture上,做到地表和树根的融合效果。
- Terrain Data Output : 可以把Species的数据包装输出,比如把Age或Viability写入到一个属性,再由后面的Species读取。
- Terrain Deformation:植被信息会影响到地形HeightMap的变化,比如树根部分会让周围地表隆起。
- 输出到编辑器:所有实体的信息会以Entity Point Cloud的方式输出到引擎编辑器,每个Point除了位置信息属性,还有对应的实体实例引用,以及前面提到的HDA中生成的类似Size,Scale,Color等信息传送到编辑器,编辑器里再根据这些信息在场景里生成对应的资源。
- 根据地形的HeightData生成各种Mask信息,以及其他过程化工具生成Mask的回读功能
- 类似Generate Terrain Entities里的HDA功能
- HDA所生成的点云和Terrain信息回读到UE4里改变之前的配置
地形数据生成
上文提到,过程和生成Biome使用的地形数据主要来源有以下两个部分:- 在Houdini里基于Heightmap生成
- 游戏编辑器中输出的2D Mask数据
地形的植被实体生成
下图是FC5的层级结构示意 实际整个Main Biome,就像下图这样一个个的代表特定植被的Species的连接在一起。 每个Species都是一个Generate Terrain Entiies的HDA节点 接下来通过文档里HDA的截图分析需求。下图是HDA的主面板。 图上半部分是植被,地形数据列表和显示选项等,生成参数的配置在下半部分,有Entities和Terrain两个页签。里面有摆放植被和输出地形信息的功能。- Viability
因为SpeciesA和B在树的种类,密度,大小上并不一样,Point Cloud并不会完全重叠在一起,而是类似下图这样的分布关系,所以不能只通过的植被对应的Point的位置信息和Viability来做判断,还需要让每个Entity Point有Viability Radius,下图中,因为B的Viability值比A低,所以当他们的范围有重叠时,B的树就会被A替换掉。 此外,每个Species还有Priority和Priority Radius的设置,计算最终的摆放前,先会用Priority做比较,当Priority一样时再用Viability值做比较。 有些植被还有它特定的生存习性,地形数据除了从Heightmap计算或外部读取外,还需要可以人工的在houdini里控制生成范围,再把多个地形数据的混合出结果,例如下图得到就是在一定海拔高度范围内,沿着flow Line生长的植被Mask。也可以把之前编辑器导出或保存的例如湖泊,道路,悬崖等Mask信息导入Specie的地形数据里作为剔除Mask使用,确保植被不会生成到这些不应该生成的位置上。 通过在每Species的Terrain Attribute里增加不同的数据来混合,就可以得到类似特定位置的Sub Biomes的生成位置信息了。
- Size和Scale
- Age
- Density
- Color
- Rotation
植被对地形的影响
Species HDA的另外一个功能就是可以根据植被来影响地形数据。这些功能和地形制作部分比较相似。- Terrain Defromation
- Terrain Texture
- Terrain Data Output:
- Terrain Color
总结
通过植被系统输出下图中数据到编辑器,不但可以自动化的生成植,还可以根据植被信息进一步增强地表渲染效果。 FC5的整个植被系统的需求分析就到这里,除了一些细节功能外,Houdini方面并没有太多的技术难点,下一节,会针对UE4 Houdini Engine对应UE植被系统的管线,以及如何在Houdini里实现相关功能进行展开。<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">
相关文章推荐
- Houdini技术体系 基础管线(四) :Houdini驱动的UE4植被系统 上篇
- Houdini技术体系 基础管线(四) :Houdini驱动的UE4植被系统 下篇
- Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)
- Houdini技术体系 基础管线(三) :UE4以选择区域的方式对地形做生成和更新 上篇
- 研读《高可用多节点集群技术的研究和实现》-----集群系统的软件体系结构
- 数据仓库系统的技术体系架构设计
- Houdini技术体系 基础管线(二) :Heightfiled与UE4的无缝导入以及对World Composition的支持
- 数据仓库系统的技术体系架构设计 推荐
- 开源系统中构建纵深入侵检测及防御体系技术剖析
- Houdini技术体系 基础管线(一) : Houdini与Houdini Engine的安装
- (&lt;虚拟项目&gt;广告管理投放系统-1)技术体系结构
- Houdini技术体系大纲
- Houdini技术体系 基础管线(三) :UE4 Landscape Component的多选支持 下篇
- 开源系统中构建纵深入侵检测及防御体系技术剖析
- 物联家电系统业务技术体系介绍
- 权限学习--BlueDavy之技术Blog漫谈权限系统之结尾篇(开源产品、个人观点、知识体系)
- [转帖]嵌入式Linux系统开发技术详解-基于ARM:BootLoader
- 中文搜索引擎技术揭密:系统架构(一)
- 软件.c互联网技术领域有了中国原创的产品体系
- Linux的内存管理,硬盘数据恢复的相关知识,SQL恢复技术,如何让多个系统共享资源