Z-Buffering 通常比 Painter 算法更快吗?
Is Z-Buffering generally faster than the Painter's Algorithm?
我正在 Java 中从头开始制作 3D 渲染器,没有外部库。当我尝试优化时,我想知道 general/average 答案 Painter 算法是否比 Z-Buffering 更快。假设我正在渲染一个相同的立方体,这样会更快。但我不希望相交的多边形弄乱,所以我可能想实施 Newell 版的 Painter 算法,该算法切割多边形,这样它们就不会相交和弄乱。
那么我可以得到渲染单个立方体的平均速度更快的顺序吗:
另外,如果有人有任何其他好的建议我可以使用吗?
在计算机图形学中,画家算法称为Z-Sorting
有时速度更快,有时则不然。这取决于您有多少对象,您渲染的分辨率有多大以及您需要的 Z
坐标精度。
Z-Buffering
更适合:
高object/polygon计数
动态场景(物体或相机是moving/rotating)
它需要与渲染图像具有相同分辨率的额外缓冲区,并且它对每个片段执行单一条件(每个多边形的渲染像素,甚至是看不见的像素)。渲染后,每个可见像素的 3D z
坐标可供使用,这是许多高级渲染技术所必需的。
Z-Sorting
更适合:
(相对)静态场景还是很低object/polygon计数
如果可用内存很少(在 8 位计算机上,大多数 3D 应用程序使用 Z-sorting
,因为 Z-buffer
)
它需要索引缓冲区来存储所有 object/polygon 索引,并且它会在每个场景变化时执行排序(按 Z 坐标对许多对象进行排序可能会很慢)。现在使用它是因为:
透明多边形需要 Z 排序
如果程序出于其他原因已经有 Z 排序的场景,那么它会利用它
有时这两种技术结合在一起
特别是对于 Z
坐标的高动态范围,因为标准 Z 缓冲区(24/32 位宽)在整个范围内的分辨率非常差。它可以通过使用 Z-buffer
的线性或对数刻度来部分解决,但是如果您需要在整个范围内定义 accuracy/resolution,则需要使用某种与 Z 排序的组合并组合更多 frustrums 一起使用或使用当前 HW
不支持的具有高动态范围的自定义 Z-Buffer
我正在 Java 中从头开始制作 3D 渲染器,没有外部库。当我尝试优化时,我想知道 general/average 答案 Painter 算法是否比 Z-Buffering 更快。假设我正在渲染一个相同的立方体,这样会更快。但我不希望相交的多边形弄乱,所以我可能想实施 Newell 版的 Painter 算法,该算法切割多边形,这样它们就不会相交和弄乱。
那么我可以得到渲染单个立方体的平均速度更快的顺序吗:
另外,如果有人有任何其他好的建议我可以使用吗?
在计算机图形学中,画家算法称为Z-Sorting
有时速度更快,有时则不然。这取决于您有多少对象,您渲染的分辨率有多大以及您需要的 Z
坐标精度。
Z-Buffering
更适合:
高object/polygon计数
动态场景(物体或相机是moving/rotating)
它需要与渲染图像具有相同分辨率的额外缓冲区,并且它对每个片段执行单一条件(每个多边形的渲染像素,甚至是看不见的像素)。渲染后,每个可见像素的 3D
z
坐标可供使用,这是许多高级渲染技术所必需的。
Z-Sorting
更适合:
(相对)静态场景还是很低object/polygon计数
如果可用内存很少(在 8 位计算机上,大多数 3D 应用程序使用
Z-sorting
,因为Z-buffer
)它需要索引缓冲区来存储所有 object/polygon 索引,并且它会在每个场景变化时执行排序(按 Z 坐标对许多对象进行排序可能会很慢)。现在使用它是因为:
透明多边形需要 Z 排序
如果程序出于其他原因已经有 Z 排序的场景,那么它会利用它
有时这两种技术结合在一起
特别是对于 Z
坐标的高动态范围,因为标准 Z 缓冲区(24/32 位宽)在整个范围内的分辨率非常差。它可以通过使用 Z-buffer
的线性或对数刻度来部分解决,但是如果您需要在整个范围内定义 accuracy/resolution,则需要使用某种与 Z 排序的组合并组合更多 frustrums 一起使用或使用当前 HW
Z-Buffer