提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
最近有个需求,需要使用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新手):
- 因为我是要显示在UI上,所以就创建一个UI默认shader:Create/Amplify Shader/UI/Default;
- 原理比较简单,这里就不作赘述,见下图:
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效果】
文章来源:https://www.toymoban.com/news/detail-761208.html
- 【只显示PostProcessing的Rendertexture,PostProcessing效果正常,但是透明背景失效】
- 【融合两个Rendertexture的最终效果】
总结
URP最为Unity中集表现效果和性能的渲染管线,现在使用场景越来越多,但是暴露的坑也越来越多,据Unity官方消息称,会在后续版本中将URP作为默认渲染管线,我们和Unity也会在开发道路上慢慢磨合。文章来源地址https://www.toymoban.com/news/detail-761208.html
到了这里,关于【URP趟坑】Unity在URP中使用RenderTexture在UI中渲染带透明相机背景的PostProcessing场景的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!