《PowerVR图像架构:延迟渲染.docx》由会员分享,可在线阅读,更多相关《PowerVR图像架构:延迟渲染.docx(2页珍藏版)》请在第一文库网上搜索。
1、PowerVR图像架构:延迟渲染在上一篇文章中,我谈到了GPU架构的工作原理。这是一个比较新颖的架构,与其他架构的工作方式不太相同,我们称之为基于区块贴图的延迟渲染或TBDRo从概念而言,其基本前提非常简单。首先,我们把屏幕分成小的区块,使之操作简单且大小适于完全放在GPU上,大量减少访问内存。这部分我先做阐释,不熟悉此部分的请先行了解。第二部分需使用第一部分生成的信息一一渲染贴图的原语列表一一尽可能多地延迟随后生成的像素,所以渲染尽量不会放过每个细节之处。让我们先来看看硬件的工作。TBDR上的数据报告:PowerVRRogUe的延迟渲染参数缓冲区在我的上一篇文章中提到,硬件所需完成的最后一件
2、事便是填满参数缓冲区(PB)o回顾一下,PB本质上是一个打包的区块贴图列表,填充了形成贴图的转换几何图,硬件同样可以对其进行有效的计算。记住,我们不必使用简单且效率低下的方法来计算究竟是哪个几何对象构成了贴图。实际上,我们可以准确地计算贴图,因而不必要浪费时间处理那些最终不会对贴图产生影响的原语。因此,GPU建立了中间数据结构,并具有完整的三角形列表。接下来便是光栅化,并把那些三角形变成像素,且在内核中对像素进行着色。对于我们的架构而言,光栅化尤为复杂:驱动GPU效率的关键事物投射在这部分管道中,接下来让我们逐步了解相关过程。另外,一些读者可能会很惊讶地发现,光栅化并不仅仅发生在一个简单的称之
3、为光栅格的单片上。在所有GPU中,无论大小,都是由许多子块组成的比较紧凑的面向数据流的管道在运行。使之在不成为影响吞吐量的瓶颈下保持平衡则非常困难,且由于任务的性质,固定功能逻辑比可编程着色器内核更加合适。提取PB数据至内核中首先,我们需要从内存中提取贴图列表至内核中,然后解析他们的状态、位置数据和一些控制位,使GPU可以恰当的运行几何对象。数据可以被压缩,所以区块负责读取数据,即我们所说的参数获取,其也能解压数据。由于区块存在内存访问,一些获取内存延迟的情况必须容许,所以可以从内存中预读取及突发读取数据,使PB中的数据可以再次进入内核中。目前为止,一切很顺利。边缘方程既然我们已经把三角形放置
4、在内核中,接下来便是将它们变成像素。注意,我们是在3D而非2D空间处理几何对象,而您的屏幕是一个2D平面。所以我们需要采取某种方式,将渲染的3D计算视图映射到2D屏幕上。接受来自参数提取物的原语的硬件字节,在栅格化像素的过程中负责设置定义三角形边界的三角方程,因此我们在屏幕上看到的不仅仅是点,还有三角形的呈现。由于涉及到一些计算,硬件字节在固定的设置下有其专用且实际上非常复杂的浮点单元。接下来便是三角形的边界计算方程。三角形共享准确深度值时,深度偏置可以起作用。这样便不必纠结于哪个边界应该可视化,且一些角度的计算可以为进一步形成的区块提供有关几何图像构成的信息。平面方程有了一组边界方程,便可结
5、合边界方程定义三角几何,犹如3D空间中的三棱镜。在头脑中想象图像可能有违直觉,因为您从未真正看过其3D效果。您需要一些想象的线条来构建可视化的图像。其次,需要一个穿过棱镜的2D切片,这样当三角形的2D效果呈现在屏幕上时,可以基本拉平图像,并找出棱镜的字节。这是一个重要的里程碑。要实现上述过程,便需要一个四阶方程来定义通过棱镜的平面片,而棱镜则由边界方程定义。在硬件中评估四阶方程,其给出的平面片可以映射到贴图的像素中。接下来对屏幕贴图做一些阐述以助于理解此部分内容。贴图大小任何贴图架构都要在贴图大小和存储空间之间进行一些权衡。在我们的案例中,我们需要一些用于参数缓冲区的存储空间来储存贴图的三角形列表。而这个存储空间位于系统内存中。其次,还需要GPU芯片内的存储空间,用于处理贴图中的像素。因此对于这两个贴图理论上的尺寸,一个贴图是另一个的四倍(两倍X轴和两倍Y轴),且渲染分辨率是1080po显然,如果尺寸较小,则需要较多的贴图,这意味着参数缓冲区中需要有更多的贴图列表,但可与贴图交叉的三角形则更少,因此所需GPU存储也更小。反之亦然。我们只需较少的贴图列表,因为贴图不可能足够多,但每个贴图的三角形平均数量则可能会增多,且由于每个贴图是像素的4倍,因此需要4倍的GPU存储空间。