跳转到主要内容
--## 电子创新网图库均出自电子创新网,版权归属电子创新网,欢迎其他网站、自媒体使用,使用时请注明“图片来自电子创新网图库”,不过本图库图片仅限于网络文章使用,不得用于其他用途,否则我们保留追诉侵权的权利。 ##--

本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
demi 提交于

现代GPU硬件普遍自带Early-Z技术,能够提前丢弃被遮挡像素以提高渲染效率。然而,当片元着色器使用discard/alpha test时,Early-Z会失效,因为像素可见性只能在着色器执行后确定。这导致所有像素都必须先执行着色器,再测试深度,显著降低渲染性能。因此,在TBDR架构下应避免在主渲染流程中使用discard/alpha test,以充分发挥Early-Z的优化效果。


1. HSR和Early-Z的关系

HSR(Hidden Surface Removal):指的是在渲染过程中,自动丢弃被遮挡的像素,避免无谓的计算和写入。

Early-Z:是HSR的一种实现方式,即在片元着色器(Fragment Shader)执行前,先做深度测试,能提前丢弃被遮挡的像素。


2. 硬件自带Early-Z的意义

现代GPU(包括移动端和桌面端)都自带Early-Z/Hi-Z,这是提升渲染效率的关键。

Early-Z能极大减少片元着色器的执行次数,节省带宽和能耗。


3. 为什么有Early-Z还会被discard/alpha test影响?

Early-Z的前提是:像素是否可见在着色器执行前就能确定。

discard/alpha test属于着色器内部的分支,只有执行到那一行代码时,才知道像素是否被丢弃。

所以一旦shader里有discard/clip/alpha test,Early-Z通常会被自动关闭,转为Late-Z(着色后再做深度测试),这样所有像素都要先执行一遍着色器,Early-Z的优势就没法发挥出来。


4. 例子

没有discard/alpha test的shader:

① Early-Z先测试深度,遮挡的像素直接丢弃,不执行shader。

② 只有可见像素才执行shader,效率高。

有discard/alpha test的shader:

① 必须先执行shader,等shader里判断是否discard。

② 只有shader执行完,才能决定是否写入,Early-Z失效。


5. 结论

HSR硬件自带Early-Z,但只要shader里有discard/alpha test,Early-Z就会失效,必须等shader执行完才能决定像素命运,效率大幅下降。

这就是为什么在TBDR(如PowerVR、Mali)等架构下,强烈建议避免在主渲染流程中使用discard/alpha test。


版权声明:本文为CSDN博主「你一身傲骨怎能输」的原创文章,
遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_33060405/article/details/149212077

精彩推荐

2026英伟达GTC大会专题

CES 2026(国际消费类电子产品展览会)专题

第四届南渡江智慧医疗与康复产业高峰论坛

第十五届松山湖中国IC创新高峰论坛

第四届滴水湖中国RISC-V产业论坛

Recent comments

  • 1873774516_516738
  • 2460440665_516737
  • 1457585548_516736
  • 780289498_516735
  • 2283262460_516734