UnityShader学习教程之<毛玻璃效果解析>
毛玻璃是很多项目需要的效果,以下是毛玻璃的效果代码:
Shader "Custom/WaterBlur" { Properties { _blurSizeXY("BlurSizeXY", Range(0,15)) = 2
} SubShader { Tags {"IgnoreProjector"="True""Queue"="Transparent""RenderType"="Transparent""CanUseSpriteAtlas"="True""PreviewType"="Plane"}//获取屏幕纹理,必须的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 = UnityObjectToClipPos(i.vertex); o.screenPos = o.position; return o; } //核心逻辑就是使用多次采样纹理,然后混合多次,采样的对象是屏幕纹理,实现高斯模糊half4 frag( v2f i ) : COLOR { //模糊的原理就是错开uv来采样,实现模糊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+3.0 * depth)) * 0.025; sum += tex2D( _GrabTexture, float2(screenPos.x+5.0 * depth, screenPos.y-3.0 * depth)) * 0.025; sum += tex2D( _GrabTexture, float2(screenPos.x-4.0 * depth, screenPos.y+2.5 * depth)) * 0.05; sum += tex2D( _GrabTexture, float2(screenPos.x+4.0 * depth, screenPos.y-2.5 * depth)) * 0.05; sum += tex2D( _GrabTexture, float2(screenPos.x-3.0 * depth, screenPos.y+2.0 * depth)) * 0.09; sum += tex2D( _GrabTexture, float2(screenPos.x+3.0 * depth, screenPos.y-2.0 * depth)) * 0.09; sum += tex2D( _GrabTexture, float2(screenPos.x-2.0 * depth, screenPos.y+1.5 * depth)) * 0.12; sum += tex2D( _GrabTexture, float2(screenPos.x+2.0 * depth, screenPos.y-1.5 * 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-3.0 * depth) * 0.025; sum += tex2D( _GrabTexture, screenPos-2.5 * depth) * 0.05; sum += tex2D( _GrabTexture, screenPos-2.0 * depth) * 0.09; sum += tex2D( _GrabTexture, screenPos-1.5 * depth) * 0.12; sum += tex2D( _GrabTexture, screenPos-1.0 * depth) * 0.15; sum += tex2D( _GrabTexture, screenPos) * 0.16; sum += tex2D( _GrabTexture, screenPos+3.0 * depth) * 0.15; sum += tex2D( _GrabTexture, screenPos+2.5 * depth) * 0.12; sum += tex2D( _GrabTexture, screenPos+2.0 * depth) * 0.09; sum += tex2D( _GrabTexture, screenPos+1.5 * depth) * 0.05; sum += tex2D( _GrabTexture, screenPos+1.0 * depth) * 0.025; return sum/2; } ENDCG } } Fallback Off
}
这是实现效果:
我们可以用Dotween插件来控制模糊的程度,可以实现很好的效果,有如下代码:
/// <summary>/// 主页按钮点击回调/// </summary>private void HimebtnHundler(){_leftpic.transform.DOLocalMoveX(-746f, 1);_rightpic.transform.DOLocalMoveX(787f, 1);_material.DOFloat(0, "_blurSizeXY", 1);_word.GetComponent<CanvasGroup>().DOFade(0, 1f);StartCoroutine(CloseErrorView());}
这段代码,主要是增加CanvasGroup组件,实现对整个场景的alpha控制:
主要用DOFade来实现CanvasGroup,用DOFloat对材质球上的shader属性的控制!
大家有兴趣的可以加我的群《601408323》!
UnityShader学习教程之<毛玻璃效果解析>相关推荐
- UnityShader学习教程之<矩阵的左乘还是右乘所导致的效果问题>
总结:矩阵的左乘还是右乘 首先,在<3d数学基础:图形与游戏开发>一书的第七章矩阵的7.1.7节中讲到了关于矩阵和向量的乘法问题.结论是"行向量左乘矩阵时,结果是行向量,列向量右 ...
- 写给 Web 开发者的深度学习教程 - 向量化 矩阵
前言 在这个科技发展日新月异的时代,行业的宠儿与弃儿就如同手掌的两面,只需轻轻一翻,从业者的境遇便会有天翻地覆的改变. 人工智能作为近两年来业界公认的热门领域,不同于之前火热的移动端开发或前端开发,其 ...
- UnityShader学习教程之<详解uv坐标,c#类似uv坐标的值以及贴图操作>
基础篇(五) 一.uv坐标 工作的时候一直都听到同事们再说uv坐标,其实我们对这个词很熟悉,但是说到真正是什么,却发现自己了解的并不透彻,写一篇博客,梳理下基础,了解uv到底是干嘛的! 1.uv是什么 ...
- UnityShader学习教程之<顶点膨胀效果 局部变胖实现思路>
方法一:使用顶点颜色实现 建模的时候和模型师沟通一下,让他们把需要膨胀的部分的顶点颜色设置为指定的颜色,然后我们再shader里面获取到之后,在统一处理 注意:我们对于顶点的处理只能写在顶点着色器里面 ...
- 终极版Python学习教程:一篇文章讲清楚Python虚拟环境
我在之前写过一篇Python学习教程,说过新手往往没有注意环境隔离,导致Python项目包与包之间冲突. 并且Python2与3代码执行有问题等等.鉴于此我决定今天的Python学习教程给大家聊聊关于 ...
- 深度学习教程(6) | 神经网络优化算法(吴恩达·完整版)
作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/35 本文地址:https://www.showmeai.tech/article-d ...
- proteus学习教程大全
proteus学习教程大全 proteus学习资源大全,热衷于分享资料,资源共享,这个proteus也是收集了很久的资料,一直以来学习嵌入式就很枯燥,幸好有一起能够学习和资源共享的小伙伴共同交流技术上 ...
- 深度学习教程(10) | 卷积神经网络解读(吴恩达·完整版)
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/35 本文地址:http://www.showmeai.tech/article-det ...
- LaTeX中文学习教程 笔记
视频地址: LaTeX中文学习教程(用于论文或稿件排版,15集全) 用LaTeX写期刊论文的详细教程 一.基本结构 % 导言区 \documentclass{article}%book,article ...
最新文章
- [导入]Nhibernate引入自定义Membership和Role
- 【Android 异步操作】FutureTask 分析 ( Future 接口解析 | Runnable 接口解析 | Callable 接口解析 )
- POJ 3608 Bridge Across Islands 《挑战程序设计竞赛》
- app测试-兼容性测试与云测试技术
- Python中if-else语句的多种写法
- 阿里员工自愿加班却遭同事骂!网友们炸锅了
- Kmeans算法解析(非常详细)
- js获取html标签中的数据
- solidworks 2016 crack
- 解决 ElementUI form表单在dialog中重置表单,无法正确重置的问题
- 使用Photoshop制作证件照
- 6python项目 体脂率计算优化2
- EMQX的Web管理后台-Dashboard
- 手机网络通过USB共享给台式机电脑
- Python 自然语言处理笔记(五)——信息检索系统,基于Lucene实现
- linux安装系统如何查看硬盘,如何检查Linux系统服务器的硬盘是SSD还是HDD?
- IP、MAC地址,交换机路由器,ARP、NAT协议串讲
- Android Room提示 错误: Not sure how to convert a Cursor to this method's return type的原因及解决办法
- 全球与中国N-苯基马来酰亚胺粉市场深度研究分析报告
- jstree Api 中文翻译文档