Arm*_*yan 276 c opengl cpu optimization gpu
我正在阅读一个很棒的OpenGL教程.这真的很棒,相信我.我目前的主题是Z-buffer.除了解释它的全部内容之外,作者还提到我们可以执行自定义深度测试,例如GL_LESS,GL_ALWAYS等.他还解释了深度值的实际含义(顶部是哪个,哪个不是)也可以定制.到目前为止我明白了.然后作者说了一些令人难以置信的事:
zNear的范围可以大于zFar的范围; 如果是,则窗口空间值将根据与观看者最近或最远的内容来反转.
早些时候,据说窗口空间Z值为0,最接近1.但是,如果我们的剪辑空间Z值被否定,则1的深度将最接近视图,0的深度将最远.然而,如果我们翻转深度测试的方向(GL_LESS到GL_GREATER等),我们得到完全相同的结果.所以这真的只是一个惯例.事实上,翻转Z的标志和深度测试曾经是许多游戏的重要性能优化.
如果我理解正确,性能方面,翻转Z的符号和深度测试只不过是将<比较改为>比较.所以,如果我理解正确并且作者没有说谎或做事,那么<改为>以前是许多游戏的重要优化.
是作者胡编,我误解的东西,或者是它确实是曾经的情况下<较慢(至关重要,正如作者说)比>?
谢谢你澄清这个非常奇怪的事情!
免责声明:我完全清楚算法复杂性是优化的主要来源.此外,我怀疑现在肯定没有任何区别,我不是要求它优化任何东西.我非常痛苦,也许是令人望而却步的好奇心.
Nic*_*las 345
如果我理解正确,性能方面,翻转Z的符号和深度测试只不过是改变<比较到>比较.所以,如果我理解正确并且作者没有说谎或做出任何事情,那么改变<to>曾经是许多游戏的重要优化.
我没有特别好地解释,因为它并不重要.我觉得这是一个有趣的琐事.我不打算专门讨论这个算法.
但是,背景是关键.我从来没有说过<比较比比较快.请记住:我们谈论的是图形硬件深度测试,而不是CPU.没有operator<.
我所指的是一个特定的旧优化,其中一个帧将使用 GL_LESS范围为[0,0.5].下一帧,GL_GREATER使用范围[1.0,0.5]进行渲染.你来回走动,字面意思是"每一帧都在翻转Z的标志和深度测试".
这会失去一点深度精度,但您不必清除深度缓冲区,这曾经是一个相当慢的操作.由于深度清除这些天不仅是免费的,而且实际上比这种技术更快,人们不再这样做了.
| 归档时间: |
|
| 查看次数: |
12653 次 |
| 最近记录: |