我有一个主要场景,并且我有一个想要在其之上渲染的场景。我想使用早期深度测试来提高性能,所以我想把所有东西从前到后一起渲染。但是我不能将每个场景隔离到深度缓冲区的一半,因为这会限制它的精度。
通常,您有 24 位的深度缓冲区精度。将其分成两半产生...... 23位精度。不知何故,我相当怀疑这将是一个主要问题。如果是这样,您总是可以通过减少正面覆盖的空间来收回这一点。比如说,只有 5% 的深度范围。
这就是 FPS 游戏如何进行“视图模型”(玩家的手和枪)叠加。做专业人士做的事。
我可以以某种方式渲染覆盖场景,将深度缓冲区中的任何值更改为不是 1 的 -1,然后渲染主场景吗?
-1 不是有效的深度缓冲区值。所以我会假装你说的是 0。
是的,你可以这样做。您可以将场景渲染为深度纹理。然后渲染一个从纹理中获取深度值的全屏四边形,将其与 1 进行比较,如果不完全是 1.0,则写入 0 而不是 1.0。
但是这个练习的重点是表现,是吗?考虑必须发生什么才能使我刚才所说的起作用。
在第一个场景完成渲染之前,GPU 无法渲染该全屏四边形。这将意味着整个渲染管道必须完全刷新,浪费宝贵的时间。
与glDepthRange
解决方案相比,这可能会更慢。