请选择 进入手机版 | 继续访问电脑版

开源计算机图形学社区(Open Source Computer Graphics Community) |OpenGPU Forum (2007-2013)| OpenGPU Project

 找回密码
 注册
搜索
查看: 1195|回复: 10

关于Early-z的一个疑问?求教各位老司机.. [复制链接]

Rank: 9Rank: 9Rank: 9

注册时间
2009-10-16
积分
439
发表于 2017-1-28 17:50:20 |显示全部楼层
经常在各种文档介绍Early-Z的文档中看到“如果AlphaTest被开启,那么early-z会自动关闭”这样的话。
问题是游戏应用中很多地方都要用AlphaTest的呀,难道说为了适应early-z特性要完全干掉这个效果么?

还是说我理解有误,他的意思可能只是说:
一个drawcall如果带着AlphaTest, early-z就关闭。
如果下个drawcall没有alphaTest, early-z就会重新开启。

是这个意思么?

给各位老司机们拜年了,祝各位老司机新年约炮成功~

Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24

注册时间
2010-10-8
积分
16877
发表于 2017-1-29 00:05:21 |显示全部楼层
把不会影响early z的集中起来先画啊

使用道具 举报

Rank: 9Rank: 9Rank: 9

注册时间
2009-10-16
积分
439
发表于 2017-1-29 21:51:52 |显示全部楼层
kamui 发表于 2017-1-29 00:05
把不会影响early z的集中起来先画啊

但是这一帧后面带alpha test的drawcall会让设备的earlyz 失效吧。
那这个earlyz就因为这个原因,在这个进程中就永远失效了么?还是说在第二帧绘制时自动重新开启?

使用道具 举报

Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24

注册时间
2010-10-8
积分
16877
发表于 2017-1-30 00:51:07 |显示全部楼层
会再开啊

使用道具 举报

Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24

注册时间
2009-10-18
积分
10171

会员荣誉勋章

发表于 2017-1-30 20:00:40 |显示全部楼层
对当前帧当前和之后的drawcall失效。下一帧clear z后恢复。
early z是性能优化,用了alpha test(也包括pixel shader里discard像素)后,这个优化就不能保证正确性了。
1

查看全部评分

使用道具 举报

Rank: 9Rank: 9Rank: 9

注册时间
2009-10-16
积分
439
发表于 2017-1-30 23:34:54 |显示全部楼层
lidudu 发表于 2017-1-30 20:00
对当前帧当前和之后的drawcall失效。下一帧clear z后恢复。
early z是性能优化,用了alpha test(也包括pix ...

谢谢。
那我同一帧里面clearZ或者切换深度缓存,可以恢复earlyz么

使用道具 举报

Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24

注册时间
2009-10-18
积分
10171

会员荣誉勋章

发表于 2017-1-31 09:59:47 |显示全部楼层
理论上clear z可以恢复early-z,但实际上取决于驱动的实现。应用上最好避免依赖驱动的特殊行为。
1

查看全部评分

使用道具 举报

Rank: 9Rank: 9Rank: 9

注册时间
2009-10-16
积分
439
发表于 2017-2-3 10:07:32 |显示全部楼层
本帖最后由 黑泽纱重 于 2017-2-3 15:28 编辑
lidudu 发表于 2017-1-31 09:59
理论上clear z可以恢复early-z,但实际上取决于驱动的实现。应用上最好避免依赖驱动的特殊行为。 ...

谢谢~
也就是说,如果我们想利用early-z来做优化,只能按照官方总结的那几种套路来(比如说先渲不带alphaTest的drawcall, 再渲带alphaTest的, 或者说pre-z pass),不能自己hack么

使用道具 举报

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

注册时间
2009-3-27
积分
4130
发表于 2017-2-3 12:54:09 |显示全部楼层
lidudu 发表于 2017-1-30 20:00
对当前帧当前和之后的drawcall失效。下一帧clear z后恢复。
early z是性能优化,用了alpha test(也包括pix ...

是一帧吗?如果一帧里面有多个RT要画那么只有一个RT开启Early-Z ?

使用道具 举报

Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24

注册时间
2009-10-18
积分
10171

会员荣誉勋章

发表于 2017-2-3 22:42:25 |显示全部楼层
Phantom 发表于 2017-2-3 12:54
是一帧吗?如果一帧里面有多个RT要画那么只有一个RT开启Early-Z ?

一帧只是泛泛而言。多个RT(不共享zbuffer)当然是独立事件,一个RT也可以多次clear z。
1

查看全部评分

使用道具 举报

Rank: 13Rank: 13Rank: 13Rank: 13

注册时间
2009-4-12
积分
1214
发表于 2017-6-30 02:15:24 |显示全部楼层
lidudu 发表于 2017-1-30 20:00
对当前帧当前和之后的drawcall失效。下一帧clear z后恢复。
early z是性能优化,用了alpha test(也包括pix ...

为什么对之后的drawcall失效呢?
虽然当前alpha-test的物件不能使用early-z,但之后再绘制一个opaque理论上依然可以early-z吧
为什么硬件不这么处理呢?不知道哪里有相关资料...
还有移动端tile-based显卡也是这样么?

使用道具 举报

最近看过此主题的会员

您需要登录后才可以回帖 登录 | 注册

‹‹
我的工具栏

关于我们|手机版|Archiver|开源计算机图形学社区(Open Source Computer Graphics Community) | OpenGPU Project | OpenGPU Forum (2007-2013)

GMT+8, 2017-7-24 16:47 , Processed in 0.068177 second(s), 13 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部