Unity使用URP开启PostProcessing后使用RenderTexture渲染模型背景为黑色不透明

问题遇到的现象和发生背景

Camera + RenderTexture在UI上显示主角模型,Camera的BackgroundType设为SolidColor,Background的Alpha设为0,以此去掉模型背景,RenderTexture上只显示模型,这样是正常的。
但是使用Camera上开启PostProcessing,设置了bloom之后,RenderTexture上模型的背景色又出现了,alpha调整无效,背景一片黑,希望可以分享一下解决方案,或者一对一解决问题

问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

你的核心问题还是模型背景的问题,如何去掉背景是核心问题。是否可以从模型中直接去掉背景而不是靠设置透明背景呢?可以从这方面再考虑下。

具体做法是

1.添加一个跟原来相机一样,但是没有PP。

2.在相机上添加脚本,在OnRenderImage方法时把图像读取到一个单独的RenderTexture里面。

    public RenderTexture renderTexture;
    private void OnRenderImage(RenderTexture source, RenderTexture destination)
{
    if (renderTextureCamera.GetMaskRenderTexture())
    {
        Graphics.Blit(source, renderTexture);
    }
}

3.写一个Shader把两张图混合。返回原来的RT的颜色跟这个RT的Alpha通道。

Shader "Custom/BloomRTMask"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_MaskTex ("Texture", 2D) = "white" {}
}
SubShader
{
Tags {"Queue" = "Transparent" "RenderType"="Transparent" }
LOD 100
Blend One OneMinusSrcAlpha
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag

        #include "UnityCG.cginc"

        struct appdata
        {
            float4 vertex : POSITION;
            float2 uv : TEXCOORD0;
        };

        struct v2f
        {
            float2 uv : TEXCOORD0;
            float4 vertex : SV_POSITION;
        };

        sampler2D _MainTex;
        float4 _MainTex_ST;
        sampler2D _MaskTex;

        v2f vert (appdata v)
        {
            v2f o;
            o.vertex = UnityObjectToClipPos(v.vertex);
            o.uv = TRANSFORM_TEX(v.uv, _MainTex);
            return o;
        }

        fixed4 frag (v2f i) : SV_Target
        {
            fixed4 col = tex2D(_MainTex, i.uv);
            fixed4 colmask = tex2D(_MaskTex, i.uv);
            col.w = colmask.w;
            return col;
        }
        ENDCG
    }
}

}
4.做成Material添加到需要展示的RawImage上面去。用脚本把两个相机的RT分别添加到RawImage的texture 跟Material的_MaskTex 上面。

黑色背景就没有了。Unity的坑还是很多,最近一直在研究渲染方面,遇到类似情况还是很花时间的。

这个应该是属性未生效的问题,将此属性的对象设置成静态的对象延长其生命周期试试

打开ProjectSetting/Graphics
1.将Tier Setting中的Use Default勾上,主要是要勾High那一栏的
2.如果你不想勾Use Default 那就把Use HDR去掉
3.如果你也不想去掉Use HDR 那就把HDR mode 改成FP16

做游戏的 感觉好高端啊 希望你们做出来好玩的游戏嘿嘿