Unity - BRP - PP后效导致 Camera.targetTexture 被换掉,graphicsFormat 不对问题


环境

Unity : 国际版2020.3.37f1
Pipeline : BRP
Packages: Post Processing 3.0.3


目的

BRP 虽然是 官方放弃更新的 渲染管线,但是有些项目仍然会使用到,有一些踩过的坑,该记录的还是记录一下,便于 自己、他人 索引


原因

为了保留 HDR 效果,并且为了做性能优化

我们让 FrameBuffer 里面的 Color Buffer 使用格式为 R11G11B10 (注意没有A通道)

在这里插入图片描述

而没有使用 FP16,毕竟 FP16 会比 R11G11B10 大 2 倍 内存


问题

另外

我们在 Camera 渲染到 RT 时,Camera.HDR 设置为 Off 或是 Using Graphics Settings

FrameDebugger 都可以看到渲染使用都是 RT 中制定的 graphicsFormat (这里是设置 R16G16B16A16_SFloat 为例)
在这里插入图片描述

在这里插入图片描述

这时,如果我们使用 Post-process Layer 和 Post-process Volume 组件,就会导致 Camera.TargetTexture 被偷梁换柱,如下图

在这里插入图片描述

这种的话,RT R8G8B8A8_SRGB 渲染出来的话 LDR 色值

无论我们的自己如何设置 RT 的 graphicsFormat 来设置 HDR ,都是,都没有用的

比如下面我这设置的 RT graphicsFormatR16G16B16A16_SFLOAT

(下面是 color format,其实内部API中 color format 的 setter 是对 graphicsFormat 的设置,可以理解为同一个东西)
在这里插入图片描述
在 Frame Debug查看到,绘制使用的是: R8G8B8A8_SRGB

另外,我之前说过的 当前渲染 RT 被 偷梁换柱了,而我们原来的 RT 名字为: TestRT,现在却变成 TempBuffer 2834 720x1280,很明显就是换了另一个 RT
在这里插入图片描述

因此,如果你的项目中,某个 RT 想要拍摄 HDR 效果,并且有使用了 BRP 中的 PP 组件,那么 Camera.HDR == OFF 情况下,也是无法正常使用的 custom RT graphicsFormat 的 (其实这块功能设计就不是很好,难怪官方要放弃 BRP)

另外

  • 如果 ProjectSettings/Graphics/[对应平台]/HDR mode设置为 R11G11B10 的话
  • 并且 Camera.HDR 设置为 using graphics settings

那么你想要渲染到 custom RT 带 A 通道,是不行的

因为 R11G11B19_UFloatPack32 没有A通道,可以使用下面介绍的解决方法来处理


解决方法

RT camera 中不使用 BRP 自带的 PP 组件,自己写一个 PP 组件,可以参考以往我学习 Unity 后效组件来处理 : Unity Shader PostProcessing - 1 - 后处理概念

项目中使用的话,使用的是 MonoBehaviourOnRenderImage,自行优化写法和部分效率问题

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值