图形 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适用范围,不能用的地方。在项目实际想要用时,减少不必要弯路

在汽车电子领域,DTC(Diagnostic Trouble Codes)是用来表示故障的标准化代码,其核心在于识别诊断车辆可能遇到的问题。PreFail、PrePass、PassedFailed这四个状态是DTC策略实施中不可或缺的部分,它们各自有不同的含义作用: 参考资源链接:[汽车电子:OEM的DTC实现策略与诊断事件管理](https://wenku.csdn.net/doc/2ugx89p2zo) PreFail状态表示车辆在检测到一个故障前的预警状态,此时可能已经记录了一些故障相关的参数条件,但故障还没有真正发生。这个状态为维修技师提供了宝贵的预警信息,有助于在故障发生前进行预防性维护。 PrePass状态则是对PreFail状态的一种补充,它用来表明车辆已经通过了之前触发的故障预警状态,是一个临时的正常状态,可能需要持续观察以确认是否确实修复了问题。 Passed状态代表车辆在进行特定诊断测试后通过了测试,表明相关的系统或组件处于正常工作状态,没有检测到故障。 Failed状态则与Passed状态相反,表明在执行诊断测试后发现了问题,并且故障确实存在,需要进一步的维修操作。 为了确保准确及时的故障诊断,汽车制造商(OEM)会采用不同的DTC实施策略,例如TestPeriod参数来决定诊断检测的频率持续时间。StepupStepdown参数则用来调整故障确认的阈值,以防止误报漏报故障。 Jump-DownJump-Up状态反映了故障状态的快速变化,Jump-Down状态表明一个突发的故障,而Jump-Up状态可能表示故障暂时消失或被修复。这些状态在DTC策略中起着调节作用,帮助进一步细化故障诊断过程。 深入理解这些状态及其在汽车电子诊断系统中的应用,对提高车辆的可靠性安全性至关重要。想要掌握更详细的DTC实现策略诊断事件管理,推荐阅读《汽车电子:OEM的DTC实现策略与诊断事件管理》,该文档详细介绍了在AUTOSAR框架下,DEM模块如何在ECU软件开发中监控故障事件,并提供了故障事件的处理存储解决方案,能够帮助工程师更好地应对电子电气架构中的故障诊断挑战。 参考资源链接:[汽车电子:OEM的DTC实现策略与诊断事件管理](https://wenku.csdn.net/doc/2ugx89p2zo)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值