锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

Building Worlds In Unreal 学习笔记——20-23 程序化植被/草Billboard材质/实时虚拟纹理(RVT)的使用

时间:2023-11-03 16:37:02 国产smd铝电解电容rvt

Building Worlds In Unreal 学习笔记-20-2323 植被/草的编程Billboard材料/实时虚拟纹理(RVT)的使用

  • Lec20 程序化植被 Procedural Grass & Foliage for Landscapes
    • 1 寻找参考/资产下载
    • 2 遮罩&Grass节点尝试&四个问题
    • 3 问题解决
      • 3.1 密度管理
      • 3.2 过渡(TAA模拟透明度变化)
      • 3.3 草的多样性
      • 3.4 远处BillBoard光照错误
    • 4 Grass绘制树
  • Lec21 草Billboard材质优化 Grass Billboard Material
  • Lec22 利用实时虚拟纹理优化性能 Landscape Optimization Using Runtime Virtual Textures
    • 1 性能考察
    • 2 实时虚拟纹理
    • 3 效果
  • Lec23 实施虚拟纹理的材料混合 Landscape Material Blending With Runtime Virtual Textures
    • 1 模糊问题修正
    • 2 混合
      • 2.1 高度图VT
      • 2.2 高度mask
      • 2.3 混合RVT

本系列学习资料来源,Ben Cloward油管空间,B站的搬运翻译

Lec20 程序化植被 Procedural Grass & Foliage for Landscapes

使用UE4的Grass程序化绘制植被的工具很强大,但也很耗能
因此,本节教学主要围绕如何使用Grass但不损失很多性能

1 寻找参考/资产下载

我们在这里,打开谷歌地图寻找街景
在这里插入图片描述

  • 我们观察到,大多数植被都是野生高草,有绿色和死亡
  • 山坡上有泥土和岩石,以及针叶林,云杉,松树
  • 所以我们会在地上种草,在山上种树

去Bridge下载这些植物
https://quixel.com/assets/uddmcgbia - Thatching Grass
https://quixel.com/assets/tefocd1r - Swamp Grass
https://quixel.com/assets/rbdoo - Grass Clumps


以及UE4商城之前做过小河的云杉树

2 遮罩&Grass节点尝试&四个问题

我们希望草生长在地势较低的平面上

  • 地势较低,这就想到了以前做过的高度mask
    • 这是以前的高度Mask与颜色相连的结果

      与我们想要的相反,高黑低白
    • 所以做以下修改,OneMinus和Saturate效果如图所示
  • 平面长草,这就想到了以前Slope
    • 看看之前的SlopeMask

      连到RGB上
  • 这两个方面结合在一起,使用乘法

新建一个Grass发现节点需要一个节点Grass类型的数据

建这个类

基本设置

选我们刚才的Grass

下图显示了几个问题

  • 草皮太厚,影响性能,网格太多
  • 太浓密的问题可以改变Grass的密度

    但是你可以看到远处的十字架BillBoard(从视角确定纹理矩形朝向的技术称为BillBoard),它们的照明不是很对,很明显十字会出现
  • 边界很硬,很不自然
  • 只用了一种草,比较单调

3 问题解决

综上所述,有四个问题:1。合理管理草皮密度;2.修复草皮的刚性过渡;3.修复密度低造成的BillBoard照明异常;4.添加草的种类

3.1 密度管理

第一个是草皮密度

  • 管理草皮的密度,我们可以使用多种草,按照近中远来设定
    • 比如这种近景草,密度高一点到80

      高密度也应减少多边形,设置最小LOD为3
      同时,由于是特写近景草,初始距离为200,远端去除为1500
    • 复制到中景的草,设置
    • 复制中景到远景的草,改变参数
    • 结果如下:近中远三层显示管理密度,近草密度大,三角形少。对于远处的草,有更大的多边形和更小的密度

3.2 过渡(TAA模拟透明度变化)

如何过渡,可能会想到在消除距离上做一些改变
鼠标移到提出距离,可以看到说明

我们想要fade,可以在草的材质里去使用PerInstanceFadeAmount这个节点

  • 找草球的父材,这是Bridge自带材质球

  • 先来看看这个所谓的PerInstanceFadeAmount是什么节点

    可以看出,随着移动,去除边缘的草正在变黑
  • 对于草,我们不能做透明度渐变,因为消耗太高,我们可以用这个节点来假装

    对于每一个像素,TAA只会选择显示和不显示,但会在时间维度上混合像素值,造成透明的假设
    所以我们会变成这样

3.3 草的多样性

根据前三种草的设置,将其他模型放在后面,f可以随意调整多少?density和cull distance


3.4 远处BillBoard光照错误

下个问题这个问题Lec介绍

4 Grass绘制树

我们希望树木出现在土壤中,即低海拔缓坡



将这个Dirt的Mask看基本颜色

这样设置树Grass
比如大树

小树,去得更近

然后多来几个

Lec21 草Billboard材质优化 Grass Billboard Material


远处的草是十字形的Billnboard,我们需要改进它

  • 点开随便一个草,在LOD最近,是好的

    但是LOD当级别较大时,交叉Billboard,光线不好看

我们将专门进行十字交叉Billboard定制一种材料

但是还有一个问题,很明显后面的草颜色很浅

原因是这个billboard例如,它的地图颜色稍亮(红框),所以打开它Color Overlay

以及SSS颜色强度也降低了一点


Lec22 使用实时虚拟纹理优化性能 Landscape Optimization Using Runtime Virtual Textures

1 性能考察

既然要优化性能,那么首先第一步就是确定性能
按下~ 输入stat unit

game和draw是CPU做的,所以很明显我们的GPU消耗很大

  • 打开GPU的状态

    可以看到基础绘制部分就花费比较多

  • 查看shader复杂度

    可以看到我们的草和树的shader还可以,但是地形不太行,我们用实时虚拟纹理去优化它

2 实时虚拟纹理

我们看看我们的shader,确实够复杂的,我们对每个像素实时计算所有这些东西

但是并不是每个像素每一帧都会改变
实时虚拟纹理是,我们只渲染一次,然后之后每次都参考那个渲染出的纹理绘制

打开项目设置,选择启动虚拟纹理,然后重启UE4(这一找到一篇虚拟纹理的原理专栏)

添加一个新的



到材质里加入虚拟纹理,从指令上性能变好了

3 效果

到场景一看,似乎有点糊

做一些调整,修改一下分辨率和图块大小

  • 参数设置

提高分辨率就正常了

Shader复杂度降低了

基础绘制的秒数减少了,帧数提高了(然而电脑是i7九代+2060 似乎性能提升不太大,但确实是提升了)
舍弃了一点地图的分辨率,增加了性能


但是该方法用存储换性能,我们需要一个大的空间来存RVT

Lec23 实施虚拟纹理的材质混合 Landscape Material Blending With Runtime Virtual Textures

1 模糊问题修正

上节中,RVT会有些糊,其实并不是分辨率的问题,打开我们基础的材质函数
以相机深度来插值远近,这一般来说没问题
但是在RVT的预渲染中,是没有相机这一概念的,所以这个远近混合也没用

怎么办呢?也就不要去搞什么重复了,为了RVT我们放弃这个远近混合

用这个RVT版本的材质函数,去替换之前的版本

但是山上的纹理,有很可怕的tilling,我们要重新思考如何去除重复,这个,以后再说

2 混合

本节利用RVT去让与地面相交的物体,进行材质混合

我们在场景中摆放一些东西的时候,边界是很生硬的

我们可以从RVT中获取纹理来与它混合,达成一个柔和的边界

2.1 高度图VT

可以这么做的前提是我们存了高度图

对于高度图,我们不需要很精确的数据,保存默认设置选择高度图数据即可

放入Volume

2.2 高度mask

找到岩石材质的父材质(这里开始和Ben佬的示范不是一个东西,不过思路是一样的)

打开它,是默认的材质

我们需要一个mask来判断地形在哪里,我们要混合的程度有多大

首先用这个方式判断离地距离是多少

像素的离地距离加上object bounds(也就是物体的边界,物体的xyz长度 ,类似于以几何中心为原点,输出三个方向的半径,我们取B也就是取出高度的一半)
减去参数控制的物体直径
把下图的值连到粗糙度里看看缓冲区

记得把自己的地形材质切换成RVT版本
可以看到分层了,但是锯齿状边缘很严重

我们在saturate前面接一个除法

可以看到比之前的锯齿过渡顺畅一点了

有了mask就可以采样了

2.3 混合RVT

将上面的mask插入alpha,原本的属性插入B,地图的属性插入A

效果如下,首先是没混合

接着进行混合,效果达到了(似乎贴图精度不够所以有些糊)

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章