在实时图形应用程序中,我相信帧缓冲区是保存最终光栅化图像的内存,将为单帧显示。
对深帧缓冲区的引用似乎意味着正在进行一些缓存(顶点和材质信息),但不清楚这些数据的用途或方式。
与标准帧缓冲区相关的深帧缓冲区具体是什么?它的用途是什么?
谢谢。
答案 0 :(得分:3)
Google是你的朋友。
这可能意味着两件事:
您存储的不仅仅是每像素RGBA。例如,您可能正在存储法线或其他光照信息,以便稍后重新点亮。
您每个像素存储多个颜色和深度值。例如,这有助于支持与订单无关的透明度。
答案 1 :(得分:2)
z缓冲区类似于颜色缓冲区,通常用于存储3D场景的“图像”,但它不存储颜色信息(以rgb像素的2D数组的形式),而是存储距离相机通过帧缓冲区的每个像素可见的对象。
传统上,对于帧中的任何给定像素,z缓冲区仅仅会消除相机到3D中最近对象的距离。关于这种技术的好处是,如果用z缓冲区渲染了2个图像,那么它们可以使用例如2D程序重新组合,但是来自图像A的像素来自像素的“前面”。图像“B”将组成在重新组合的图像之上。为了确定这些像素是否在前面,我们可以使用存储在图像的相应z缓冲区中的信息。例如,假设我们想要在像素坐标(100,100)处组合来自图像A和B的像素。如果在坐标(100,100)处存储在z缓冲区中的距离(z值)对于图像A是9.13而对于图像B是5.64,则在重构图像C中,在像素坐标(100,100)处,我们将放置来自图像B的像素(因为它对应于3D场景中位于对象前面的图像,该图像在图像A中通过该像素可见)。
现在,当物体是不透明的时候,这种方法很有效因此,当对象是透明的时(例如当我们渲染体积,云或透明表面层时),我们需要存储多个z值。另请注意,“不透明度”会随着体积对象的密度或透明层数的增加而变化。无论如何,只是说深度图像或深度缓冲区在技术上就像一个z缓冲区,而不是只存储一个深度或z值,它不仅存储超过一个深度值,但也存储对象在这些深度值中的每一个的不透明度。
一旦我们存储了这些信息,就可以在后期制作中正确地(准确地)将2个或更多图像与透明胶片一起重新组合。例如,如果渲染2个云并且这些云在深度上重叠,那么它们的可见性将被正确地重新组合,就像它们在同一场景中一起渲染一样。
为什么我们会使用这种技术呢?通常因为包含体积元素的渲染场景通常很慢。因此,最好从场景中的其他对象中单独渲染它们,这样,如果需要对实体对象进行调整,则无需再次重新渲染体积元素。
这种技术大多受到Pixar的欢迎,在他们开发和销售的渲染器中(Prman)。 “阿凡达”(新西兰的Weta Digital)是第一部大量使用深度合成的电影。
请参阅:http://renderman.pixar.com/resources/current/rps/deepCompositing.html
这种技术的缺点:深度图像非常沉重。它需要为每个像素存储许多深度值(并且这些值存储为浮点数)。根据图像分辨率和场景深度复杂性,这些图像大于几百到几千兆字节并不是不常见的。此外,您可以正确地重新组合体积对象,但如果您在同一场景中一起渲染对象,它们将不会相互投射阴影。这使得场景管理比通常情况稍微复杂一些......但是这通常是正确处理的。
可以在scratchapixel.com上找到大量此类信息(供将来参考)。