可以做镜头景深效果的shard-2
来源:互联网 发布:mac mail qq企业邮箱 编辑:程序博客网 时间:2024/04/29 22:26
- Properties {
- _MainTex ("", RECT) = "white" {}
- _BlurTex1 ("", RECT) = "white" {}
- _BlurTex2 ("", RECT) = "white" {}
- _DepthTex ("", RECT) = "white" {}
- }
- SubShader {
- Pass {
- ZTest Always Cull Off ZWrite Off Fog { Mode off }
- CGPROGRAM
- #pragma fragment frag
- #pragma fragmentoption ARB_precision_hint_fastest
- #include "UnityCG.cginc"
- uniform samplerRECT _MainTex : register(s0);
- uniform samplerRECT _BlurTex1 : register(s1);
- uniform samplerRECT _BlurTex2 : register(s2);
- uniform samplerRECT _DepthTex : register(s3);
- uniform float4 _FocalParams;
- struct v2f {
- float2 uv[4] : TEXCOORD0;
- };
- float DOFFactor( float z ) {
- float focalDist = _FocalParams.x;
- float invRange = _FocalParams.w;
-
- float fromFocal = z - focalDist;
- if( fromFocal < 0.0 )
- fromFocal *= 4.0;
- return saturate( abs( fromFocal ) * invRange );
- }
- half4 frag (v2f i) : COLOR
- {
- half4 original = texRECT(_MainTex, i.uv[0]);
- half3 blur1 = texRECT(_BlurTex1, i.uv[1]).rgb;
- half3 blur2 = texRECT(_BlurTex2, i.uv[2]).rgb;
-
-
- blur1 *= float3(1,1,0.7);
- blur2 *= float3(0.7,0.7,1);
-
- float dof = texRECT(_DepthTex, i.uv[3]).r;
-
- half dof2;
- if( dof > 0.5 )
- dof2 = saturate( dof * 0.25 + 0.75 );
- else
- dof2 = saturate( dof * 1.5 );
- half factor = saturate( dof * 1.5 - 0.75 );
- half3 blur = lerp( blur1, blur2, factor );
- half3 col = lerp( original.rgb, blur, dof );
- return half4(col, original.a);
- }
- ENDCG
- }
- }
- Fallback off
- }