Files
Fishing2/Assets/ResRaw/Shader/DualKawaseBlur.shader
2026-02-03 17:47:50 +08:00

78 lines
2.6 KiB
Plaintext

Shader "Hidden/URP/DualKawaseBlur"
{
SubShader
{
Tags { "RenderPipeline"="UniversalPipeline" }
ZWrite Off ZTest Always Cull Off
HLSLINCLUDE
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
// RenderGraph AddBlitPass 默认绑定的属性:
TEXTURE2D_X(_BlitTexture);
SAMPLER(sampler_LinearClamp);
float4 _BlitTexture_TexelSize;
float4 _BlitScaleBias; // xy scale, zw bias
float _Offset;
struct Attributes { float4 positionOS:POSITION; float2 uv:TEXCOORD0; };
struct Varyings { float4 positionHCS:SV_POSITION; float2 uv:TEXCOORD0; };
Varyings vert(Attributes v)
{
Varyings o;
o.positionHCS = TransformObjectToHClip(v.positionOS.xyz);
o.uv = v.uv;
return o;
}
float2 BlitUV(float2 uv) { return uv * _BlitScaleBias.xy + _BlitScaleBias.zw; }
half4 DownsampleFrag(Varyings i) : SV_Target
{
float2 uv = BlitUV(i.uv);
float2 d = _BlitTexture_TexelSize.xy * _Offset;
half4 c = 0;
c += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv) * 0.5;
c += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv + float2( d.x, d.y)) * 0.125;
c += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv + float2(-d.x, d.y)) * 0.125;
c += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv + float2( d.x, -d.y)) * 0.125;
c += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv + float2(-d.x, -d.y)) * 0.125;
return c;
}
half4 UpsampleFrag(Varyings i) : SV_Target
{
float2 uv = BlitUV(i.uv);
float2 d = _BlitTexture_TexelSize.xy * _Offset;
half4 c = 0;
c += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv + float2( d.x, d.y));
c += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv + float2(-d.x, d.y));
c += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv + float2( d.x, -d.y));
c += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv + float2(-d.x, -d.y));
return c * 0.25;
}
ENDHLSL
Pass
{
Name "Downsample"
HLSLPROGRAM
#pragma vertex vert
#pragma fragment DownsampleFrag
ENDHLSLPROGRAM
}
Pass
{
Name "Upsample"
HLSLPROGRAM
#pragma vertex vert
#pragma fragment UpsampleFrag
ENDHLSLPROGRAM
}
}
}