Houdini技术体系 过程化地形系统(一):Far Cry5的植被系统分析
背景
- 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里改变之前的配置
地形数据生成
- 在Houdini里基于Heightmap生成
- 游戏编辑器中输出的2D Mask数据




地形的植被实体生成




- Viability





- Size和Scale


- Age


- Density


- Color

- Rotation

植被对地形的影响
- Terrain Defromation


- Terrain Texture


- Terrain Data Output:





- Terrain Color


总结

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">
Houdini技术体系 过程化地形系统(一):Far Cry5的植被系统分析的更多相关文章
- Houdini 过程化地形系统(二):基于UE4的FC5植被系统(1)
背景 通过之前的几篇分析实践,已经基本打通了UE4的Houdini植被管线部分,并对Far Cry5(简称FC5)的植被系统的需求做了整理,在接下来的几节中,会关注于如何使用Houdini基于UE4来 ...
- Houdini技术体系 基础管线(四) :Houdini驱动的UE4植被系统 上篇
背景 之前在<Houdini技术体系 过程化地形系统(一):Far Cry5的植被系统分析>一文中已经对AAA游戏中过程化植被的需求有了一定的定义,后续工作就是如何用Houdini开发功能 ...
- Houdini技术体系 基础管线(四) :Houdini驱动的UE4植被系统 下篇
背景 在上篇中,实现了使用Houdini在UE4里根据地形过程生成植被的最基本的原型.并且支持把植被在UE4里Bake成使用的HierarchicalInstancedStaticMeshCompon ...
- Houdini技术体系 基础管线(三) :UE4 Landscape Component的多选支持 下篇
背景 上篇中,我们介绍了如何修改Houdini Enigne来设置单个Landscape Compnent的Height和Layer的数据,但原生Houdini Engine并不支持多选Compone ...
- Houdini技术体系 基础管线(三) :UE4以选择区域的方式对地形做生成和更新 上篇
背景 前一节里,解决了Houdini地形无缝导入到UE4的流程问题.但这种方法也有它的局限性,在实际游戏项目里,LA和LD还是偏向在游戏引擎编辑器里工作,他们的一些设计也会影响到地形的信息,那 ...
- Houdini技术体系 基础管线(二) :Heightfiled与UE4的无缝导入以及对World Composition的支持
Authored by TraceYang 前言 传统的制作做比较真实大世界3D关卡地形时,通常的采用的方式是把HeightMap和SplatMap(Layer Mask)导入到引擎的地形系统里 ...
- Houdini技术体系大纲
Houdini for UE4 Pipeline的系列教程,前言等想好再写吧
- Houdini技术体系 基础管线(一) : Houdini与Houdini Engine的安装
Houdini 下载与安装 在官网 https://www.sidefx.com/download/ 下载最新的Production Build 版本,当前是16.5版本,需要注册帐号 PS:公司内网 ...
- 01-java技术体系基础
java体系基础 理论 编程语言: 系统级: C, C++, go, erlang ... 应用级: C#, Java, Python, Perl, Ruby, php 虚拟机: jvm(java虚拟 ...
随机推荐
- IDEA 配置datasource,提升编码效率,让你在 Mapper.xml 中编写sql可以飞起来~
IDEA 2018 创建springboot工程后,如果你打开一个.sql文件,或者一个mybatis的mapper.xml文件,会提示: No data source are configured ...
- 狡猾的商人 [HNOI2005] [一题双解]
Description 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的.账本上记录了n个月以来的收入情况,其中第i 个月的收入额为Ai(i=1,2,3...n-1,n), .当 ...
- BZOJ4381[POI2015]Odwiedziny——分块+长链剖分
题目描述 给定一棵n个点的树,树上每条边的长度都为1,第i个点的权值为a[i].Byteasar想要走遍这整棵树,他会按照某个1到n的全排列b走n-1次,第i次他会从b[i]点走到b[i+1]点,并且 ...
- Tarjan求强连通分量 缩点
强连通分量的定义: 在一张有向图中,如果两个点u,v之间能相互到达则称这两个点u,v是强连通的,在这个基础上如果有向图G中的任意两个顶点都强连通,那么称图G是一个强连通图.有向非强连通图的极大强连通子 ...
- .net 4.0 中的特性总结(一):dynamic
在新版本的C#中,dynamic关键词是一个很重要的新特性,现在你可以创建动态对象并在运行时再决定它的类型.而且.net 4.0为CLR加入了一组为动态语言服务的运行时环境,称为DLR(Dynamic ...
- javascript parseUrl函数解析url获取网址url参数
function parseURL(url) { var a = document.createElement('a'); a.href = url; return { source: url, pr ...
- db2性能优化
性能优化概述 DB2 的性能优化可以从三个方面分析:内存,CPU 和 I/O .DB2 性能优化是一件较为复杂的综合性的工作 , 需要对问题的根源作全方位的探索和思考.同时也需要较深厚的数据库管理经验 ...
- JDBC(10)—批处理
批量处理JDBC语句,提高处理速度. 当需要成批的的插入或更新记录时可以采用java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理,通常情况下比单独提交处理更有效率. 批量处理的方法: ...
- java 遍历Map的4种方法
在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...
- ASP.NET WebApi 基于JWT实现Token签名认证
一.前言 明人不说暗话,跟着阿笨一起玩WebApi!开发提供数据的WebApi服务,最重要的是数据的安全性.那么对于我们来说,如何确保数据的安全将会是需要思考的问题.在ASP.NET WebServi ...