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虚拟 ...
随机推荐
- [CSAcademy]Or Problem
[CSAcademy]Or Problem 题目大意: 一个长度为\(n(n\le2\times10^5)\)的序列\(A(0\le A_i<2^{20})\),将其分为恰好\(m\)个连续段, ...
- MySQL之ORDER BY 详细解析
1 概述 MySQL有两种方式可以实现ORDER BY: 1.通过索引扫描生成有序的结果 2.使用文件排序(filesort) 围绕着这两种排序方式,我们试着理解一下ORDER BY的执行过程以及回答 ...
- 屏幕录制软件camtasia studio 8序列号激活
注册名:TEAM MESMERiZE序列号:3MHCA-5DMCV-H89T8-V8GML-W6FB8 打开hosts文件:C:\Windows\System32\drivers\etc\hosts把 ...
- MySQL(九)
封装 观察前面的文件发现,除了sql语句及参数不同,其它语句都是一样的 创建MysqlHelper.py文件,定义类 #encoding=utf8 import MySQLdb class Mysql ...
- UVALive - 4885 Task 差分约束
Task 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page ...
- HttpServletResponse常见应用——设置响应头控制浏览器的行为
1.设置http响应头控制浏览器禁止缓存当前文档内容 1 response.setDateHeader("expries", -1); 2 response.setHeader(& ...
- Oracle数据库访问其他用户下的表,不加表所属的用户名的实现方法
一. 问题: 如何实现在Oracle数据库中访问其他用户的表时不需加表所属的用户名 二. 举例: Oracle里面的用户A,要访问用户B的表需要带用户B的前缀,如访问用户B的 TEST表,需要这样访问 ...
- Docker实现容器具有固定IP
Docker的网络类型 Docker安装后,默认会创建三种网络 $ docker network ls NETWORK ID NAME DRIVER SCOPE 6bdc00ad2a8d bridge ...
- ImportError: No module named _tkinter on macos
MAC OS 10.11.6 lMacBook-Pro:~ xiaomilbq$ python Python 2.7.14 (default, Sep 22 2017, 00:05:22) [GCC ...
- Tomcat 9.0 安装配置
本文转自:http://blog.sina.com.cn/s/blog_15126e2170102w5o8.html 一.JDK的安装与配置 1.从官网下载jdk,注意是jdk不是jre.最好从官网下 ...