ui 模糊 shader
build in 环境
不适用于urp hdrp
被ui覆盖部分将会产生模糊
效果

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' // Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
Shader "UI/Blurred"
{
Properties
{
[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {}
_Size("Blur Radius", Range(0,4)) = 1
} SubShader
{
Tags
{
"Queue" = "Transparent"
"IgnoreProjector" = "True"
"RenderType" = "Transparent"
"PreviewType" = "Plane"
"CanUseSpriteAtlas" = "True"
}
Cull Off
Lighting Off
ZWrite Off
ZTest Always
Blend SrcAlpha OneMinusSrcAlpha // Horizontal blur
GrabPass{
Tags{ "LightMode" = "Always" }
}
Pass{
Tags{ "LightMode" = "Always" } CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest
#include "UnityCG.cginc" struct appdata_t {
float4 vertex : POSITION;
float2 texcoord: TEXCOORD0;
}; struct v2f {
float4 vertex : POSITION;
float4 uvgrab : TEXCOORD0;
}; v2f vert(appdata_t v) {
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
#if UNITY_UV_STARTS_AT_TOP
float scale = -1.0;
#else
float scale = 1.0;
#endif
o.uvgrab.xy = (float2(o.vertex.x, o.vertex.y * scale) + o.vertex.w) * 0.5;
o.uvgrab.zw = o.vertex.zw;
return o;
} sampler2D _GrabTexture;
float4 _GrabTexture_TexelSize;
float _Size; half4 frag(v2f i) : COLOR{ half4 sum = half4(0,0,0,0);
#define BLURPIXEL(weight,kernelx) tex2Dproj( _GrabTexture, UNITY_PROJ_COORD(float4(i.uvgrab.x + _GrabTexture_TexelSize.x * kernelx*_Size, i.uvgrab.y, i.uvgrab.z, i.uvgrab.w))) * weight
sum += BLURPIXEL(0.05, -4.0);
sum += BLURPIXEL(0.09, -3.0);
sum += BLURPIXEL(0.12, -2.0);
sum += BLURPIXEL(0.15, -1.0);
sum += BLURPIXEL(0.18, 0.0);
sum += BLURPIXEL(0.15, +1.0);
sum += BLURPIXEL(0.12, +2.0);
sum += BLURPIXEL(0.09, +3.0);
sum += BLURPIXEL(0.05, +4.0); return sum;
}
ENDCG
}
// Vertical blur
GrabPass{
Tags{ "LightMode" = "Always" }
}
Pass{
Tags{ "LightMode" = "Always" } CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest
#include "UnityCG.cginc" struct appdata_t {
float4 vertex : POSITION;
float4 color : COLOR;
float2 texcoord: TEXCOORD0;
}; struct v2f {
float4 vertex : POSITION;
float4 uvgrab : TEXCOORD0;
fixed4 color : COLOR;
}; v2f vert(appdata_t v) {
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
#if UNITY_UV_STARTS_AT_TOP
float scale = -1.0;
#else
float scale = 1.0;
#endif
o.uvgrab.xy = (float2(o.vertex.x, o.vertex.y * scale) + o.vertex.w) * 0.5;
o.uvgrab.zw = o.vertex.zw;
return o;
} sampler2D _GrabTexture;
float4 _GrabTexture_TexelSize;
float _Size; half4 frag(v2f i) : COLOR{ half4 sum = half4(0,0,0,0);
#define BLURPIXEL(weight,kernely) tex2Dproj( _GrabTexture, UNITY_PROJ_COORD(float4(i.uvgrab.x, i.uvgrab.y + _GrabTexture_TexelSize.y * kernely * _Size, i.uvgrab.z, i.uvgrab.w))) * weight sum += BLURPIXEL(0.05, -4.0);
sum += BLURPIXEL(0.09, -3.0);
sum += BLURPIXEL(0.12, -2.0);
sum += BLURPIXEL(0.15, -1.0);
sum += BLURPIXEL(0.18, 0.0);
sum += BLURPIXEL(0.15, +1.0);
sum += BLURPIXEL(0.12, +2.0);
sum += BLURPIXEL(0.09, +3.0);
sum += BLURPIXEL(0.05, +4.0); return sum;
}
ENDCG
} Pass
{
Name "Default"
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma target 2.0 #include "UnityCG.cginc"
#include "UnityUI.cginc" #pragma multi_compile __ UNITY_UI_CLIP_RECT
#pragma multi_compile __ UNITY_UI_ALPHACLIP struct appdata_t
{
float4 vertex : POSITION;
float4 color : COLOR;
float2 texcoord : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
}; struct v2f
{
float4 vertex : SV_POSITION;
fixed4 color : COLOR;
float2 texcoord : TEXCOORD0;
float4 worldPosition : TEXCOORD1;
float4 uvgrab : TEXCOORD2;
}; sampler2D _MainTex;
sampler2D _GrabTexture;
float4 _GrabTexture_TexelSize;
fixed4 _TextureSampleAdd;
float4 _ClipRect;
float4 _MainTex_ST; v2f vert(appdata_t v)
{
v2f OUT;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT);
OUT.worldPosition = v.vertex;
OUT.vertex = UnityObjectToClipPos(OUT.worldPosition); OUT.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
#if UNITY_UV_STARTS_AT_TOP
float scale = -1.0;
#else
float scale = 1.0;
#endif
OUT.uvgrab.xy = (float2(OUT.vertex.x, OUT.vertex.y * scale) + OUT.vertex.w) * 0.5;
OUT.uvgrab.zw = OUT.vertex.zw; OUT.color = v.color;
return OUT;
} fixed4 frag(v2f IN) : SV_Target
{
half4 color = (tex2D(_MainTex, IN.texcoord) + _TextureSampleAdd) * IN.color;
half4 blur = tex2Dproj(_GrabTexture, UNITY_PROJ_COORD(IN.uvgrab));
return color;
}
ENDCG
}
}
}
来源:如何做出好看的ui效果 https://www.youtube.com/watch?v=HwdweCX5aMI
ui 模糊 shader的更多相关文章
- 关于NGUI Shader 和 Draw Call的优化 & 模糊shader
序: 1.项目过程中不可避免的需要用到大量Shader 和 UITexture,由于Ngui对Shader支持非常糟糕,导致项目drawCall异常的高 2.Panel裁剪无法裁剪自定义shader内 ...
- unity, UGUI Image shader
Image组件的Material成员默认是空,如果想为Image添加shader,只需新建material赋给Material即可. 另外注意,用于UI组件的shader都要包含一句:ZTest ...
- Unity Shader (四)片段程序示例
1.环境光+漫反射+高光+点光源 Shader "Custom/Example_Frag_1" { properties { _MainColor(,,,) _Specular ...
- 如何快速优化手游性能问题?从UGUI优化说起
WeTest 导读 本文作者从自身多年的Unity项目UI开发及优化的经验出发,从UGUI,CPU,GPU以及unity特有资源等几个维度,介绍了unity手游性能优化的一些方法. 在之前的文 ...
- Gvr SDK for Unity 分析(二)
前言 关于google vr sdk的具体使用,传送门 Gvr SDK for Unity 分析(一) Google Daydream平台已经整合进Google VR SDK 本文环境:Unity5. ...
- Android 2.1 和 Android 4.4 工程目录超详细对比及详解
在搭建Android开发环境及简单地建立一个HelloWorld项目后,本篇将通过HelloWorld项目来介绍Android项目的目录结构.本文的主要主题如下: 1.1.HelloWorld项目的目 ...
- Android manifest之manifest标签详细介绍
AndroidManifest详细介绍 本文主要对AndroidManifest.xml文件中各个标签进行说明.索引如下: 概要PART--01 manifest标签PART--02 安全机制和per ...
- AndroidManifest.xml清单文件要点
AndroidManifest.xml AndroidManifest.xml清单文件通常包括如下内容: 应用程序的包名,该包名作为该应用的唯一标识. 应用包含的组件,如Activity,Servic ...
- 聊聊Unity的Gamma校正以及线性工作流
0x00 前言的前言 这篇小文其实是在清明节前后起的头,不过后来一度搁笔.一直到这周末才又想起来起的这个头还没有写完,所以还是直接用一个月前的开头,再将过程和结尾补齐. 0x01 前言 结束了在南方一 ...
- WebGL中图片多级处理(FrameBuffer)
在webgl的使用过程中,我们通常会想对texture进行多级处理并对其贴在表面显示 如对较精准的边缘检测,要先后使用灰度shader.模糊shader.边缘shader来进行处理,而每次的处理对象则 ...
随机推荐
- 鸿蒙NEXT(四):后台任务的智能调度策略 — 延迟任务管理解析
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- 进程间通信-POSIX 信号量
POSIX 信号量 POSIX 信号量是一种 POSIX 标准中定义的进程间同步和互斥的方法.它允许进程之间通过信号量来实现临界区的互斥访问,从而避免竞争条件和死锁等问题. 信号量的P.V操作: P ...
- 【最新】MySQL 5.6 保姆级安装详细教程
MySQL5.6简介 MySQL 5.6 是 MySQL 数据库管理系统的一个重要版本,以其稳定性.性能优化和功能扩充受到广泛关注与使用.该版本在数据库领域中提供了更加高效的数据处理能力.增强的复制功 ...
- RabbitMq使用中常见错误--python版
用python的pika库错误集 一.pika.exceptions.ProbableAuthenticationError: ConnectionClosedByBroker: (403) 'ACC ...
- Java 压缩成zip文件
综述 在< 把多个文件打包压缩成tar.gz文件并解压的Java实现>中介绍了如何把文件压缩车gz文件,这里介绍如何把文件压缩成zip文件.支持如下方式的压缩: 压缩单个文件 压缩文件夹下 ...
- 未来已来?vSphere 9 预览版部署体验
最近看到不少技术爱好者开始分享 vSphere 9 的基础体验镜像,作为 VMware 的忠实粉丝,怎么能错过这波"尝鲜"机会呢? 趁着空闲时间,我也动手安装体验了一下.从初步使用 ...
- 题解:CF1045I Palindrome Pairs
题目链接:link. 首先上思路: 如果一个字符串是回文串,只有当其中最多的只有一个字符的出现次数是奇数. 注意我们可以将每个字符串的字符出现次数的奇偶性用一个 \(26\) 位的二进制表示. 接下来 ...
- 东航MU5735空难事件总结与分析
东航MU5735空难事件总结与分析 事件概述 日期:2022年3月21日 航班:东方航空MU5735(昆明长水机场→广州白云机场) 机型:波音737-800(注册号B-1791,机龄6.8年) 伤亡: ...
- 阿里P7,竟问这么简单的题目?
今天面试阿里后端开发, ● 面试官提问:谈谈你对 const 理解 ● 我这样回答的: const 仅仅表示变量不能修改,太简答了,我早就知道了. ● 面试官回复:你觉得 这样能面过 P7 ,百万年薪 ...
- springBoot启动 Error running Application. Command line is too long. Shorten the command line via JAR manifest or via a classpath file and rerun.
1. 打开SpringBoot启动配置 2.选择shorten command line 3.apply保存就行了