TA100 T3.5 EarlyZ/Zprepass和日后做笔记的方法思考

0.前言

转眼间自己开始跟百人计划已经过一年了,自己的百人计划笔记已经几个月没更几篇了,进度也停留在第三章无法向前挪动。比起百人计划一周一更的速度,自己的学习效率实在是拖沓。明明每周日半夜看见b站的投稿也都会兴致勃勃地点进去看,但一周下来终究无法完成一课的学习,前期落下的进度也在被逐步拉开。是什么造成我对百人计划的学习效率低下呢?是兴趣问题吗?肯定不是,我喜欢游戏,喜欢渲染,喜欢TA,百人计划也不会和学校的课堂一样枯燥无味;是时间问题吗?我看我平时也挺闲的;是优先度问题吗?百人计划的优先度在我排序中也并不低。最后思来想去,感觉还是前期做笔记方式极大程度地打击了我学习百人计划的积极性。

我从小到大在学校里都是不太爱做笔记的那种。虽然说还不至于能和某些一本笔记都没有还能次次考前几名的神仙相比,但相比班上其他细致用功的同学,我的笔记本比别人少了几科,每一科的笔记厚度也没法和他们的相比。我一直以来对学校课程的笔记方式是,只有那些我自己觉得重要的知识点,比如说考试容易考而且我还不知道或者记不住,亦或者是其他知识的前置知识且我印象还不是特别深刻的那种,才能得此殊荣能够进入我的笔记本。我惜墨如金,渴求着动最少的笔写最有用的东西,想让记下来的每个字都是非常干的干货。对于老师家长常说的,把老师上课讲的都写上来便于梳理脉络等等,我从来不会这么做,一个是因为懒,一个是写了这些东西的笔记本已不再是珍贵之物,根本不值得我再次翻阅。

学习百人计划以来,常常去评论区里翻阅其他同学的优秀笔记,自己也照猫画虎,学着其他同学将上课内容完善地整理进笔记里,细致地将ppt中每张图片都放入其中,希望笔记中不遗漏课上讲的任何知识,希望这份努力能给自己换来一个扎实的功底。这带来的工作量其实不小,一节课下来算上做笔记的时间,就算连轴转,没个大半天也是搞不定的。由于我开学后无法有如此大块的空闲时间能保证我在听完课后仍有足够的时间及时搞定笔记,而且每每想起这痛苦的做笔记经历就会劝退我听课的欲望,久而久之,学习计划止步不前。

一千个读者就有一千个哈姆雷特,一千个学生也应该有一千份笔记。我不应该生搬硬套他人的学习方法。即使我做出的笔记没他人的美观,没他人的完善,但这份笔记仍是我自己为自己做出来的。对啊,做笔记不是为了任何其他人,是做给自己,帮助自己能更好地吸收课堂知识的工具。即使像以前的笔记本一样,同学看了没几个看得懂,家长老师看了追着打,这笔记本仍是我考前反复翻看的宝物,比起五三、教材书更有价值的东西。

所以从今以后,对于百人计划课上讲的内容,我将不会细致入微地将每一个内容都记录下来。对于以前讲过的,讲一遍就能记住的,讲了一遍感到不明白马上回去看下就能反应过来的,起到增加知识连贯性的脉络,这种内容将不会过多地出现在我的笔记内容里。我只会记录我觉得重要的东西,或者是正是这堂课才能让我学到的东西。一份笔记,如果连自己都做不下去,看不下去,反而还打击了学习的积极性,那写得再好看,他人看得再舒服,对于自己来说都是一张废纸。

1.深度测试 

与ZBuffer中的值进行比较,解决物体可见遮挡性问题

深度测试的问题在于,物体在执行fragment之后,却发现深度测试不通过时,相当于白算了fragment了

2.Early-Z

提前执行一次深度测试,发生在光栅化之后,fragment shader之前,减少不必要的片元计算。

片元1写入深度后,在渲染片元2、3的时候,会进行提前深度测试(z-cull),因为没有通过,所以这两个片元不会被计算

early-Z阶段也可添加模板测试

early-Z失效:

1.手动丢弃片元,如AlphaTest,clip/discard等

被丢弃的片元深度仍然被写入了zbuffer

2.手动修改GPU插值得到的深度

与上类似,我们只能使用光栅化得到的深度值

3.开启AlphaBlend

透明物体不会写入深度

4.关闭深度测试

不言而喻

 5.物体从远往近渲染

纯纯的overdraw,EarlyZ可没能耐帮你优化

可以考虑让CPU根据摄像机空间物体的深度值来决定物体绘制顺序,但在复杂场景中也挺耗性能的而且不能搭配合批

3.ZPrepass

在正常pass渲染之前先渲染zprepass,只写入深度,然后第二个pass里ZTest Equal,且不写入深度。这样由于earlyZ,深度不相等将不会被绘制

问题:

多pass shader无法动态合批,在原来不合批的基础上翻倍drawcall

解决:

将Zprepass单独分离到一个shader里,运用renderfeature先用这个shader渲染场景

这样的话无论是prepass还是正常渲染的pass都可以进行合批了

使用Zprepass解决透明物体穿插

不过这样的话透明后的透明物体就直接没掉了

优化:先渲染物体背面,剔除正面,然后再渲染物体正面,剔除背面 

像头发渲染也会这么做

Zprepass真的能带来性能优化吗?

不可否认,Zprepass并不能白嫖,本身也会带来性能消耗,如果其本身带来的性能消耗还大于优化掉的fragment计算,那就是赔了工时又亏性能

所以要在合适的地方权衡使用Zprepass,比如说在一个有非常多overdraw且无法很好将不透明物体从前往后排序的场景

4.实例应用

面片头发渲染:

对于透明度的头发,要从后往前渲染才能得到正确结果。

1.常规方案

用alphatest仅渲染不透明部分,然后剔除正面渲染背面,最后剔除背面渲染正面

大量overdraw,无法开启earlyZ

 2.Zprepass方案

先渲染Zprepass,然后就能愉快地绘制不透明,再分别渲染透明的背面和正面即可 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值