Unity延时渲染模版缓存问题 Deferred Stencil Buffer

查了一段时间,结论:Unity在延时渲染会占用Stencil Buffer的大部分掩码用于光照遮罩,可用部分较少,推荐不用。
有大佬使用成功了,方法是和Unity占用的部分岔开,根据各个版本的延时渲染使用解决方式不同

原文:
Unity 已经使用模板缓冲区来支持光照层遮罩。过去几年中,他们在延迟渲染期间禁用了越来越多的用户自定义模板设置,以至于目前在延迟渲染相关着色器上定义的任何模板设置都会被忽略。
内部延迟着色器可能只使用第一遍,因为他们从未考虑过有人想要多遍。
基本上,你在这里运气不佳,你无法用模板和多次传递来完成你想要做的事情。

执行此操作的方法是渲染到其中一个未使用的 gbuffer 通道来存储要使用的照明技术索引,并在内部延迟着色着色器中使用 if 条件。从技术上讲,只有普通 gbuffer 的 alpha 是免费的,它是一个 2 位通道,因此您可以存储 0.0、0.33、0.67 和 1.0。如果您需要超过 4 个值,您可以根据自己的喜好修改 gbuffer 的内容,要么全部修改(假设您替换了游戏中的所有标准着色器),要么在设置该 alpha 通道时修改。另一种替代方法是渲染到自发光 gbuffer 的 alpha,并在延迟着色完成之前使用命令缓冲区将该通道复制到新纹理。它是延迟着色要渲染到的渲染纹理,因此如果您不复制它,就无法从中读取。

参考资料:
https://github.com/daniel-ilett/shaders-impossible-geom
https://discussions.unity.com/t/solved-kinda-the-5th-bit-stencil-buffer-deferred/771205/3
https://discussions.unity.com/t/stencil-and-deferred-rendering/771332/4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值