UE中虚拟纹理【VT、SVT、RVT】性能优化与开销 | 如何在RVT中开启SVT?...
Game艺视界原创文章原创 17441 0
实名

通过了实名认证的内容创造者

发布于 2023-4-28 15:34:56

您需要 登录 才可以下载或查看,没有账号?注册

x

本期笔记内容(有点多可直接到最后看视频)
01- 什么是Virtual Texture(VT)
02-UE4中开启 Virtual Texture
03- UE4中的 Virtual Texture
    —Streaming Virtual Texture ( SVT )
    —Runtime Virtual Texture ( RVT )
    —RVT中的优化

04-何时用与不用 SVT(↓↓查看下文↓↓)
【游戏流式虚拟纹理入门【何时用 | 如何用】

05-UDIM支持
06-性能和开销

07-流送虚拟纹理可视化
08-材质查找和堆栈
09-限制

01


什么是 Virtual Texture(VT)基本思想是它可以将你的纹理分成固定大小的图块通常为 128 x 128 像素,然后当你在世界各地移动时,我们正在分析屏幕上实际可见的内容。并查看纹理这些屏幕元素所需的图块,然后有效地流式传输实际需要的图块以显示屏幕上可见的内容。这在许多方面都比传统的基于mip 的流式传输有所改进。粒度要好得多当您流式传输完整位图时,您需要流式传输完整的大图像而使用虚拟纹理您可以只加载可见图像的实际较小部分
虚拟纹理,它可以减少纹理内存开销并在使用非常大的纹理时提高性能

这些纹理不需要完全加载只有面向相机的、相机实际可见的部分需要加载这是与 Mipmap Streaming 相比的主要优势,在 Mipmap Streaming 中您将加载整个mipmap两者都适用于大型开放世界,它们允许您在场景中使用比内存更多的数据但是如果您有密集的场景或者如果您有真正高分辨率的纹理则流式虚拟纹理会大放异彩【左边】我们可以用这张幻灯片来解释它在左边的幻灯片上我们有一个可以看到四个立方体的相机让我们假设每个都有一个 4K 纹理这四个立方体靠近相机这些 4K 需要加载所以 4K 纹理在内存中【右边】如果你看右边使用流式虚拟纹理我们可以有八个这样的对象只有这些对象中可见的部分需要加载到内存中我们可以在靠近相机的地方拥有更多物体的密集场景即使这样使用的内存也比 Mipmap Streaming 少流式虚拟纹理显然很棒

984fa1faf2c25743627f1ed1cbf0fffd.png

02


开启虚拟纹理
在项目设置(Project Settings)中的引擎(Engine)>渲染(Rendering)>虚拟纹理(Virtual Textures)下,选中启用虚拟纹理支持(Enable virtual texture support)
•Enable virtual texture lightmaps:为光照图打开虚拟纹理
•如果在进行光照烘焙时启用它,还将使用虚拟纹理流处理光照贴图、平铺大小、边框大小。这些通常不需要更改
•然后在这里您有一些额外的选项来压缩虚拟纹理以节省磁盘内存

df06d6f472e9f4a2260b39a35d4688b8.png

在项目设置(Project Settings)中的编辑器(Editor) > 纹理导入(Texture Import) > 虚拟纹理(Virtual Textures) 类别下,可指定最小纹理尺寸来考虑SVT的新导入纹理。若纹理满足最小尺寸,将自动启用此纹理资源的虚拟纹理流送。
03


UE4中的 Virtual Texture
虚幻引擎4(UE4)支持两种虚拟纹理方法:运行时虚拟纹理(RVT) 和 流送虚拟纹理(SVT)
[backcolor=rgba(255, 255, 255, 0.2)]运行时虚拟纹理(RVT)[backcolor=rgba(255, 255, 255, 0.2)]流送虚拟纹理(SVT)
- 支持超高纹理分辨率
- 按需将纹素数据缓存于内存中
- 在硬盘中烘焙和加载纹素数据
- 非常适用于生成时间较长的纹理数据,如光照贴图或美术师创建的大型细节纹理
- 支持超高纹理分辨率
- 按需将纹素数据缓存于内存中
- 运行时由GPU生成的纹素数据
- 非常适用于可按需渲染的纹理数据,如过程纹理或合成分层材质

流送虚拟纹理
可降低使用超大尺寸纹理时的纹理内存开销,包括支持虚拟纹理光照贴图和UDIM(U维度)。与现有的基于mip纹理流送相比,流送虚拟纹理是一种从硬盘流送纹理的替代方法
流送虚拟纹理 (SVT)是一种在项目中从硬盘流送纹理的替代方法,与虚幻引擎4(UE4)中现有基于mip的纹理流送相比,其既有优点也有缺点

传统基于mip的纹理流送对材质UV使用执行离线分析,然后在运行时根据对象可见性和距离决定要加载的纹理mip级别。由于流送数据考虑的是全纹理mip级别,所以此过程有局限性。使用高分辨率纹理时,加载更高等级的mip纹理可能会极大地影响性能和内存开销。此外,通过CPU使用基于CPU对象可见性和剔除做出基于mip纹理流送的决定,可见性更为保守意味更有可能进行加载来避免对象突然出现在视图中。因此即使对象的一小部分可见则视整个对象均为可见
加载对象包括可能需要流送传入的相关纹理相反,虚拟纹理系统仅会根据UE的要求,流送需要显示的纹理部分。将所有mip级别拆分为固定尺寸的小图块即可实现这一点。GPU决定屏幕上所有可见像素所访问的可见图块。这意味着,当UE要求显示某个对象时,它会与GPU通信,GPU会将所需图块加载到GPU内存缓存。无论纹理大小,SVT的固定图块大小仅考虑可见图块。GPU会使用标准深度缓冲计算可视性,促使SVT仅对可见部分(影响像素的部分)发出请求
Svt与普通贴图区别主要在加载方式
  • 普通贴图:根据摄像机和对象的距离加载,对象的UV在屏幕上的变化速度。
  • SVT:把贴图分成不同的 Tile / Page ,默认是128*128 Page ,然后根据是否在屏幕上或者是否渲染然后来决定哪些 Page 需要被加载
  • 在PageTable中定义首先它是否被加载,需要被加载的是灰色的,不需要被加载的是白色的,同时又定义了这些Page最终需要被渲染的或者被调加载的那张PhysicalTexture里当中
  • 所以普通贴图与SVT加载方式在最终加载到内存的一个贴图的大小与数量有着很大差别(普通加载方式不关心是否在屏幕内、是否看得见)




【图片源UE官方在B站的:[中文直播]第18期 | Virtual Texture(虚拟纹理)的理解和应用 | Epic 李文磊】分享课
然后一旦启用使用虚拟纹理,打开纹理一样简单只需单击此处的此按钮即可启用它。您并没有真正看到任何区别,但您可以在此处看到该方法现在设置为虚拟流式传输而不是常规流式传输


有一个控制台您可以设置 r.VT.borders并将其设置为1,因此然后使用虚拟纹理

转换纹理和材质启用项目的虚拟纹理即表示需进行设置才能正确运行纹理和材质;纹理须启用 虚拟纹理流送 支持,材质的 纹理取样 须使用 虚拟 采样器类型,而不是非虚拟类型。
选择以下选项,正确设置纹理和材质以使用SVT


转换菜单选项
在内容浏览器中,选择要转换的纹理资源,以使用SVT
右键点击打开快捷菜单,选择 转换为虚拟纹理(Convert to Virtual Texture)
使用此菜单选项,还可将虚拟纹理转换为常规纹理





转换(Convert To Virtual Texture) 窗口列出了选中的所有纹理及引用此类纹理的所有材质、点击ok启动转换过程
在转换过程中,纹理资源将在纹理编辑器设置中启用 虚拟纹理流送(Virtual Texture Streaming)。引用选中纹理的材质转换纹理采样节点以使用 虚拟 采样器类型,而不是非虚拟采样器类型

如果你有一个想要尝试虚拟纹理的现有项目,你可以选择一大堆纹理转换为虚拟纹理。唯一必须接触材质才能修改此采样器类型以在虚拟纹理而不是常规纹理中正确引用(大意:批量转换后需要进入材质修改采样器)

这实际上也是另一个问题
如果您有一个使用虚拟纹理的材质,它是一个参数那么任何想要覆盖该参数的材质实例。也需要使用虚拟纹理的材质实例也需要使用虚拟纹理,您不能在单个纹理参数中混合和匹配虚拟纹理和非虚拟纹理

手动转换在内容浏览器中,双击给定纹理资源,打开纹理编辑器(Texture Editor)在细节(Details)面板中的纹理(Texture)下,启用虚拟纹理流送(Virtual Texture Streaming)

若未使用上述转换菜单选项而启用此项,将立即导致引用转换纹理的所有现有材质失效。应打开引用违规纹理的所有材质,并将纹理取样节点设为使用正确 虚拟(Virtual) 采样器类型。例如,虚拟纹理应使用 虚拟颜色(Virtual Color) 而非 颜色(Color) 采样器类别
纹理取样节点未使用正确采样器类型时,UE会在 统计数据(Stats) 面板和此节点底部显示一条错误消息:
[size=1em]1.错误消息显示指定的VT Texture Sample表达式的错误采样器类型
[size=1em]2.将纹理取样样本的 采样器类型(Sampler Type) 更改为 虚拟(Virtual) 类型之一
[size=1em]3.VT纹理取样正确渲染,由表达式右下角"VT"指示
[size=1em]4.向材质图表添加虚拟纹理时,将自动指定虚拟采样器类型。然而,若将表达式设为可在材质实例中使用的纹理采样参数,那么基本材质会将虚拟采样器类型应用于所有子实例。注意,假如在基类材质中,纹理参数插槽尚不是虚拟纹理类型,则你无法将虚拟纹理指定给纹理参数插槽。
[size=1em]
可以设置在导入纹理时自动将一定分辨率以上的纹理转换为 SVT:4096
可以手动设置 SVT 图块的大小:128/4
还可以通过命令行修改:r.VT.TileSize 、r.VT.TileBorderSize

打开它你可以看到这里有一个小VT表示这是一个虚拟纹理

所以在这里这是常规纹理与虚拟纹理和材质之间的不同之处。采样器类型自动设置为虚拟颜色。因此您可以看到这些虚拟采样器类型仅适用于虚拟纹理,基本上就是这样。如果它设置为虚拟颜色则插入了一个虚拟纹理它就像一个普通的纹理一样工作

来到控制台我们可以在世界中制作一个纹理您可以看到这些正方形中的每一个都代表一个128x 128 像素的图块。您现在可以看到我们加载了大约256X256的纹理数据来显示立方体的这个表面
但是当我们放大并靠近时它开始流入更多的数据。所以现在我们达到了 512 乘512。1、2、3、4块瓷砖
然后你继续前进,它会自动加载更高分辨率的图块
我们盒子部分在这里离开屏幕,不可见的图块系统将系统将知道这些图块不需要渲染此帧,因此它们不会被流式传输或者如果你有某种遮挡物比如在这个立方体的一部分前面有什么东西那么这些图块也不需要加载这就是虚拟纹理的真正优势,它只需要根据实际可见和您所看到的内容进行加载。并且没有基于距离的指标或基本的常规纹理流通常需要的东西

运行时的虚拟纹理
可有效渲染过程生成或分层的复杂材质,使运行时虚拟纹理适用于渲染复杂的地形材质。其能改善地形样条、网格体和材质贴花,及一般地形与对象混合的渲染性能和工作流程
运行时虚拟纹理 (RVT)在运行时使用GPU按需创建其纹素数据,工作方式与传统纹理映射类似。较大区域上的RVT缓存着色数据非常适用于使用贴花类材质的地形和适配地形的样条

这与我们刚刚看到的流式虚拟纹理技术基本相同
但是,我们将在运行时使用GPU填充这些虚拟纹理和瓦片,而不是从磁盘流式传输这些虚拟纹理。你可以用几种方法来思考这个问题。您可以考虑运行时虚拟纹理视为一个巨大的程序纹理,因此我们不需要任何存储空间,我们只需在材质中运行一些程序算法,并使用它及时填充虚拟纹理并利用所有,我们刚刚在流式虚拟纹理中看到的好处,其中只有我们实际想要从中采样的屏幕上可见的图块,我们付费填充另一种思考方式是运行时虚拟纹理是世界中一个巨大的渲染目标。同样我们只是及时写入该渲染目标的区域,我们希望从中采样并在其他材质中重用

我想到的第三种方式是它是一个着色缓存,也许我们有一个渲染成本非常高的材质。但它不会因帧而异它的输出不会逐帧更改,它不以任何方式依赖于相机。运行时虚拟纹理允许我们将该材质输出的图块渲染到虚拟纹理中该虚拟纹理充当缓存,然后我们可以稍后从中读取。这种着色缓存的心理模型非常适合项目中的景观之类的东西。其中景观的渲染成本可能非常昂贵,因为它们倾向于从大量纹理层中采样。它们有时会执行诸如三平面采样之类的操作,有很多有趣的混合和数学正在进行。风景也往往覆盖屏幕的很大一部分,因此渲染它们可能非常昂贵。因此这里的性能优化而不是内存优化。我们可以将该景观材质渲染到缓存中这是运行时虚拟纹理


然后我们所要做的就是从该缓存中逐帧采样,而流式虚拟纹理是一种内存优化。我们在使用它的性能方面支付少量费用,这更像是一种性能优化。我们将为拥有物理缓存付费,作为这个想法的演示我将使用 Unreal 附带的风景山脉样本,并将其转换为使用运行时虚拟纹理。

地形的渲染成本非常高,它是红色的我们需要降低成本

我们需要做的第一件事是,您需要创建一个运行时虚拟纹理,我们可以通过这里的材质和纹理上下文菜单来做到这一点,

这为我们提供了一些设置来填充它

第一个是虚拟纹理的大小,当前我们设置256,对于我们这里的应用程序来说这还不够大我认为我们有一个四公里大小的世界所以这种大小的虚拟纹理为我们提供了大约一厘米半的纹理分辨率这还不够

Layout:另一个有趣的选项是我们将存储在运行时虚拟纹理中的内容,我们有几个选项我们将根据需要扩展这些选项(颜色、法线、粗糙度等)这样我们就可以做一种粗糙的PBR用它进行渲染;
此外我们启用了纹理压缩这意味着当我们渲染到运行时虚拟纹理时我们将以BC格式对其进行压缩以减少内存、大小并提高采样性能


所以我们已经创建了它,现在我们还需要将它放置在我们的场景中。因为我们需要定义虚拟纹理,在 World 中的放置位置、渲染到其中的位置以及投影渲染到其中的位置。首先我们创建一个虚拟纹理运行卷并为其分配一个纹理拖拽到世界中并为其分配了一个虚拟纹理

现在我可以调整它的大小并将其放置在世界中我想要的任何位置,我们真正想要的是让运行时虚拟纹理覆盖整个景观对象,当我们选择景观;Set Bounds以便我们现在可以看到它覆盖了整个景观


我们需要实际开始在 Material 中使用它,我们有一个节点可以帮助完成此操作我们可以获取所有当前输出并将它们输入到运行时虚拟纹理中

然后我们需要第二个是从运行时虚拟纹理中读取,我们有另一个节点即运行时虚拟纹理示例节点这类似于其他纹理采样节点。但它是运行时虚拟纹理的特殊情况。因此我们可以从单个节点中提取不同的属性而不是在这里创建多个纹理采样节点,我们需要将我们的运行时虚拟纹理分配给它您可以看到就像普通的纹理样本节点一样,它需要具有它将使用的采样器上下文这应该与我们最初在运行时虚拟纹理上设置的内容相匹配,然后我们将这些输出通过管道传输到此处

除了采样运行时虚拟纹理之外,我们还可以执行任何我们想要的逻辑采样运行时虚拟纹理(点击应用)

提问:大家虚拟纹理的整体性能成本有点好奇,他们提到指令计数似乎有点高。然后特别是如果这值得在当前虚幻引擎版本的控制台上使用
解答:是的有许多指令可以对虚拟纹理进行采样在对页表进行采样后。我们需要将我的 UV转换为物理UV还有一些在运行时虚拟纹理中也有一些解码成本,还有一些指令计数成本和性能成本以及纹理重定向。
默认情况下当我们将景观渲染到运行时虚拟纹理中时出于性能原因,我们将其渲染为单个四边形所以每个景观组件将被渲染为一个四边形,这样做的问题是如果您有任何使用插值数据高度或法线来提供一些输出的材质。那么您将没有足够高的质量插值来提供良好的结果,如果您有类似的情况则需要允许渲染更高的mips或更高的景观LOD

这个虚拟纹理的分辨率,对于这个大小的世界来说真的不够好

我将缩小运行时虚拟纹理的体积,以便我们在查看一些可以通过运行时虚拟纹理应用的功能时仍然拥有您想要的质量(修改体积框,放在我们工作的位置)它不再是红色的所以这很好

模型应用虚拟纹理



RVT优化 | 流送虚拟纹理编译
当RVT涵盖具有众多Actor的大型场景时,渲染到RVT低分辨率mip将十分缓慢。此外,在此情况下,场景Actor需要永久常驻,以便渲染至表现场景远处部分的低mip。请注意,这一过程极耗内存
因此,烘焙和流送RVT的低分辨率mip则更为高效。仍会在运行时渲染较高分辨率mip。由此,单个虚拟纹理可充分利用流送虚拟纹理和运行时虚拟纹理这两种方法
使用RVT启用SVT
  • 要向RVT添加流送虚拟纹理支持,设置要流送的低mip数。
  • 在RVT体积中,设置你要使用的 流送级别(Streaming Levels) 数值
低mip值越高,生成的流送虚拟纹理越大,将在摄像机较近距离处使用此纹理
3.接下来,你需要创建流送虚拟纹理资产。在RVT体积组件中的 流送级别(Streaming Levels) 下方点击 构建(Build)。首次操作时,会新建一个 虚拟纹理构建器(Virtual Texture Builder) 资产,用于保存流送虚拟纹理

编辑后,你需要更新流送虚拟纹理。有两种办法实现:
•使用编辑器工具栏中的 构建(Build) 菜单,然后选择 构建虚拟纹理(Build Virtual Textures)。该选项会构建当前打开关卡的所有虚拟纹理
[size=1em]•使用RVT体积组件并点击 Use Streaming Low Mips in Editor 属性旁的 构建(Build) 按钮。这个选项只建立分配给选定的RVT Volume的流式虚拟纹理。这个选项只建立分配给选定的RVT Volume的流式虚拟纹理

编辑器默认固定使用运行时生成的RVT数据进行渲染,而非使用流送虚拟纹理数据。此操作无需在相关编译后更新流送虚拟纹理
要在RVT低mip中渲染流送虚拟纹理,在RVT体积细节(Details)面板中选择在编辑器中使用流送低mip(Use Streaming Low Mips in Editor) 属性
当部分RVT资产设置变更后,所有关联的SVT资产都将不再匹配并失效。这会导致游戏出现性能问题。出现这种情况后,RVT体积的UI界面中的"构建(Build)"按钮旁边会出现一个警告图标。这种情况也会在地图检查时被标记出来

减少材质数量(这段内容同上)
当地面上的物体非常非常多的时候中远处的大量的树,虽然被Rand到mip上但是注册数量非常大或者这个开销非常大,所以我们先Build、然后在
Run Time Virtual Texture添加使,近处是Runtime远处是SVT

Number of low...... : 从多少级开始使用svt
这就是svt与Rvt一起工作为了减少更多开销的一种方式

【图片源UE官方在B站的:[中文直播]第18期 | Virtual Texture(虚拟纹理)的理解和应用 | Epic 李文磊】分享课


设置LOD和Mip通过设置细节等级(LOD)和剔除行为,使用虚拟纹理高级卷栏属性控制Actor渲染至RVT的方式。在Actor的关卡 细节(Details) 面板中访问这些参数:
对于场景中的图元,调整以下属性:

虚拟纹理LOD偏差(Virtual Texture LOD Bias)设置LOD以渲染至RVT中。基于渲染的图元覆盖虚拟纹理页面的程度,自动选择此选项。使用此选项可应用进一步偏差。较高值将强制使用较少细节LOD。
虚拟纹理跳过Mip(Virtual Texture Skip Mips)RVT中跳过渲染此图元所需最低mip数。若已知无需在设定绘制距离外渲染图元,则此选项将消除渲染至RVT的开销。
虚拟纹理最小覆盖(Virtual Texture Min Coverage)若设定此值,将忽略虚拟纹理跳过Mip(Virtual Texture Skip Mips) 参数,而将基于图元在mip中的预估投影大小在RVT mip中剔除(或移除)图元。此值以像素为单位,而非日志空间。例如,设值为3时将剔除(或移除)投影尺寸小于8像素的图元。

对于场景中的地形,调整以下属性


虚拟纹理LOD数量(Virtual Texture Num LODs)用于将地形组件渲染至RVT的LOD数量。设值为0表示各地形组件都将作为单个四边形渲染至RVT中。0为GPU性能最优值。若地形材质需要高频顶点插值数据,则需要更高值。
虚拟纹理LOD偏差(Virtual Texture LOD Bias)应用于要渲染至RVT的选定LOD的偏差。

在不同的平台设置不同的VT尺寸

植被运行时虚拟纹理

05


UDIM支持
"U尺寸"("UDIM")是一类纹理命名规范,利用其能将多个纹理图像映射到静态网格体或骨架网格体模型上的单独UV区域。使用UDIM命名规范时,UE会将图像文件组导入为单个虚拟纹理资源
支持UDIM的虚拟纹理有以下好处:
  • 适用于多数单独的较小纹理,而非极大纹理。
  • 各UDIM图像可启用不同分辨率的非统一像素密度虚拟纹理。
例如,若导入由4个图像文件构成的UDIM虚拟纹理(两个2048x2048纹理和两个128x128纹理),并以2x2模式排列,则逻辑上虚拟纹理将采样此类图像,如同单个4098x4098纹理。UE会拉伸128x128小图像以填充2048x2048大图像所填充的相同区域,而不挺像硬盘或运行时内存的使用。在本例中,将128x128小纹理填充到2048x2048纹理分辨率不会消耗内存。

利用此命名约定,开始在项目中使用UDIM纹理与虚拟纹理:BaseName.####.[文件格式]
例如:MyTexture.1001.png
导入匹配此命名规则的图像后,将扫描源文件夹并查找是否有其他匹配相同 BaseName 且后跟不同坐标号的图像。对于找到的各图像,该四位数字定义图像应被映射到的位置。将传统纹理图导入到0-1范围内的网格体UV,但UDIM图像将基于其定义的UV坐标映射到UV 0-1空间



此网格表示UV映射到不同的四位数坐标,可使用此类坐标存储图像:
UV 0-1映射到1001处的图像,可得到命名纹理 MyTexture.1001.png。UDIM索引1001是此图像的根。若U坐标从1-1开始,即可得到 MyTexture.1002.png。若V坐标从1-2开始,即可得到 MyTexture.1011.png

06性能和开销
使用以下部分可测量项目中虚拟纹理的性能和开销:
统计数据虚拟纹理使用反引号(`)键打开控制台,并输入以下命令启用其统计数据:
使用 stat virtualtexturing 查看虚拟纹理场景的开销详情(以毫秒计)和页面表计数器。

使用 stat virtualtexturememory 显示与当前场景中虚拟纹理的使用有关的内存计数器。

07流送虚拟纹理可视化
使用控制台命令 r.VT.Borders 1 ,可在使用流送虚拟纹理的材质上绘制mip可视化网格
不需要时,可使用 r.VT.Borders 0 隐藏网格

08材质查找和堆栈(Stacks值)在材质的虚拟纹理中采样比传统纹理采样开销更大。你可以将虚拟纹理的开销分为两类:
  • 查找针对材质图表中采样的所有虚拟纹理。
  • 当你的项目使用相同UV和采样器源时,堆栈可合并虚拟纹理。
虚拟纹理固定比传统纹理采样开销更大。固定至少有两个纹理获取和部分数学指令。但通过合并使用相同UV和采样器源的VT纹理采样的堆栈(最多8个),可分摊部分开销。
在该简单材质范例中,有两个VT纹理采样表达式使用正在采样的默认UV。添加虚拟纹理查找以查找各纹理采样,由于两者均使用单个UV,因此被合并为单个虚拟纹理堆栈:

如果你的项目使用不同的UV,则使用两个 虚拟纹理堆栈 获取将增加开销:

第一个实例共使用三个纹理获取:两个查找和一个堆栈。由于VT采样使用相同的UV,UE合并其堆栈可省略一个纹理获取(texture fetch)。第二个示例共有四个纹理获取:两个查找和两个堆栈。VT纹理采样使用的底色UV和法线纹理采样的不同,意味无法将这两者合并为一个堆栈

其他材质说明
  • 无论大小,各纹理的流送虚拟纹理都将被UE分为固定大小的图块。最低分辨率的mip受图块大小的限制。多数情况下此并非问题,但由于缺乏低分辨率mip,具有大量噪点或高细节的纹理可能会出现失真或龟纹效果。记住:此操作也会导致潜在的GPU性能开销,但很难在实践中测量
09


限制
虚拟纹理和普通纹理通常可互换,但同时存在部分限制,并将增加开销:
  • 纹理大小必须是2的幂次方,但本质上不要求为正方形。然而,在当前实现中其能更有效地利用内存。
  • 在随机区域,支持mip间的三线性过滤。使用临时抗锯齿(TAA)时,其与常规三线性过滤几乎无差别,但有时会导致些许可见噪点。
  • 对各向异性过滤的支持受 图块边界(Tile Border) 设置大小的限制。默认值4表示可使用比纹理典型各向异性过滤更小的过滤,但增大此值会增加内存占用率。
  • VT流送是自然反应的,意味渲染帧要求加载之前,CPU不知道需加载给定VT图块。因此,摄像机在场景中移动时可能会突然出现一些可见物体,特别是加载更高分辨率VT图块时

官方文档

纹理流送:
https://docs.unrealengine.com/5.0/zh-CN/texture-streaming-in-unreal-engine/
虚拟纹理:

https://docs.unrealengine.com/5.0/zh-CN/virtual-texturing-in-unreal-engine/
B站:虚幻引擎官方[中文直播]第18期 | Virtual Texture(虚拟纹理)的理解和应用 | Epic 李文磊https://www.bilibili.com/video/BV1KK411L7Rg?t=4.5[UnrealCircle深圳]深入虚拟纹理 | Epic 李杨珂
https://www.bilibili.com/video/BV1CA411N7Qa?t=1361.1
软件虚拟纹理
https://www.researchgate.net/publication/259000438_Software_Virtual_Textures

好!本期笔记分享就到这里,我们下期见!
微信公众号:Game艺视界
使用道具 <
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表