75 lines
2.5 KiB
Plaintext
75 lines
2.5 KiB
Plaintext
Shader "zzwater/FSBlur"
|
|
{
|
|
|
|
|
|
Properties
|
|
{
|
|
_MainTex ("Texture", 2D) = "white" {}
|
|
_DepthThreshold ("Depth Threshold", Range(0, 200)) = 50
|
|
//_BlurRadius ("Blur Radius", Range(1, 10)) = 3
|
|
}
|
|
|
|
SubShader
|
|
{
|
|
Tags { "RenderType"="Opaque" "RenderPipeline" = "UniversalPipeline"}
|
|
LOD 100
|
|
ZWrite Off Cull Off
|
|
Pass
|
|
{
|
|
Name "FSBlur"
|
|
|
|
HLSLPROGRAM
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
|
|
|
// The Blit.hlsl file provides the vertex shader (Vert),
|
|
// the input structure (Attributes) and the output structure (Varyings)
|
|
#include "Packages/com.unity.render-pipelines.core/Runtime/Utilities/Blit.hlsl"
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareDepthTexture.hlsl"
|
|
|
|
#pragma vertex Vert
|
|
#pragma fragment frag
|
|
|
|
|
|
float _DepthThreshold;
|
|
SAMPLER(sampler_BlitTexture);
|
|
float4 _BlitTexture_TexelSize;
|
|
|
|
|
|
half4 frag (Varyings input) : SV_Target
|
|
{
|
|
// Sample depth
|
|
float deviceDepth = SampleSceneDepth(input.texcoord);
|
|
float linearDepth = LinearEyeDepth(deviceDepth, _ZBufferParams);
|
|
float _BlurRadius = 5;
|
|
|
|
// Original color
|
|
half4 originalColor = SAMPLE_TEXTURE2D(_BlitTexture, sampler_BlitTexture, input.texcoord);
|
|
|
|
// If depth is less than threshold, return original color
|
|
if (linearDepth < _DepthThreshold)
|
|
return originalColor;
|
|
|
|
// Simple box blur (much faster than Gaussian)
|
|
half4 blurredColor = half4(0, 0, 0, 0);
|
|
int samples = 0;
|
|
|
|
// Use fixed radius for simplicity
|
|
for (int x = -_BlurRadius; x <= _BlurRadius; x++)
|
|
{
|
|
for (int y = -_BlurRadius; y <= _BlurRadius; y++)
|
|
{
|
|
float2 offset = float2(x, y) * _BlitTexture_TexelSize;
|
|
blurredColor += SAMPLE_TEXTURE2D(_BlitTexture, sampler_BlitTexture, input.texcoord + offset);
|
|
samples++;
|
|
}
|
|
}
|
|
|
|
// Average the samples
|
|
return blurredColor / samples;
|
|
|
|
}
|
|
ENDHLSL
|
|
}
|
|
}
|
|
}
|