【URP趟坑】Unity在URP中使用RenderTexture在UI中渲染带透明相机背景的PostProcessing场景

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

最近有个需求,需要使用Unity的URP通用管线来开发项目,其中有个场景是需要在UI中显示动态的角色模型,而且背景是透明的。初闻这个需求感觉挺简单的,普通管线下使用Rendertexture输出相机视角的内容输入到RawImage中可以很轻松解决,不过在URP中Unity官方为了体现出可编程管线(SRP)的自由性,RenderTexture渲染PostProcessing的Alpha值全部都默认返回1,简单解释就是PostProcessing在Rendertexture中显示不再有半透明通道。


一、实现思路

在查询大量资料后也找到几种解决方案,虽然亲测后全都无用,不过也给我提供了一个思路:虽然PostProcessing在Rendertexture中不返回Alpha通道,不过只要不显示PostProcessing的相机就可以正常为Rendertexture输出Alpha,那就用两个相机,一个相机开启PostProcessing渲染,一个相机不开启PostProcessing,使用Shader将两个相机输出的RenderTexture的像素相乘,即可过滤带PostProcessing的Rendertexture中的背景,最后讲输出的图片显示在UI上即可。

二、开发环境

Unity2021.3.13f1c1
URP12.1.7
Amplify Shader Editor v1.9.1.5

三、使用步骤

1.创建像素融合的Shader

创建Shder我选择的是ASE第三方Shader可视化编辑器(操作简单适合Shader新手):

  1. 因为我是要显示在UI上,所以就创建一个UI默认shader:Create/Amplify Shader/UI/Default;
  2. 原理比较简单,这里就不作赘述,见下图:在这里插入图片描述

2.创建渲染相机

  • 创建基础相机,这个相机不渲染后处理效果,Background Type设置为Solid Color,颜色Alpha设置为0在这里插入图片描述
  • 创建后处理相机,Background Type设置为Solid Color,颜色Alpha设置为0在这里插入图片描述

3.创建Rendertexture

分别为上一步的两个相机创建一个Rendertexture来输出相机渲染的内容,拖到相机中OutputTexture中,两个Rendertexture的Colorfomat都改为R16G16B16A16_SFLOAT。

4.以材质方式渲染Rawimage

  • 创建融合图片的材质球在这里插入图片描述

  • 讲材质球拖到RawImage上
    在这里插入图片描述

5.效果展示(UI背景是黄色)

  • 【只显示基本的Rendertexture,透明背景正常,但是没有PostProcessing效果】

不带PostProcessing,但是透明背景正常

  • 【只显示PostProcessing的Rendertexture,PostProcessing效果正常,但是透明背景失效】在这里插入图片描述
  • 【融合两个Rendertexture的最终效果】在这里插入图片描述

总结

URP最为Unity中集表现效果和性能的渲染管线,现在使用场景越来越多,但是暴露的坑也越来越多,据Unity官方消息称,会在后续版本中将URP作为默认渲染管线,我们和Unity也会在开发道路上慢慢磨合。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码

)">
< <上一篇
下一篇>>