132 lines
4.2 KiB
Plaintext
Raw Normal View History

Shader "Unlit URP Shader/Bur"
{
Properties
{
_BaseColor("Base Color",color) = (1,1,1,1)
//_BaseMap("BaseMap", 2D) = "white" {}
_MainTex("MainTex",2d)="white"{}
2025-04-10 15:53:22 +08:00
//_Value("Value", Float) = 3
}
HLSLINCLUDE
#pragma multi_compile _ LIGHTMAP_ON
#pragma multi_compile _ _MAIN_LIGHT_SHADOWS //接受主光源阴影
#pragma multi_compile _ _MAIN_LIGHT_SHADOWS_CASCADE //投射主光源的阴影
#pragma multi_compile _ _SHADOWS_SOFT //软阴影
#pragma multi_compile _ _ADDITIONAL_LIGHTS //附加光源
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
struct Attributes
{
float4 positionOS : POSITION;
float2 uv : TEXCOORD0;
float3 normal:NORMAL;
};
struct Varyings
{
float4 positionCS : SV_POSITION;
float2 uv : TEXCOORD0;
float3 Wnormal : TEXCOORD1;
float3 Wpos:TEXCOORD2;
};
CBUFFER_START(UnityPerMaterial)
half4 _BaseColor;
float4 _MainTex_TexelSize;
float4 _BaseMap_ST;
float _Value;
float2 HorV;
CBUFFER_END
TEXTURE2D (_MainTex);SAMPLER(sampler_MainTex);
//TEXTURE2D (_CameraOpaqueTexture);SAMPLER(sampler_CameraOpaqueTexture);
Varyings vert(Attributes v)
{
Varyings o = (Varyings)0;
o.positionCS = TransformObjectToHClip(v.positionOS.xyz);
o.uv = TRANSFORM_TEX(v.uv, _BaseMap);
o.Wpos = TransformObjectToWorld(v.positionOS);
o.Wnormal=TransformObjectToWorldNormal(v.normal);
return o;
}
half4 fragHorV(Varyings i) : SV_Target
{
float2 offset=_MainTex_TexelSize.xy;
half4 c;
2025-04-10 15:53:22 +08:00
float2 uv=i.positionCS.xy/_ScreenParams.xy*2;
half4 baseMap = 0.4*SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex,uv);
c = baseMap ;//* _BaseColor;
{
c+= 0.15*SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex,uv+offset*1*_Value*HorV);
c+= 0.15*SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex,uv+offset*-2*_Value*HorV);
c+= 0.10 *SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex,uv+offset*2*_Value*HorV);
c+= 0.10 *SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex,uv+offset*-2*_Value*HorV);
c+= 0.05 *SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex,uv+offset*3*_Value*HorV);
c+= 0.05 *SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex,uv+offset*-3*_Value*HorV);
}
return c;
}
half4 fragBur(Varyings i) : SV_Target
{
float2 offset=_MainTex_TexelSize.xy;
half4 c=half4(0,0,0,0);
2025-04-10 15:53:22 +08:00
float2 uv=i.positionCS.xy/_ScreenParams.xy*2;
//c = baseMap ;//* _BaseColor;
{
float f=0.4;
c+= SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex,uv+offset*float2(1,1)*_Value*f);
c+= SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex,uv+offset*float2(-1,1)*_Value*f);
c+= SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex,uv+offset*float2(1,-1)*_Value*f);
c+= SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex,uv+offset*float2(-1,-1)*_Value*f);
c+= SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex,uv+offset*float2(2,2)*_Value*f);
c+= SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex,uv+offset*float2(-2,2)*_Value*f);
c+= SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex,uv+offset*float2(2,-2)*_Value*f);
c+= SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex,uv+offset*float2(-2,-2)*_Value*f);
c/=8;
}
return c;
}
ENDHLSL
SubShader
{
Tags { "Queue"="Transparent" "RenderType" = "Transparent" "RenderPipeline" = "UniversalPipeline" }
ZTest Always
Cull Off
LOD 100
//高斯模糊
Pass
{
Tags {"LightMode" = "UniversalForward"}
HLSLPROGRAM
#pragma vertex vert
#pragma fragment fragHorV
ENDHLSL
}
//快速模糊
Pass
{
Tags {"LightMode" = "UniversalForward"}
HLSLPROGRAM
#pragma vertex vert
#pragma fragment fragBur
ENDHLSL
}
}
}