什么是深帧缓冲区?

问题描述 投票:2回答:2

在实时图形应用程序中,我认为帧缓冲区是保存将在单个帧中显示的最终光栅化图像的内存。

参考深帧缓冲区似乎意味着正在进行一些缓存(顶点和材质信息,但是尚不清楚此数据是用于什么或如何使用的。

深度帧缓冲区相对于标准帧缓冲区有什么特殊用途,其用途是什么?

谢谢。

graphics buffer framebuffer
2个回答
3
投票

Google是您的朋友。

这可能意味着两件事:

  1. 您每像素存储的不仅仅是RGBA。例如,您可能存储法线或其他照明信息,以便以后可以进行重新照明。

  2. 您在每个像素中存储多个颜色和深度值。例如,这对于支持与订单无关的透明性很有用。


2
投票

Z缓冲区类似于通常用于存储3D场景的“图像”的颜色缓冲区,但是它不是存储颜色信息(以rgb像素的2D数组形式),而是存储到摄像机到通过帧缓冲区的每个像素可见的对象。

传统上,对于帧中的任何给定像素,z缓冲区仅会疼痛从相机到3D中最近的对象的距离。这项技术的好处是,如果已使用z缓冲区渲染了2张图像,则可以使用2D程序重新合成它们,但是图像A中的像素位于“ A”像素的“前”图像“ B”将被构图在重新构图的图像之上。要确定这些像素是否在前面,我们可以使用存储在图像各自的z缓冲区中的信息。例如,假设我们要在像素坐标(100,100)处合成图像A和B的像素。如果在z缓冲区的坐标(100,100)处存储的距离(z值)对于图像A为9.13,对于图像B为5.64,则在重构图像C中,在像素坐标(100,100)下,我们应将图像B中的像素(因为它对应于3D场景中位于对象前面的表面,该表面可通过图像A中的该像素可见)。

现在,当对象不透明时效果很好,但当对象透明时效果不佳。因此,当对象是透明的时(例如,当我们渲染体积,云或透明表面层时),我们需要存储多个z值。还要注意,“不透明度”随体积对象的密度或透明层数的增加而变化。无论如何,仅是说deep imagedeep buffer在技术上就像一个z缓冲区,但它不仅存储一个深度或z值,还存储了一个以上的深度值,还存储了在这些深度值的每个深度处对象的不透明度。

一旦我们存储了此信息,就可以在后期制作中正确(准确地)重新合成2张或更多张带有透明胶片的图像。例如,如果渲染2个云并且这些云在深度上重叠,则将正确地重新构成它们的可见性,就像它们是在同一场景中一起渲染一样。]

我们为什么要完全使用这种技术?通常是因为渲染包含体积元素的场景通常很慢。因此,最好将它们与场景中的其他对象分开渲染,这样,如果您需要对实体对象进行调整,则无需再次重新渲染体积元素。

[这项技术在Pixar的开发和销售中(Prman)大多受到Pixar的欢迎。 《阿凡达》(新西兰的Weta Digital)是首批大量使用深度合成的电影。

参见:http://renderman.pixar.com/resources/current/rps/deepCompositing.html

此技术的缺点:深层图像非常沉重。它要求每个像素存储许多深度值(这些值存储为浮点数)。此类图像通常要大于几百到几GB,这取决于图像分辨率和场景深度的复杂性。同样,您可以正确地重组体对象,但是它们不会相互投射阴影,如果您在同一场景中一起渲染对象,则会产生阴影。这使场景管理比通常的稍微复杂一些,...但是通常可以正确处理。

可以在scratchapixel.com上找到很多此类信息(以供将来参考)。>>

© www.soinside.com 2019 - 2024. All rights reserved.