图形 3.5 Early-z和Z-prepass测试

链接: Early-z和Z-prepass学习脑图.
链接: ATI 2004 GDC分享翻译.

Demo–头发渲染测试

unity标准材质无透明效果(对照组)

吐槽下,下载的素材居然没有Alpha贴图或者通道,还要自己做。)
在这里插入图片描述

透明度混合的双面渲染

在这里插入图片描述
渲染步骤:
Pass1:半透明的前面部分
—开启正面剔除 Cull Front
—关闭深度写入 ZWrite Off
—混合模式:Blend SrcAlpha OneMinusSrcAlpha

Pass2:半透明的背面部分
—开启背面剔除Cull Back
—关闭深度写入 ZWrite Off
—混合模式:Blend SrcAlpha OneMinusSrcAlpha

没错:就是入门精要8.7的代码

透明度测试 + Z-Prepass

在这里插入图片描述

渲染步骤:

Pass1:深度缓冲
—开启深度写入Zwrite On,深度测试为Ztest Less
—关闭背面剔除Cull Off
—开启alpha test,只通过不透明像素

Pass2:半透明的前面部分
----开启前面剔除Cull Front
----关闭深度写入Zwrite Off,深度测试为Ztest Less

Pass3:半透明的后面部分
----开启前面剔除Cull Back
----关闭深度写入Zwrite Off,深度测试为Ztest Less

问题:

上面非常非常多的过渡渲染(Overdrow)

性能改善建议:

广泛使用Early Z裁剪来节省昂贵的像素着色器。

通常有一半的头发隐藏在头发后面—先将头画出来

当Alpha Test启用时,Early Z筛选不能使用:
1.解决方法,PreZ缓冲是一个非常简单的着色器,使用Alpha Test
2.在随后的Pass中使用ZTest而不是Alpha Test测试以获得同

EarlyZ剔除节约非常大的填充开销!!

优化后的渲染方案:

Pass1:prime Z buffer最初的深度缓冲
—使alpha测试只通过不透明的像素
—禁用背面剔除Cull Off
—启用ZWrite,Z test设置为Less
—禁用颜色缓冲写入
—使用简单的像素着色器,只返回alpha

Pass2:不透明部分
—禁用背面剔除Cull Off
—禁用ZWrite,设置Z test为Equal

Pass3:透明的背面部件
—剔除前置多边形Cull Front
—禁用Z写,“Z test”设置为“Less”

Pass4:透明的正面部件
—剔除背向多边形
—开启ZWrite功能,“Z test”设置为“Less”

优点与缺点

优点:1.低几何复杂性 2.减少负载的顶点引擎 3.使深度排序更快 4.可在低端硬件上使用更简单的着色器
缺点:1.排序方案在头发模型中假定了只有很少的动画:像摇摆的马尾这样,想要单独处理。在运行时候对几何图形进行排序尝试克服这一点。
2.不适合所有发型。

补充知识:

链接: Kajiya-Kay Model头发的着色器.

Demo2–遮蔽测试

X光遮蔽

在这里插入图片描述
在这里插入图片描述

目标需求:

人物被遮挡后有关X光效果,希望是整体透明,没有物体间遮挡错误。

实践后问题:X光效果本身其实是简单的深度测试问题。

Pass1:渲染X光效果的Pass
—混合模式Blend SrcAlpha One
—关闭深度写入ZWrite Off,深度测试改为ZTest GEqual(深度大于等于当前缓存则通过)
Pass2:正常渲染的Pass
–深度写入打开
–正常材质

1、问题就出现在深度测试,遮挡物的深度要小于角色(更靠近相机),所以会被剔除,但角色自生也会出现穿插效果。
2、PreZ是使用写入深度的方式解决穿插。但X光效果也是反利用深度解决渲染顺序。
希望能帮忙解答。

遮挡半透

原理:

当摄像机发现物体遮挡角色时,会使用半透明Shader替代物体,基本的遮蔽半透就完成了。

效果:

待完成。。。

注释:使用PreZ可以解决半透明中结构问题。简单的加Pass开启深度写入就可以

Early的限制总结

注:理解EarlyZ适用范围,不能用的地方。在项目实际想要用时,减少不必要弯路

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值