2015-07-20 93 views
2

我从头开始制作3D渲染器,没有外部库。正如我试图优化的那样,我想知道画家的算法是否比Z-Buffering快。假设我正在渲染一个相同的立方体,这会更快。但我不希望相交的多边形搞乱,所以我可能想要实施纽维尔的Painter算法版本,该算法切割多边形,使它们不会相交和混乱。Z缓冲通常比Painter算法更快吗?

所以我能有什么将平均更快渲染一个多维数据集的顺序:

Painter's Algorithm

Newell's Painter's Algorithm

Z-Buffering

此外,如果任何人有任何其他好的建议我可以可能使用?

+0

这很愚蠢,我20分钟前就问这个问题,在“最新”上已经是8页了 – Hyden

回答

3

在计算机图形画家算法被称为Z-Sorting

有时有时快不行。这取决于您拥有多少个对象,您渲染的分辨率有多大,以及您需要的坐标精度。

Z-Buffering为更好:

  • 高对象/多边形数
  • 动态场景(对象或相机的移动/旋转)

    它需要额外的缓冲器中相同的分辨率渲染后的图像,并且每个片段执行单个条件(每个多边形的渲染像素甚至看不见)。在渲染之后,每个可见像素的坐标都处于许多高级渲染技术所需的位置。

Z-Sorting是为了更好:

  • (相对)静态场景或非常低的对象/多边形数
  • 如果很少的内存是在处置(上8位电脑最3D使用的应用程序Z-sorting,因为没有用于Z-buffer的内存)

    它需要索引缓冲区来存储所有的对象/多边形索引,并且它对每个场景变化执行排序(通过Z坐标排序许多对象可能会很慢)。如今它被使用,因为:

  • 透明的多边形需要Z分级

  • 如果程序已经ž分拣现场进行一些其他的原因,因此利用它

有时这两种技术结合在一起

尤其对于高动态范围的Z坐标,因为标准Z缓冲区(24/32位宽)在整个范围内的分辨率非常差。它可以通过使用线性或对数刻度Z-buffer来部分解决,但是如果您需要在全范围内定义准确度/分辨率,则需要使用某种类型的Z分类组合,并将更多frustrums合并在一起,或将自定义Z-Buffer与高动态范围,目前不支持HW

+0

谢谢你的提问。 – Hyden