unity 支持圆形、切倒角和虚化UGUI Shader
2024-08-31 11:30:23
// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt) Shader "UI/UICircular"
{
Properties
{
_R("圆的半径R", Range(0,1)) = 0.5
_Blur("边缘虚化的范围", Range(0,100)) = 100 [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {}
_Color("Tint", Color) = (1,1,1,1) _StencilComp("Stencil Comparison", Float) = 8
_Stencil("Stencil ID", Float) = 0
_StencilOp("Stencil Operation", Float) = 0
_StencilWriteMask("Stencil Write Mask", Float) = 255
_StencilReadMask("Stencil Read Mask", Float) = 255 _ColorMask("Color Mask", Float) = 15 [Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip("Use Alpha Clip", Float) = 0
} SubShader
{
Tags
{
"Queue" = "Transparent"
"IgnoreProjector" = "True"
"RenderType" = "Transparent"
"PreviewType" = "Plane"
"CanUseSpriteAtlas" = "True"
} Stencil
{
Ref[_Stencil]
Comp[_StencilComp]
Pass[_StencilOp]
ReadMask[_StencilReadMask]
WriteMask[_StencilWriteMask]
} Cull Off
Lighting Off
ZWrite Off
ZTest[unity_GUIZTestMode]
Blend SrcAlpha OneMinusSrcAlpha
ColorMask[_ColorMask] 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;
UNITY_VERTEX_OUTPUT_STEREO
}; fixed4 _Color;
fixed4 _TextureSampleAdd;
float4 _ClipRect;
float _R;
float _X;
float _Y;
float _Blur; 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 = v.texcoord; OUT.color = v.color * _Color;
return OUT;
} sampler2D _MainTex; fixed4 frag(v2f IN) : SV_Target
{
half4 color = (tex2D(_MainTex, IN.texcoord) + _TextureSampleAdd) * IN.color; #ifdef UNITY_UI_CLIP_RECT
color.a *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect);
#endif #ifdef UNITY_UI_ALPHACLIP
clip(color.a - 0.001);
#endif //圆形
float x = IN.texcoord.x-0.5f;
float y = IN.texcoord.y-0.5f;
float lerp = (1 - _Blur * (_R*_R - (x * x + y * y)))*color.a;//如果不加这句代码,图片边缘会有明显的锯齿
color.a = (color.a - lerp)*step(x*x + y * y, _R*_R);//如果 _R*_R<(x*x + y * y),返回 0;否则,返回 1。 return color;
}
ENDCG
}
}
}
最新文章
- github怎么退出组织和删除自己创建的组织
- 页面无法加载main.css
- ASP.NET WebForm中用async/await实现异步
- Objective-c——UI基础开发第九天(QQ好友列表)
- tornado解析http body的过程分析
- 3DTouch
- Ext.getCmp()的简单使用
- Hystrix提高系统可用性
- Java设计模式之《组合模式》及应用场景
- websocket 70K连接测试
- 大白话5分钟带你走进人工智能-第十四节过拟合解决手段L1和L2正则
- 自己写的一个用js把select换成div与span与ul的东西
- 什么是ip代理
- 永久修改VS include目录
- 关于fstream、ifstream、ofstream读写文本文件、二进制文件详解
- zabbix使用企业微信发送告警信息
- e的故事.一个常数的传奇 (Eli Maor 著)
- Java Web项目如何做到升级不断掉服务,同时涉及到的相关问题
- 8、Redis中sort命令详解
- mysql查询字段时实现左右补零
热门文章
- 探索Python的多态是怎么实现的
- jQuery练习总结(二)
- codevs——T1044 拦截导弹 || 洛谷——P1020 导弹拦截
- 洛谷——P2440 木材加工
- Hadoop集群(第13期)_HBase 常用Shell命令
- Spring Boot 第一个demo
- 香蕉派 Banana pi BPI-M2 四核开源单板计算机.
- [Angular] ngx-formly (AKA angular-formly for Angular latest version)
- Eclipse开发C/C++程序的MinGw配置
- USACO 1.5 Superprime Rib