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

这篇具有很好参考价值的文章主要介绍了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通道)

Unity - BRP - PP后效导致 Camera.targetTexture 被换掉,graphicsFormat 不对问题,unity,bug,游戏引擎

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


问题

另外

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

FrameDebugger 都可以看到渲染使用都是 RT 中制定的 graphicsFormat (这里是设置 R16G16B16A16_SFloat 为例)
Unity - BRP - PP后效导致 Camera.targetTexture 被换掉,graphicsFormat 不对问题,unity,bug,游戏引擎

Unity - BRP - PP后效导致 Camera.targetTexture 被换掉,graphicsFormat 不对问题,unity,bug,游戏引擎

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

Unity - BRP - PP后效导致 Camera.targetTexture 被换掉,graphicsFormat 不对问题,unity,bug,游戏引擎

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

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

比如下面我这设置的 RT graphicsFormatR16G16B16A16_SFLOAT

(下面是 color format,其实内部API中 color format 的 setter 是对 graphicsFormat 的设置,可以理解为同一个东西)
Unity - BRP - PP后效导致 Camera.targetTexture 被换掉,graphicsFormat 不对问题,unity,bug,游戏引擎
在 Frame Debug查看到,绘制使用的是: R8G8B8A8_SRGB

另外,我之前说过的 当前渲染 RT 被 偷梁换柱了,而我们原来的 RT 名字为: TestRT,现在却变成 TempBuffer 2834 720x1280,很明显就是换了另一个 RT
Unity - BRP - PP后效导致 Camera.targetTexture 被换掉,graphicsFormat 不对问题,unity,bug,游戏引擎

因此,如果你的项目中,某个 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,自行优化写法和部分效率问题文章来源地址https://www.toymoban.com/news/detail-594507.html

到了这里,关于Unity - BRP - PP后效导致 Camera.targetTexture 被换掉,graphicsFormat 不对问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity中Shader面片一直面向摄像机(个性化修改及适配BRP)

    在上一篇文章中,我们用Shader实现了面片一直面向摄像机的效果。 Unity中Shader面片一直面向摄像机 在这篇文章中,我们对其进行个性化修改 及 BRP下的适配。 在很多时候,我们并不需要面片在上下方向跟随摄像机旋转 我们只需要面片跟随摄像机的左右旋转。 那么,我们就需

    2024年01月25日
    浏览(51)
  • Unity - 搬砖日志 - BRP 管线下的自定义阴影尺寸(脱离ProjectSettings/Quality/ShadowResolution设置)

    Unity : 2020.3.37f1 Pipeline : BRP (好久没搬砖了,偶尔健身一下,顺便将这些无技术含量的内容,记到 blog,不要记在脑子) 最近给项目做优化的过程中 发现 BRP 管线下的 Shadow Resolution 只能在 Project Settings/Quality/Shadow Resolution 去设置 而且发现 Shadow Resolution 的一些枚举为: Low Resolut

    2024年02月14日
    浏览(57)
  • Unity中Camera.main和Camera.current的区别

    在Unity中,Camera.main和Camera.current都是用来获取相机,那到底有什么区别呢? 1、相同点: Camera.main和Camera.current都是用于获取相机的属性。 它们都是静态属性,可以通过Camera类访问。 它们都返回一个相机对象。 2、不同点: Camera.main返回当前场景中激活的相机(如果存在多个

    2024年02月07日
    浏览(50)
  • Unity入门5——Camera

           1. Clear Flags:清除背景                 Skybox:天空盒背景(通常用来做 3D 游戏)                 Solid Color:使用 Background 颜色填充(通常设置为全黑或全白,2D 使用)                 Depth Only:只画该层,背景为透明(多个摄像机叠加渲染时

    2024年02月12日
    浏览(32)
  • Unity Camera -- (2)相机投影设置

            和场景视图中的其他游戏物体一样,相机本身也可以通过使用移动和旋转工具来进行调整。但这种方式比较难用,调整起来又慢又不精确。我们可以使用Move To View功能来快速调整相机所拍摄的画面。         1. 打开Camera_Projection_Scene(Scenes目录)。         2. 在Hi

    2024年02月10日
    浏览(44)
  • unity Camera(摄像机)介绍

    目录 一.摄像机类型 1.Perspective (透视摄像机) 2.Orthographic(正交摄像机) 二.摄像机属性 1.Clear Flags 2.Background 背景色 3.Culling Mask 剔除遮罩 4.Projection 投影 5.Field Of View   视野范围 6.Size 大小 7.Clipping Planes 裁剪屏幕 8.Viewport Rect 标准视图矩形 9.Depth 深度 10.Rendering Path 渲染路径

    2024年02月01日
    浏览(44)
  • Unity Camera设置-Culling Mask

    参考文档:Unity中Camera参数—Culling Mask详解_-MCQ-的博客-CSDN博客_unity相机cullingmask 什么是Culling Mask?它是Camera的一个属性, 包含或忽略要由摄像机渲染的对象层。简单来说就是摄像机照射场景中哪些层级的物体。 理解起来比较简单,怎么动态赋值稍微麻烦一点,用过一次之后

    2024年02月15日
    浏览(58)
  • Unity URP 获取Camera Stack

    2024年02月11日
    浏览(45)
  • unity脚本中的camera相关代码

    Camera相关代码共有两个脚本,包括CameraContral和Sample_move_Camera 这是一个简单的 Unity 脚本,名为 `CameraContral`,用于控制摄像机的行为。 当前的代码中,`Start` 方法和 `Update` 方法均为空,没有具体的实现。 在 `Start` 方法中,你可以进行一次性的初始化,例如设置摄像机的初始位

    2024年04月13日
    浏览(36)
  • Unity中Camera参数—Culling Mask详解

    Culling Mask 如下图所示: 显示层级如下: 应用: Culling Mask :主要是相机针对不同层级的物体进行渲染的操作(想让相机渲染哪个层就勾选哪个层) 层级介绍: unity中的层前7个被unity锁定,由低到高分别是nothing/everything/default/transparentFX/ignore raycast/water/UI 从第8个到第31个可以

    2024年02月11日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包