首先需要在unity中开启屏幕图像开关才可以使用该纹理
同样只有不透明对象才能被渲染到屏幕图像中
若想要该对象不被渲染到屏幕图像中,可以将其Shader的渲染队列改为 "Queue" = "Transparent"
如何在Shader中使用_CameraOpaqueTexture?
使用模型的屏幕空间坐标采样屏幕图像的具体方法看前一篇
Shader"unity/GrabTex"
{
Properties
{
}
SubShader
{
Tags
{
"RenderPipeline"="UniversalPipeline"
"Queue" = "Transparent"
}
Pass
{
HLSLPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl"
TEXTURE2D(_CameraOpaqueTexture);
SAMPLER(sampler_CameraOpaqueTexture);
struct Attributes
{
float4 positionOS : POSITION;
float2 uv : TEXCOORD;
};
struct Varyings
{
float4 positionCS : SV_POSITION;
float2 uv : TEXCOORD;
};
Varyings vert(Attributes v)
{
Varyings o = (Varyings)0;
o.positionCS = TransformObjectToHClip(v.positionOS);
o.uv = v.uv;
return o;
}
float4 frag(Varyings i):SV_Target
{
float2 screenUV = i.positionCS/_ScreenParams.xy;
float4 ScreenTex = SAMPLE_TEXTURE2D(_CameraOpaqueTexture,sampler_CameraOpaqueTexture,screenUV);
return ScreenTex;
}
ENDHLSL
}
}
}