79 lines
2.0 KiB
Plaintext
79 lines
2.0 KiB
Plaintext
Shader "PostEffect/RadialBlurShader"
|
||
{
|
||
Properties
|
||
{
|
||
_MainTex ("Texture", 2D) = "white" {}
|
||
_IterationNumber("IterationNumber", Int) = 16
|
||
_Intensity("Intensity", float) = 0.1
|
||
_OffsetX("OffsetX", float) = 0.5
|
||
_OffsetY("OffsetY", float) = 0.5
|
||
}
|
||
|
||
CGINCLUDE
|
||
uniform sampler2D _MainTex;
|
||
uniform float _Intensity;
|
||
uniform float _OffsetX;
|
||
uniform float _OffsetY;
|
||
uniform int _IterationNumber;
|
||
|
||
//uniform float _BlurFactor; //模糊强度(0-0.05)
|
||
//uniform float4 _BlurCenter; //模糊中心点xy值(0-1)屏幕空间
|
||
#include "UnityCG.cginc"
|
||
//#define SAMPLE_COUNT 16 //迭代次数
|
||
|
||
fixed4 frag(v2f_img i) : SV_Target
|
||
{
|
||
////模糊方向为模糊中点指向边缘(当前像素点),而越边缘该值越大,越模糊
|
||
//float2 dir = i.uv - _BlurCenter.xy;
|
||
//float4 outColor = 0;
|
||
////采样SAMPLE_COUNT次
|
||
//for (int j = 0; j < SAMPLE_COUNT; ++j)
|
||
//{
|
||
// //计算采样uv值:正常uv值+从中间向边缘逐渐增加的采样距离
|
||
// float2 uv = i.uv - _BlurFactor * dir * j;
|
||
// outColor += tex2D(_MainTex, uv);
|
||
//}
|
||
////取平均值
|
||
//outColor /= SAMPLE_COUNT;
|
||
//return outColor;
|
||
float2 center = float2(_OffsetX, _OffsetY);
|
||
float2 uv = i.uv;
|
||
uv -= center;
|
||
float4 color = float4(0.0, 0.0, 0.0, 0.0);
|
||
_Intensity *= 0.085;
|
||
float scale = 1;
|
||
|
||
for (int j = 1; j < _IterationNumber; ++j)
|
||
{
|
||
color += tex2D(_MainTex, uv * scale + center);
|
||
scale = 1 + (float(j * _Intensity));
|
||
}
|
||
|
||
color /= (float)_IterationNumber;
|
||
|
||
return color;
|
||
}
|
||
ENDCG
|
||
|
||
SubShader
|
||
{
|
||
Pass
|
||
{
|
||
ZTest Always
|
||
Cull Off
|
||
ZWrite Off
|
||
Fog{ Mode off }
|
||
|
||
//调用CG函数
|
||
CGPROGRAM
|
||
//使效率更高的编译宏
|
||
#pragma fragmentoption ARB_precision_hint_fastest
|
||
//vert_img是在UnityCG.cginc中定义好的,当后处理vert阶段计算常规,可以直接使用自带的vert_img
|
||
#pragma vertex vert_img
|
||
#pragma fragment frag
|
||
ENDCG
|
||
}
|
||
}
|
||
Fallback off
|
||
}
|