joh*_*ers 13 opengl 3d graphics opengl-es opengl-es-2.0
我已经看到偶尔的文章建议在将它们发送到OpenGL(对于任何OpenGL变体)时,将顶点从距离相机最近到最远的位置排序.这样做的原因是,如果顶点位于已经渲染的另一个顶点后面,OpenGL将无法完全处理/渲染顶点.
由于按深度排序顶点是任何项目的昂贵组成部分,因为这种排序通常会发生变化,这种设计有多常见或必要?
我以前认为OpenGL将"查看"提交的所有顶点,并在渲染整个批处理之前处理它们自己的深度缓冲,无论它们的顺序如何.但是,如果事实上一个顶点在另一个顶点之前被渲染到屏幕上,那么我可以看到排序如何有益于性能.
是否需要前后绘制才能优化渲染?
一旦基元被栅格化,其z值可用于执行"早期z杀死",跳过运行片段着色器.这是从前到后渲染的主要原因.提示:当您具有透明(alpha纹理)多边形时,必须从后向前渲染.
OpenGL规范定义了一个状态机,并没有指定渲染实际发生的顺序,只是结果应该是正确的(在一定的容差范围内).
编辑清晰:我想要上面说的是硬件可以为所欲为,只要原语似乎已以被处理
但是,大多数GPU都是流处理器,它们的OpenGL驱动程序不会"批处理"几何体,除非出于性能原因(最小DMA大小等).如果您输入多边形A后跟多边形B,则它们将一个接一个地送入管道,并且彼此独立地处理(大部分).如果在A和B之间有足够数量的多边形,那么A很有可能在B之前完成,如果B在A之后,它的碎片将通过"早期z杀死"被丢弃.
为清晰起见编辑:我上面要说的是,由于hw没有"批量"几何,它不能自动进行前后排序.
归档时间: |
|
查看次数: |
4495 次 |
最近记录: |