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的更多相关文章

  1. 关于NGUI Shader 和 Draw Call的优化 & 模糊shader

    序: 1.项目过程中不可避免的需要用到大量Shader 和 UITexture,由于Ngui对Shader支持非常糟糕,导致项目drawCall异常的高 2.Panel裁剪无法裁剪自定义shader内 ...

  2. unity, UGUI Image shader

      Image组件的Material成员默认是空,如果想为Image添加shader,只需新建material赋给Material即可. 另外注意,用于UI组件的shader都要包含一句:ZTest  ...

  3. Unity Shader (四)片段程序示例

      1.环境光+漫反射+高光+点光源 Shader "Custom/Example_Frag_1" { properties { _MainColor(,,,) _Specular ...

  4. 如何快速优化手游性能问题?从UGUI优化说起

    WeTest 导读   本文作者从自身多年的Unity项目UI开发及优化的经验出发,从UGUI,CPU,GPU以及unity特有资源等几个维度,介绍了unity手游性能优化的一些方法.   在之前的文 ...

  5. Gvr SDK for Unity 分析(二)

    前言 关于google vr sdk的具体使用,传送门 Gvr SDK for Unity 分析(一) Google Daydream平台已经整合进Google VR SDK 本文环境:Unity5. ...

  6. Android 2.1 和 Android 4.4 工程目录超详细对比及详解

    在搭建Android开发环境及简单地建立一个HelloWorld项目后,本篇将通过HelloWorld项目来介绍Android项目的目录结构.本文的主要主题如下: 1.1.HelloWorld项目的目 ...

  7. Android manifest之manifest标签详细介绍

    AndroidManifest详细介绍 本文主要对AndroidManifest.xml文件中各个标签进行说明.索引如下: 概要PART--01 manifest标签PART--02 安全机制和per ...

  8. AndroidManifest.xml清单文件要点

    AndroidManifest.xml AndroidManifest.xml清单文件通常包括如下内容: 应用程序的包名,该包名作为该应用的唯一标识. 应用包含的组件,如Activity,Servic ...

  9. 聊聊Unity的Gamma校正以及线性工作流

    0x00 前言的前言 这篇小文其实是在清明节前后起的头,不过后来一度搁笔.一直到这周末才又想起来起的这个头还没有写完,所以还是直接用一个月前的开头,再将过程和结尾补齐. 0x01 前言 结束了在南方一 ...

  10. WebGL中图片多级处理(FrameBuffer)

    在webgl的使用过程中,我们通常会想对texture进行多级处理并对其贴在表面显示 如对较精准的边缘检测,要先后使用灰度shader.模糊shader.边缘shader来进行处理,而每次的处理对象则 ...

随机推荐

  1. 【经验】C++通过文件句柄获取文件路径(两种方式)

    方法一 主要参考博客:根据文件句柄获得文件名(这篇超级清晰,就是有一点点小问题) 通过文件句柄获得文件路径(这篇不是很好用,但是思路大体是一致的) 主要思路: 根据HANDLE 创建映射文件,调用Ge ...

  2. 【HUST】网安|计算机网络安全实验|实验二 DNS协议漏洞利用实验

    写在最前: 这是我个人的实验记录,实现方式有很多种,多台虚拟机更容易做netwox. 认真整理和记录了一下容易出问题的地方. 代码仓库开了. 文章目录 涉及代码的仓库地址 计算机网络安全实验二 DNS ...

  3. UnoCSS原子CSS引擎

    UnoCSS是一款原子化的即时按需 CSS 引擎,其中没有核心实用程序,所有功能都是通过预设提供的.默认情况下UnoCSS应用通过预设来实现相关功能. UnoCSS中文文档: https://www. ...

  4. f-string 高效的字符串格式化

    f-string,称为格式化字符串常量(formatted string literals),是Python3.6新引入的一种字符串格式化方法,该方法源于PEP 498 – Literal Strin ...

  5. centos8安装部署RADIUS+MySQLPGSQL高可用架构实现

    以下是针对中大型网络的 RADIUS+MySQL/PGSQL高可用方案 的完整实现,包含数据库集成.主备集群部署和Keepalived配置: 一.MySQL/PGSQL数据库集成(以MySQL为例) ...

  6. AI面试助手“面试精灵”发布新功能——AI笔试助手

    引言 在职场竞争日益激烈的今天,面试已成为决定职业发展的关键一步.许多专业人士虽然在专业领域拥有深厚的知识,却可能缺乏面试技巧.为了帮助这些专业人士更轻松地获得理想的工作,我们推出了革命性的AI面试助 ...

  7. 代码随想录第11天 | 二叉树part01

      理论基础 需要了解 二叉树的种类,存储方式,遍历方式 以及二叉树的定义 文章讲解:https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7 ...

  8. shell 使用awk 分析nginx日志取出400 的请求写入文件,然后php读取文件处理数据

    使用awk分析昨日 的nginx日志,将服务端未处理成功的400 请求,重新请求,将数据补进去 下面是代码,如果有类似问题的话,可以参考一下 #!/bin/bash ## 1. shell 获取日期获 ...

  9. Tcode:PFAL说明

    Short text HR: ALE Distribution of HR Master Data Description. Scenario 1: Distribution of HR Master ...

  10. 探索 JavaCV:开启计算机视觉与多媒体处理新世界

    目录 JavaCV 是什么? 安装指南 有趣的 JavaCV 使用示例 录制 RTMP 直播流 捕获摄像头画面 美颜相机 引用 在当今的技术领域,计算机视觉和多媒体处理的应用愈发广泛.从视频监控到直播 ...