毛玻璃效果shader
2015-07-30 16:56
218 查看
Shader "Custom/WaterBlur" { Properties { _blurSizeXY("BlurSizeXY", Range(0,10)) = 2 } SubShader { // Draw ourselves after all opaque geometry Tags { "Queue" = "Transparent" } // Grab the screen behind the object into _GrabTexture GrabPass { } // Render the object with the texture generated above Pass { CGPROGRAM #pragma debug #pragma vertex vert #pragma fragment frag #pragma target 3.0 sampler2D _GrabTexture : register(s0); float _blurSizeXY; struct data { float4 vertex : POSITION; float3 normal : NORMAL; }; struct v2f { float4 position : POSITION; float4 screenPos : TEXCOORD0; }; v2f vert(data i){ v2f o; o.position = mul(UNITY_MATRIX_MVP, i.vertex); o.screenPos = o.position; return o; } half4 frag( v2f i ) : COLOR { float2 screenPos = i.screenPos.xy / i.screenPos.w; float depth= _blurSizeXY*0.0005; screenPos.x = (screenPos.x + 1) * 0.5; screenPos.y = 1-(screenPos.y + 1) * 0.5; half4 sum = half4(0.0h,0.0h,0.0h,0.0h); sum += tex2D( _GrabTexture, float2(screenPos.x-5.0 * depth, screenPos.y+5.0 * depth)) * 0.025; sum += tex2D( _GrabTexture, float2(screenPos.x+5.0 * depth, screenPos.y-5.0 * depth)) * 0.025; sum += tex2D( _GrabTexture, float2(screenPos.x-4.0 * depth, screenPos.y+4.0 * depth)) * 0.05; sum += tex2D( _GrabTexture, float2(screenPos.x+4.0 * depth, screenPos.y-4.0 * depth)) * 0.05; sum += tex2D( _GrabTexture, float2(screenPos.x-3.0 * depth, screenPos.y+3.0 * depth)) * 0.09; sum += tex2D( _GrabTexture, float2(screenPos.x+3.0 * depth, screenPos.y-3.0 * depth)) * 0.09; sum += tex2D( _GrabTexture, float2(screenPos.x-2.0 * depth, screenPos.y+2.0 * depth)) * 0.12; sum += tex2D( _GrabTexture, float2(screenPos.x+2.0 * depth, screenPos.y-2.0 * depth)) * 0.12; sum += tex2D( _GrabTexture, float2(screenPos.x-1.0 * depth, screenPos.y+1.0 * depth)) * 0.15; sum += tex2D( _GrabTexture, float2(screenPos.x+1.0 * depth, screenPos.y-1.0 * depth)) * 0.15; sum += tex2D( _GrabTexture, screenPos-5.0 * depth) * 0.025; sum += tex2D( _GrabTexture, screenPos-4.0 * depth) * 0.05; sum += tex2D( _GrabTexture, screenPos-3.0 * depth) * 0.09; sum += tex2D( _GrabTexture, screenPos-2.0 * depth) * 0.12; sum += tex2D( _GrabTexture, screenPos-1.0 * depth) * 0.15; sum += tex2D( _GrabTexture, screenPos) * 0.16; sum += tex2D( _GrabTexture, screenPos+5.0 * depth) * 0.15; sum += tex2D( _GrabTexture, screenPos+4.0 * depth) * 0.12; sum += tex2D( _GrabTexture, screenPos+3.0 * depth) * 0.09; sum += tex2D( _GrabTexture, screenPos+2.0 * depth) * 0.05; sum += tex2D( _GrabTexture, screenPos+1.0 * depth) * 0.025; return sum/2; } ENDCG } } Fallback Off }
相关文章推荐
- leetCode 100.Same Tree (同树判断) 解题思路和方法
- Qt中QTreeWidget的使用
- Bootstrap_遮罩提示
- spring mvc 定时器
- ESLint
- spring中IOC是什么意思 个人觉得解释的非常有意思
- 正则表达式
- HDU 5319 Painter
- SpringMVC关于AOP拦截controller的注意事项
- spring中IOC是什么意思 个人觉得解释的非常有意思
- 44 - 判断扑克牌是否是顺子
- SAP价格 SAP系统价格 SAP ERP软件报价是多少?
- 学习笔记(八)对象的集合(三)
- [Android实例] Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式
- hdu4597 (博弈dp)play game
- 基于sparksql调用shell脚本执行SQL
- 配置MySQL使用HugePages
- 设计模式C++实现(2)——策略模式
- Python UnicodeEncodeError: 'gbk' codec can't encode character u'\ufeff' in position 0:
- NoSuchMethodException问题总结