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虚拟 ...
随机推荐
- NOIP考纲总结+NOIP考前经验谈
首先来一张图,很直观(截止到2012年数据) 下面是收集的一些,我改了一下 红色加粗表示特别重要,必须掌握 绿色加粗表示最好掌握,可能性不是很大,但是某些可以提高程序效率 高精度 a.加法 b.减法 ...
- MySQL数据库视图(view),视图定义、创建视图、修改视图
原文链接:https://blog.csdn.net/moxigandashu/article/details/63254901
- 数据结构 Sunday算法
Sunday算法是Daniel M.Sunday于1990年提出的字符串模式匹配算法.相对比较KMP和BM算法而言,简单了许多. Sunday算法的思想类似于BM算法中的坏字符思想,有点像其删减版.差 ...
- TypeScript语法学习--基本类型
查看官方文档手册:链接:https://www.tslang.cn/docs/home.html (一)Boolean 最基本的数据类型就是简单的true/false值 The most basic ...
- 【迎圣诞,拿大奖】+流量分析+Writeup分享
太菜了太菜了,刚见到jsfuck时竟然不知道什么东西,自己都不敢说自己做过实验吧上的那道jsfuck题了. 进入正题: 首先解压发现两个文件,一个流量分析包,哇哇哇,我正好刚学了几天wireshark ...
- JS数字指定长度不足前补零的实现
问题描述: 要求输出的数字长度是固定的,如长度为2,数字为1,则输出01,即不够位数就在之前补足0. 解决方法: 方法1 function fn1(num, length) { ret ...
- 使用ScriptableObject创建.asset文件
.asset一般用来存储一些配置,比如SDK初始化的相关参数. using System.Collections.Generic; using UnityEngine; namespace XXX { ...
- Elasticsearch集群运维
一.索引管理 1. 创建索引 PUT test-2019-03 { "settings": { "index": { "number_of_shard ...
- SpringBoot(十二):springboot2.0.2写测试用例
导入maven依赖: <dependency> <groupId>junit</groupId> <artifactId>junit</artif ...
- Redis接口的调用
1.hiredis是redis数据库的C接口,目录为/redis-3.2.6/deps/hiredis 2.示例代码如下: #include <stdio.h> #include < ...