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 } } }