本文主要是介绍翻译 Albert Julian Mayer 关于虚拟纹理的论文(3. 概述),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
第3章:概述
本章介绍了整篇论文中使用的术语,并简要介绍了“虚拟纹理”及其挑战。
3.1 术语
目前,在纹理缓存领域存在术语不匹配的情况。一些论文将术语 “虚拟纹理” 应用于所有 “使用部分驻留在内存中的纹理的系统”,特别是类似 Clipmapping 的系统 [TSH09]、 [EC06]、 [Wei04]、 [SLT+07]。而其他论文和资源将这个术语应用于一种更新的、截然不同的大纹理支持技术,该技术适用于任意几何[MG08] 、[CESL10]、 [HPLdW10]。为了区分,Barrett 将新的虚拟纹理技术称为 “稀疏虚拟纹理”,但这个术语尚未获得普遍接受。要解决术语不匹配问题,一种方式是为新技术发明一个新名称以将其与旧技术区分开来(就像 Barrett 尝试过的那样),第二种方式是将术语“虚拟纹理”仅应用于新技术。我们选择使用第二种方式(也是由于缺乏更适合新技术的名称),即,在本文中,术语“虚拟纹理”仅应用于适用于任意几何体的系统。将 Clipmapping 称为“虚拟纹理”是没有必要的,我们可以直接使用它的原始名称:“Clipmapping”。而且,将这个新技术称为“虚拟纹理”也是有道理的,因为它的表现与“虚拟内存”的基本概念很相似,而旧技术则不是。
此外,应该注意的是,现存的少量虚拟纹理的资源不使用通用术语。 下表是一些最重要术语的对比。 我们选择使用与 [Bar08] 非常相似的术语,这与 [MG08] 和 [LDN04] 的术语形成对比。我们将虚拟纹理的图块称为“tile(图块)”,而非术语“page”,尽管如此,我们仍将 “翻译纹理” 称为“pagetable texture (页表纹理)”,原因是“pagetable(页表)”是计算机科学中的一个既定术语。
这篇论文 | Mittring [MG08] | Hollemeersch et al. [HPLdW10] | Lefebvre [LDN04] |
---|---|---|---|
Physical Texture(物理纹理) | Tile Cache | Physical Page Texture | Tile Pool |
Pagetable Texture(页表纹理) | Indirection Texture | Page Table Texture | Indirection Grids |
Tile Determination(图块确定) | Computing Local LOD | Page Resolver | Texture Load Map Comp |
3.2 概括
虚拟纹理属于一种“纹理图块缓存方法”。这意味着,它需要确定整个纹理数据中当前所需的图块,然后将这些图块流式传输到 GPU,并仅从这些所需的图块进行渲染。虚拟纹理需要将场景的所有纹理组合成一个非常大的纹理。 作为预处理步骤,该纹理及其所有 mipmap 级别被平铺成大小相同的图块。 在运行时,虚拟纹理系统有三个主要任务,如下图所示。
- 图块确定:
确定哪些图块是当前渲染所必需的,也即哪些图块是在当前虚拟摄像机的位置与方向下可见的。 - 图块流加载:
需要的图块将从存储它的位置流加载到GPU上的纹理中(物理纹理)。 - 虚拟纹理着色器:
特殊的片段着色器将使用一个“包含物理纹理中所有图块坐标的纹理”(页表纹理),将虚拟纹理坐标转换为用于在物理纹理中采样的正确坐标。
与旧的纹理缓存方法相比,虚拟纹理的主要优势在于虚拟纹理片段着色器中的封装,它可以从一个小的图块缓存纹理进行渲染,而不会强制进行不必要的细分或昂贵的裁剪和遮罩。这得益于纹理采样相关的可编程显卡的启用。 以前的方法仅限于地形渲染和与图块对齐的几何图元 [TMJ98]。 虚拟纹理相对于以前的技术水平的另一个主要好处是,确定所需图块的效率被大大提升了——以前的方法通常依赖于逐多边形的几何计算 [CE98],考虑到多边形的数量,这在大型场景是不可行的。第三个重要的特性是,系统不会在所需图块流加载时停顿,虚拟纹理会继续全速渲染,而使用较低分辨率的回退图块。
3.3 细节概述
下图提供了对虚拟纹理系统主要部分的更详细概述。
虚拟纹理和它整个 mipmap 链存储在预先计算的、大小相同的图块中。如果虚拟纹理不仅要应用于连续网格,它还将由不同对象的多个纹理组成,因此本质上是一个非常大的纹理图集 [Cor04]。除了虚拟纹理的生成和预平铺之外,还必须对几何体纹理的方式进行处理,让它看起来就像虚拟纹理确实存在于内存中一样。 因此,我们将这些纹理坐标命名为 “虚拟纹理坐标”,因为它们对应的是虚拟纹理。与任何纹理图集 [Cor04] 一样,必须偏移纹理坐标以补偿单个大纹理中多个纹理的组合。
- 图块确定:
该子系统确定虚拟纹理的哪些图块是渲染所必需的,即从当前虚拟摄像机的位置和方向上是可见的。这通常通过使用特殊着色器渲染的 pre-pass 来完成,该着色器输出每个像素处的可见图块的地址。 该 pre-pass 的结果被读回 CPU。 - 图块流加载和纹理更新:
必要的图块从其存储位置(例如硬盘)加载,并流式传输到存储在 GPU 上的纹理(“物理纹理”)。图块流送系统由一个或多个后台线程组成,这些线程连续对请求的图块进行加载和解压。纹理更新是在主线程上运行的,就在渲染 main pass 之前,随后被流式传输到物理纹理。 “页表纹理” 随着从 “虚拟纹理坐标” 到 “物理纹理坐标” 的转换而更新。具体来说,页表纹理中每个像素都对应于虚拟纹理中的一个图块——如果虚拟纹理在 base level 上是 256平方 个图块,那么“页表纹理”就是一个 256平方 像素的纹理。页表纹理中的每个像素都包含它在物理纹理中表示的图块的存储地址。对于当前未存储在物理纹理中的图块,“fall- back entry”的地址可以存储在页表纹理中。这意味着,邻居存储的是覆盖相同纹理空间但分辨率更低的图块的地址。 - 虚拟纹理着色器:
虚拟纹理片段着色器使用页表纹理将虚拟纹理坐标(几何体纹理采样时的坐标)转换为用于从物理纹理中采样正确图块的物理坐标。由于所有虚拟纹理对象共享相同的虚拟纹理,因此它们都可以通过单个DrawCall进行渲染。为了获得用于渲染正确图块的地址,着色器对页表纹理进行采样时将使用虚拟纹理坐标和一个适当的偏移,此偏移是为了补偿页表纹理和虚拟纹理之间的大小差异。此纹理采样操作将会产生用于在物理纹理中渲染适当图块的地址,如果当前未存储图块则是下一个较低分辨率图块的地址。另一种针对页表纹理中 “fallback entries” 的措施是:调整着色器以递增的偏移再从页面表纹理中进行采样,以此循环直到找到有效地址。
必须以“图块确定”、“纹理更新”、“在 main pass 中用虚拟纹理着色器渲染” 这样的顺序在每一帧执行。而图块的流加载可以在后台线程中异步执行。
3.4 挑战
在虚拟纹理系统的实现过程中存在两个主要挑战。第一个挑战是正确性,这意味着虚拟纹理产生的视觉输出应该与理论上支持这些大纹理尺寸的系统相同。另一个挑战是性能。虚拟纹理需要与普通渲染相似的性能,或对比其他大尺寸纹理方案具有竞争力。在实践中,这两个问题是紧密交织在一起的,因为如果可见纹理块的流传输速度不够快,则会使用较低分辨率的回退,从而产生可见的瑕疵。另外,一些其他的几个问题构成了第三个挑战。请注意,这些挑战并非预先知道的,而是在论文的实践开发过程中逐步确定。因此,并非所有这些挑战都在我们的实现中得到了完美解决。
3.4.1 正确性
GPU 内的精度限制是影响虚拟纹理正确性的重要因素,尤其是在增加虚拟纹理大小时 [MG08]。 GPU 编程模型中的限制——比如循环中纹理采样的不确定性 [LK06] 也是个限制。 如果想为虚拟纹理启用正确的纹理过滤(或 DXT 压缩),则需要考虑更多的东西 [vW09b]。当渲染过程中缺少必要的图块时,正确性也会受到影响——具有异步的纹理流加载的虚拟纹理系统就其本身而言也很容易出现此类瑕疵。瑕疵的数量取决于图块流加载的速度、图块确定系统 “预见未来” 的能力、以及必要图块的数量和帧之间的差异(见下文)。
3.4.2 性能
虚拟纹理系统是一个复杂的系统,性能问题可能由单个组件太慢,或这些组件在管线中的交互所引起。影响虚拟纹理系统性能的一个关键操作是图块确定。这通常是通过在 pre-pass 中使用特殊着色器渲染场景来完成的,该着色器输出每个像素的可见图块坐标 [Bar08]。 这种方法仅在以较低分辨率执行时,或在将结果缓冲区读回 CPU 之前压缩时才可行。那么就需要考虑问题“结果的回读是否应该延迟到下一帧”,这就是组件间交互影响性能的例子。
对运行时性能(以及正确性)影响最大的因素实际上是虚拟纹理的布局,它是在预处理步骤中确定的。 虚拟纹理的布局会影响渲染过程中需要多少图块,以及在帧和帧之间该纹理集的差异程度。
3.4.3 其他
还有许多与虚拟纹理相关的其他挑战:透明几何体的支持、使瑕疵不那么明显、处理非精确图块的确定、应对 GPU 较低的最大纹理尺寸限制、图块缓存策略、贴花支持、虚拟纹理内容管线(即如何生成虚拟纹理场景和虚拟纹理本身)等。
引用
[TSH09] Javier Taibo, Alberto Seoane, and Luis A. Herna´ndez. Dynamic virtual textures. In Journal of WSCG, Volume 17, Number 1, 2009, 2009.
[EC06] Anton Ephanov and Chris Coleman. Virtual texture: A large area raster resource for the GPU. In Interservice/Industry Training, Simulation, and Education Conference (I/ITSEC) 2006, 2006.
[Wei04] Li-Yi Wei. Tile-based texture mapping on graphics hardware. In SIG- GRAPH ’04: ACM SIGGRAPH 2004 Sketches, pages 55–63, New York, NY, USA, 2004. ACM.
[SLT+07] Antonio Seoane, Rube´n Lo´pez, Javier Taibo, Alberto Jaspe, and Luis Herna´ndez. Hardware-independent clipmapping. In WSCG 2007, The 15th International Conference in Central Europe on Computer Graphics, Visualization and Computer Vision 2007, pages 177–183, 2007.
[MG08] Martin Mittring and Crytek GmbH. Advanced virtual texture topics. In SIGGRAPH ’08: ACM SIGGRAPH 2008 classes, pages 23–51, New York, NY, USA, 2008. ACM.
[CESL10] Mattha¨us G. Chajdas, Christian Eisenacher, Marc Stamminger, and Syl- vain Lefebvre. Virtual texture mapping 101. In W. Engel, editor, GPU Pro: Advanced Rendering Techniques. A K Peters, 2010.
[HPLdW10] Charles-Frederik Hollemeersch, Bart Pieters, Peter Lambert, and Rik Van de Walle. Accelerating virtual texturing using CUDA. In W. Engel, editor, GPU Pro: Advanced Rendering Techniques. A K Peters, 2010.
[Bar08] Sean Barrett. Sparse virtual textures. http://silverspaceship.com/src/svt/, 2008.
[LDN04] Sylvain Lefebvre, Jerome Darbon, and Fabrice Neyret. Unified texture management for arbitrary meshes. Technical Report RR5210-, INRIA, may 2004.
[TMJ98] Christopher C. Tanner, Christopher J. Migdal, and Michael T. Jones. The clipmap: a virtual mipmap. In SIGGRAPH ’98: Proceedings of the 25th annual conference on Computer graphics and interactive techniques, pages 151–158, New York, NY, USA, 1998. ACM.
[CE98] D Cline and PK Egbert. Interactive display of very large textures. Pro- ceedings of the conference on Visualization’98, page 350, 1998.
[Cor04] NVIDIA Corporation. Texture atlas whitepaper - improve batch- ing using texture atlases. http://download.nvidia.com/ developer/NVTextureSuite/Atlas_Tools/Texture_ Atlas_Whitepaper.pdf, 2004.
[LK06] Bill Licea-Kane. The OpenGL pipeline newsletter - volume 001 - new texture functions with awkward names to avoid ugly artifacts. http://www.opengl.org/pipeline/article/vol001_5/, 2006.
[vW09b] J.M.P. van Waveren. id tech 5 challenges - from texture virtualization to massive parallelization. http://s09.idav.ucdavis.edu/ talks/05-JP_id_Tech_5_Challenges.pdf, 2009.
这篇关于翻译 Albert Julian Mayer 关于虚拟纹理的论文(3. 概述)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!