前言:
最近在尝试新版的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"
}