您需要 登录 才可以下载或查看,没有账号?注册
x
本期笔记内容 在茂密的植物景观中使用虚拟阴影贴图以及如何通过更改一个简单的设置来显着提高性能 优化前我们先打开场景FPS
接下来对比下使用常规阴影贴图与虚拟阴影贴图的区别
开启虚拟阴影贴图:首先进入我的项目设置-->搜索Shadow使用虚拟阴影
这样你就可以直接看到阴影尤其是前景中的树叶看起来好多了
但是帧率急剧下降到每秒20 20帧,当你在播放模式下移动会更加卡顿,所以这个帧速率下它基本无法使用,我做了很多尝试他们并没有很大不同。但是这个 r shadow virtualnon nanite 命令会产生很大不同
首先我们看看可视化问题,如果您查看缓存页面
您将获得一个虚拟阴影贴图部分,您在这里看到的是绿色的所有内容是不需要逐帧重新计算阴影的地方,随着它变得更红这意味着它实际上必须重新计算每一帧的阴影,而这一切都是红色的原因是因为树叶问题是树叶会移动,所以你可以看到有一种风在其中移动,由于这种移动它使每一帧的缓存都无效,并且必须重新计算它所以这就是导致问题的原因
让我们看看我们是否可以解决它,所以让我们回到我们的光照视图并调用这个命令,这个非纳米的即包括粗页零的树叶,让我们执行该命令每秒帧数立即从每秒 22 帧上升到 61 帧。所以它几乎比那个命令上升了三倍。视觉保真度真的没有任何改变,我们仍然可以看到前景中那些可爱的阴影,正如我所说我尝试了很多其他设置,唯一其他有一点不同的设置就是这个虚拟阴影
使用远阴影剔除 零所以它似乎在这里没有太大区别,但如果你在背景中有很多树叶,每个会添加几帧,所以现在如果我和我的角色一起进入游戏模式,这是完全有用的,你可以看到如果我面朝山谷所有的树叶都会减少到大约40片,那么我会以每秒70到80帧的速度朝着这个方向移动。但公平地说无论如何,我可能会减少剔除距离并将其更多地与背景草混合,这样就可以解决这个问题。但它现在完全可以使用只需设置non-nanite
首先我们执行这个
r.Shadow.Virtual.NonNanite.IncludeInCoarsePages 0的控制台命令
包括r.Shadow.Virtual.UseFarShadowCulling 0
每次你加载这个关卡时它不会是零这不会被设置为零,那么你如何做到这一点以便这个关卡自动应用这个控制台命令你可以通过使用关卡蓝图来做到这一点,所以对于我们的关卡在这里如果你打开它你会看到我已经完成了你在这里有一个事件开始播放命令
当你第一次打开关卡时会执行它,所以我所做的只是添加一个执行控制台命令节点。实际上我已经添加了两个节点,然后你这与将控制台命令放在这里是一样的但是它将在关卡打开时执行,所以那里有我的关键命令
这意味着如果我按下播放它将执行这些命令然后它们将从那时起在编辑器中可用,所以当你重新加载你的关卡只要执行这些命令就进入游戏模式。即使在编辑器模式下你也可以移动。所以这是我想谈论的第一件事
第二件事是我们是否可以改进下这里我们有远处的草是否有可能改变,远处的草这样就不会投射任何阴影所以我们不会在远处遇到红色缓存问题
让我们再看一下可视化虚拟阴影贴图缓存页面以及前景树叶中的红色,我们这里也有红色甚至这里可能有一两片草,所以我们可以通过去除远处草地的阴影来减少远处的缓存问题
让我们回到光照模式进入我们的草地这样我就有了与这个地面相关的草地类型,所以主要这是我第一次来到这里的主要草这里的距离。这里的第一棵草它在距离山谷20000 单位处结束相机
接下来我们打开草看下LOD级别,我们有四个LOD,0是前景中的细节, lod 3 是那里的远处元素所以如果我们选择 lod 3
并且你可以在这里可以选择投射和阴影的材质,所以这是每个 LED 阴影投射所以让我们取消它
开启前后帧率从60 70上升到84
我们产看下虚拟阴影贴图缓存页面,你会看到整个山坡上的红色现在已经缩小到一个更小的区域,可能其他一些草没有被剔除一次又一次的大幅度节省
但是否影响了视觉逼真度,让我们进入游戏模式当我们沿着这条路走下去看看阴影那里的阴影很好,但我注意到了阴影是的当我走动时,看看阴影看角色右边的草地,我四处移动时阴影消失了,所以这对我来说意味着 lod3很早就被交换了并且在 lod 距离周期中的嗯所以阴影正在弹出 所以我们想要做的是我们想让 lod3在它出现之前距离更远这样阴影就不会像那样突然进出
所以我们可以这样做让我们草网格在这里目前它有自动 lod你在 lod设置中看到它有自动计算 lod距离,我选择了 lod3最低级别的细节我无法改变你看到的屏幕尺寸它是屏幕大小的 0.10,它就是它所显示的但是如果我现在取消自动计算
我可以更改屏幕大小所以让我们把它变小而不是0.1我们将他设为0.03并保存,再次进入播放模式就不会出现影子问题
当我到达那里时路径的尽头是阴影,但现在过渡更加平滑,所以我没有注意到阴影突然出现远处的草,看起来并没有太大的不同 山坡上我现在每秒得到100帧当我背对草地的时候,在这一层有一些中间草地的地方我仍然可以得到每秒90到93帧的帧速率甚至在远处我也可以达到55几乎每秒60帧远处有很多草,这是一种相当昂贵的草他有4个LOD,但是LOD0、1、2他们不是平面本身有很多三角形所以我可以把它换成更便宜的平面草并且每秒获得更多帧。通过
01-建议尝试使用控制台变量禁用非 Nanite 对象渲染到粗糙页面
r.Shadow.Virtual.NonNanite.IncludeInCoarsePages 0
许多场景——尤其是那些主要由 Nanite 几何体组成的场景——不需要非 Nanite 对象将阴影投射到体积雾和类似的东西上。禁用它可以显着提高性能 02-无论距离如何,Nanite 几何体始终渲染到虚拟阴影贴图,因为这是性能最高的选项并提供最高质量。可以通过控制台变量使非 Nanite 几何体的行为方式与 Nanite 相同
r.Shadow.Virtual.UseFarShadowCulling 0
它可能是可用的看起来确实很好
虚拟阴影贴图(VSM)
是一种新的阴影贴图方法,用于提供一致的高分辨率阴影,适用于电影质量的资产和大型动态光照开放世界,使用虚幻引擎 5 的纳米虚拟几何、流明全局照明和反射,以及世界分区功能。
虚拟阴影贴图的目标虚拟阴影贴图的开发具有以下目标:
- 显着提高阴影分辨率以匹配高度详细的纳米几何体
- 具有合理、可控性能成本的合理柔和阴影
- 提供一个简单的解决方案,默认情况下只需进行有限的调整即可
- 用单一、统一的路径替换许多 Stationary Light 阴影技术
从概念上讲,虚拟阴影贴图只是非常高分辨率的阴影贴图。在他们目前的实施中,他们有一个 16k x 16k 像素的虚拟分辨率。裁剪贴图用于进一步提高定向光的分辨率。为了以合理的内存成本保持高性能,VSM 将阴影贴图拆分为每个 128x128 的图块(或页面)。根据对深度缓冲区的分析,仅在需要时分配和呈现页面以对屏幕上的像素进行着色。这些页面在帧之间缓存,除非它们因移动物体或光线而失效,这进一步提高了性能
Nanite 不支持许多 Stationary Light 阴影技术,例如预阴影和每个对象(或插图)阴影。虽然 Stationary Light 阴影的一些更动态的部分可能会起作用——例如相机查看器附近的 Cascaded Shadow Maps——但不支持具有传统阴影贴图的 Nanite 和 Stationary Lights。如果您在项目中使用 Nanite,则必须使用可移动光源或使用虚拟阴影贴图[micxp_wxonkey]wxv_2667101242665566209[/micxp_wxonkey]
官方文档:虚拟纹理阴影
https://docs.unrealengine.com/5. ... s-in-unreal-engine/
好!本期笔记分享就到这里,我们下期见!
|