From 5401ab827253ed20b3a5fa89d0e096a751410c8c Mon Sep 17 00:00:00 2001 From: BlueRose <378100977@qq.com> Date: Sat, 29 Jul 2023 19:50:30 +0800 Subject: [PATCH] vault backup: 2023-07-29 19:50:30 --- .../RenderFeature/VirtualTexture学习笔记.md | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 03-UnrealEngine/Rendering/RenderFeature/VirtualTexture学习笔记.md diff --git a/03-UnrealEngine/Rendering/RenderFeature/VirtualTexture学习笔记.md b/03-UnrealEngine/Rendering/RenderFeature/VirtualTexture学习笔记.md new file mode 100644 index 0000000..989bb7b --- /dev/null +++ b/03-UnrealEngine/Rendering/RenderFeature/VirtualTexture学习笔记.md @@ -0,0 +1,36 @@ +--- +title: VirtualTexture学习笔记 +date: 2023-07-29 12:26:09 +excerpt: +tags: VirtualTexture +rating: ⭐ +--- + +# 前言 +学习文章: +- https://zhuanlan.zhihu.com/p/138484024 +- + +**Streaming VT** = 显存优化,但需要额外消耗一些性能。 +**Runtime VT** = 性能优化,可以预先将材质缓存到一张巨大的虚拟RT上,一般用于地形。 + +# VirtualTexture +## 1. Software Virtual Texture +在MegaTexture的基础上,id Software进一步提出了Virtual Texture的概念,这个概念取自于Virtual Memory,与虚拟内存类似的是,一个很大的Texture将不会全部加载到内存中,而是根据实际需求,将需要的部分加载。与虚拟内存不同的是,它不会阻塞执行,可以使用更高的mipmap来暂时显示,它对基于block的压缩贴图有很好的支持。 基本思路是,会将纹理的mipmap chain分割为相同大小的tile或page,这里的纹理叫虚纹理,然后通过某种映射,映射到一张内存中存在的纹理,这里的纹理是物理纹理,在游戏视野发生变化的时候,一部分物理纹理会被替换出去,一部分物理纹理会被加载。 + + + +![](https://pic4.zhimg.com/80/v2-8dd6e9e7750884bbab8d6da5fe221ec3_720w.webp) + +这样的机制不仅仅减少了带宽消耗和内存(显存)消耗,也带来了其他好处,比如有利于合批,而不用因为使用不同的Texture而打断合批,这样可以根据需求来组织几何使得更利于Culling,当然合批的好处是states change 变少。LightMap也可以预计算到一张大的Virtual Texture上,用来合批。 + +**其关键在于地址映射**,比如四叉树映射: +![](https://pic1.zhimg.com/80/v2-754fb67195882775cb95dcb1d2366ad8_720w.webp) + +# RuntimeVirtualTexture +使用步骤: +1. 创建RuntimeVirtualTexture、RuntimeVirtualTextureActor、Landscape资产。 +2. 在RuntimeVirtualTextureActor指定RuntimeVirtualTexture与Landscape资产,并且复制Landscape的Bound。 +3. 在Landscape的RenderToVirtualTexture中指定RuntimeVirtualTexture资产。 +4. 修改Landscape的材质,分别添加VirtualTexture Input、Export节点。 顺便也可以修改VirtualTexturePassType(某些需求只需要将结果渲染到VT中,无需在MainPass中渲染)。 +5. 此时Landscape的材质大概率显示不正确,这时需要添加VirtualTextureOutputLevel来计算UV(为了匹配非VT情况,可以加入RuntimeVirtualTextureReplace节点进行判断。 \ No newline at end of file