专栏/2022版的Unity URP的RenderFeature后处理新版的RTHandle对应的API写法

2022版的Unity URP的RenderFeature后处理新版的RTHandle对应的API写法

2023年04月25日 07:51--浏览 · --点赞 · --评论
粉丝:425文章:2


前言:

最近在尝试新版的2022的URP中发现RenderFeature中的常用的一些属性的获得方法已经被标记过时函数了,原本的RenderTargetIdentifier的定义 都会被标记会绿色。发现新版Unity希望我们用RTHandle 相关的函数来做后处理。

既然如此,就再学一次新的RenderFeature的新写法了(后续如果更新,我会努力更新),在此发文也希望大家都节约掉自己的宝贵时间。

先上一张效果图:


第一步: 

继承我们的ScriptableRendererFeature。

第二步:

定义好我们自己的RenderPass,提前写好可能需要的参数

第三步:

Create函数中设置好passEvent和我配置我们需要得RT

第四步:

完善我的MyRenderPass  

 ExecutePasss中设置材质的_BlitTexture贴图,清除掉上一次RT,然后开始绘制.

绘制结束,不要忘记清理

 

注意释放哦

最后是Shader:

Shader "FullScreenGray"

{


    Properties

    {

        //固定名字

        [HideInInspector]_BlitTexture ("BlitTexture", 2D) = "white" { }

    }


    SubShader

    {


        Tags

        {

            "RenderType" = "Transparent" "RenderPipeline" = "UniversalPipeline"

        }


        Cull Off

        Blend Off

        ZTest Off

        ZWrite Off


        Pass

        {

            Name "DrawProcedural"


            HLSLPROGRAM

            #pragma vertex vert

            #pragma fragment frag

            #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"

            #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"

            #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"


            CBUFFER_START(UnityPerMaterial)

            float4 _Tint;

            CBUFFER_END



            struct Attributes

            {

                float2 uv : TEXCOORD0;

                float3 normalOS : NORMAL;

                float3 tangentOS : TANGENT;

                uint vertexID : VERTEXID_SEMANTIC;

            };


            struct Varyings

            {

                float4 positionCS : SV_POSITION;

                float2 uv :TEXCOORD0;

            };


            Varyings vert(Attributes v)

            {

                Varyings o = (Varyings)0;

                o.positionCS = GetFullScreenTriangleVertexPosition(v.vertexID);


                return o;

            };

            TEXTURE2D_X(_BlitTexture);


            float4 Unity_Universal_SampleBuffer_BlitSource_float(float2 uv)

            {

                uint2 pixelCoords = uint2(uv * _ScreenSize.xy);

                return LOAD_TEXTURE2D_X_LOD(_BlitTexture, pixelCoords, 0);

            }


            float4 frag(Varyings i) : SV_TARGET

            {

                float2 uv= i.positionCS.xy/_ScreenParams.xy;

                float4 col = Unity_Universal_SampleBuffer_BlitSource_float(uv);


                float3 gray = float3(0.299, 0.587, 0.114);

                float graycolor = dot(col.rgb, gray).xxx;

                

                return graycolor;

            };

            ENDHLSL

        }

    }

    Fallback "Unlit"

}



投诉或建议