117 lines
3.7 KiB
Plaintext
117 lines
3.7 KiB
Plaintext
Shader "SLS/Postprocessing/RadialBlur"
|
|
{
|
|
SubShader
|
|
{
|
|
Tags
|
|
{
|
|
"RenderType" = "Opaque"
|
|
"RenderPipeline" = "UniversalPipeline"
|
|
}
|
|
ZWrite Off
|
|
Cull Off
|
|
|
|
HLSLINCLUDE
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
|
#include "Packages/com.unity.render-pipelines.core/Runtime/Utilities/Blit.hlsl"
|
|
|
|
// 变量定义
|
|
float4 _RadialBlurParams;
|
|
#define _BlurRadius _RadialBlurParams.x
|
|
#define _RadialCenter _RadialBlurParams.yz
|
|
|
|
// --- 具体实现函数 ---
|
|
|
|
half4 RadialBlurPassFragment_4Tap(Varyings input): SV_Target
|
|
{
|
|
float2 uv = input.texcoord - _RadialCenter;
|
|
half scale = 1;
|
|
half4 color = SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter);
|
|
|
|
scale = _BlurRadius + 1;
|
|
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter);
|
|
scale = 2 * _BlurRadius + 1;
|
|
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter);
|
|
scale = 3 * _BlurRadius + 1;
|
|
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter);
|
|
|
|
color *= 0.25f; // 1/4
|
|
return color;
|
|
}
|
|
|
|
half4 RadialBlurPassFragment_8Tap(Varyings input): SV_Target
|
|
{
|
|
float2 uv = input.texcoord - _RadialCenter;
|
|
half4 color = 0;
|
|
// 为了代码简洁,这里可以使用循环,但在 Shader 中手动展开(Unroll)通常性能更好或便于控制
|
|
// 这里保留你原本的展开逻辑
|
|
[unroll]
|
|
for(int i=0; i<8; i++)
|
|
{
|
|
half scale = i * _BlurRadius + 1;
|
|
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter);
|
|
}
|
|
return color * 0.125f;
|
|
}
|
|
|
|
|
|
half4 RadialBlurPassFragment_12Tap(Varyings input): SV_Target
|
|
{
|
|
float2 uv = input.texcoord - _RadialCenter;
|
|
half4 color = 0;
|
|
for(int i=0; i<12; i++) {
|
|
half scale = i * _BlurRadius + 1;
|
|
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter);
|
|
}
|
|
return color * 0.0833f;
|
|
}
|
|
|
|
half4 RadialBlurPassFragment_16Tap(Varyings input): SV_Target
|
|
{
|
|
float2 uv = input.texcoord - _RadialCenter;
|
|
half4 color = 0;
|
|
for(int i=0; i<16; i++) {
|
|
half scale = i * _BlurRadius + 1;
|
|
color += SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv * scale + _RadialCenter);
|
|
}
|
|
return color * 0.0625f;
|
|
}
|
|
|
|
ENDHLSL
|
|
|
|
Pass
|
|
{
|
|
Name "Radial Blur 4 Tap"
|
|
HLSLPROGRAM
|
|
#pragma vertex Vert
|
|
#pragma fragment RadialBlurPassFragment_4Tap
|
|
ENDHLSL
|
|
}
|
|
|
|
Pass
|
|
{
|
|
Name "Radial Blur 8 Tap"
|
|
HLSLPROGRAM
|
|
#pragma vertex Vert
|
|
#pragma fragment RadialBlurPassFragment_8Tap
|
|
ENDHLSL
|
|
}
|
|
|
|
Pass
|
|
{
|
|
Name "Radial Blur 12 Tap"
|
|
HLSLPROGRAM
|
|
#pragma vertex Vert
|
|
#pragma fragment RadialBlurPassFragment_12Tap
|
|
ENDHLSL
|
|
}
|
|
|
|
Pass
|
|
{
|
|
Name "Radial Blur 16 Tap"
|
|
HLSLPROGRAM
|
|
#pragma vertex Vert
|
|
#pragma fragment RadialBlurPassFragment_16Tap
|
|
ENDHLSL
|
|
}
|
|
}
|
|
} |