这只是对四边形UI的简单抗锯齿实验
思路是通过override Image里的OnPopulateMesh函数修改UI顶点,由4个改为5个(中心点)
在中心点和环绕点绘制不同的顶点颜色,最后做边缘半透过度来缓解锯齿
参考

C#

using UnityEngine;
using UnityEngine.UI;
[RequireComponent(typeof(CanvasRenderer))]
[RequireComponent(typeof(RectTransform))]
public class TestUIImage : Image
{protected override void OnPopulateMesh(VertexHelper vh){vh.Clear();// 2*---------*3//  |         |//  |   0*    |//  |         |// 1*---------*4//从中点开始绘制四边形,为顶点色填入内外信息,用于shader计算sdfUIVertex v0 = UIVertex.simpleVert;v0.position = CreatePos(0.5f, 0.5f);v0.color = Color.white;v0.uv0 = new Vector2(0.5f,0.5f);vh.AddVert(v0);UIVertex v1 = UIVertex.simpleVert;v1.position = CreatePos(0, 0);v1.color = Color.black;v1.uv0 = new Vector2(0,0);vh.AddVert(v1);UIVertex v2 = UIVertex.simpleVert;v2.position = CreatePos(0, 1);v2.color = Color.black;v2.uv0 = new Vector2(0,1);vh.AddVert(v2);UIVertex v3 = UIVertex.simpleVert;v3.position = CreatePos(1, 1);v3.color = Color.black;v3.uv0 = new Vector2(1,1);vh.AddVert(v3);UIVertex v4 = UIVertex.simpleVert;v4.position = CreatePos(1, 0);v4.color = Color.black;v4.uv0 = new Vector2(1,0);vh.AddVert(v4);vh.AddTriangle(0,1,2);vh.AddTriangle(0,2,3);vh.AddTriangle(0,3,4);vh.AddTriangle(0,4,1);//vh.AddUIVertexQuad(new UIVertex[]{v1, v2, v3, v4, v5});}private Vector2 CreatePos(float x, float y){Vector2 p = Vector2.zero;p.x -= rectTransform.pivot.x;p.y -= rectTransform.pivot.y;p.x += x;p.y += y;p.x *= rectTransform.rect.width;p.y *= rectTransform.rect.height;return p;}
}

Shader

参考

Shader "Custom/UI/UIAA"
{Properties{[PerRendererData]_MainTex ("Texture", 2D) = "white" {}[Toggle]_IsAA("UI AA", float) = 0_Width("Edge Width", range(0.01,1)) = 0.01[HideInInspector]_StencilComp ("Stencil Comparison", Float) = 8[HideInInspector]_Stencil ("Stencil ID", Float) = 0[HideInInspector]_StencilOp ("Stencil Operation", Float) = 0[HideInInspector]_StencilWriteMask ("Stencil Write Mask", Float) = 255[HideInInspector]_StencilReadMask ("Stencil Read Mask", Float) = 255[HideInInspector]_ColorMask ("Color Mask", Float) = 15}SubShader{Tags {"Queue"="Transparent""IgnoreProjector"="True""RenderType"="Transparent""PreviewType"="Plane""CanUseSpriteAtlas"="True"}Stencil{Ref [_Stencil]Comp [_StencilComp]Pass [_StencilOp]ReadMask [_StencilReadMask]WriteMask [_StencilWriteMask]}Lighting OffZWrite OffZTest [unity_GUIZTestMode]Blend SrcAlpha OneMinusSrcAlphaColorMask [_ColorMask]Pass{HLSLPROGRAM#pragma vertex vert#pragma fragment frag#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;half4 color : COLOR;};struct v2f{float2 uv : TEXCOORD0;float4 vertex : SV_POSITION;half4 color : COLOR;};TEXTURE2D(_MainTex);SAMPLER(sampler_MainTex);CBUFFER_START(UnityPerMaterial)float4 _MainTex_ST;half _Width;half _IsAA;CBUFFER_ENDv2f vert (appdata v){v2f o;o.vertex = TransformObjectToHClip(v.vertex);o.uv = TRANSFORM_TEX(v.uv, _MainTex);o.color = v.color;return o;}half4 frag (v2f i) : SV_Target{// sample the texturehalf4 col = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv);UNITY_BRANCH if (_IsAA){float edge = i.color.r;//根据边缘黑色作为阈值进行alpha插值即可if(edge<_Width){col.a *= lerp(0, 1, edge / _Width);;}}return col;}ENDHLSL}}
}

Unity UI抗锯齿测试相关推荐

  1. 入门图形学:UI抗锯齿

    刚好需要解决一下UI抗锯齿的问题,顺便记录一下.       最常见的锯齿就是圆形的锯齿.       我们先创建一个圆形,使用CanvasRender绘制: using System.Collect ...

  2. Unity后期处理-抗锯齿

    一.产生原因 顶点插值可以产生任意位置的顶点.但是像素不是,像素着色器如何着色是通过他的中心点是否被三角形覆盖决定的.所以会产生突变,在外围看来就是锯齿.      二 解决方案 1.  MSAA首先 ...

  3. unity终极抗锯齿抗白边黑边投影阴影不正常问题解决

    写这篇时是自己的总结,也是综合了很多其他文章的 因为一般的提问只能解决很少的问题,而且通常不管用,所以自己总结了下 1.首先在edit-project setting-quality可以试着调整里面的 ...

  4. 【Qt教程】3.5 - Qt5 QPainter绘图抗锯齿、相对坐标/平移坐标系、QPainter画图片、手动调用QPainter绘图事件

    GitHub源码仓库:Qt学习例程 1. QPainter绘图抗锯齿 /// 抗锯齿测试 /// painter.drawEllipse(QPoint(100,50), 50, 50);// 设置 抗 ...

  5. Unity游戏画面参数解析与应用:垂直同步、动态模糊、抗锯齿

    前言 最近会在B站刷到一些关于 30帧暴涨90帧! 高 中 低端显卡运行3A大作优化指南[干货向] 游戏画质设置教程 等等这样关于画面与性能调整的的视频,看完之后受益良多,UP主们经过实际测试获取到宝 ...

  6. Unity3D学习(七):Unity多重采样抗锯齿设置无效的解决办法

    前言 学习Shader的过程中发现模型锯齿严重,于是去Edit--Project Settings--Quality选项下将反锯齿设置为了8X Multi Sampling.结果没有任何改变,如图: ...

  7. unity无光照着色器(顶点片元着色器)使用TAA抗锯齿后角色移动时模糊(虚影)解决方案

    1.unity系统内置的着色器,移动时没有模糊, 2.一开始想到的是,顶点着色器一般不处理光照,可能是光照与无光照渲染顺序不同所至 2.渲染管线,内置着色器并不和自定义着色器一起提交GPU, 3.TA ...

  8. Unity抗锯齿设置

    Unity抗锯齿设置 问题 方法 方法一 方法二 方法三 方法四 方法五 方法六 参考 问题 有时候在Unity中的模型边缘.棱角会出现锯齿的情况. 如图: 方法 一般情况,下面有以下几种方法: 方法 ...

  9. Unity抗锯齿,Unity3D模型花闪烁等效果优化。

    Unity抗锯齿,Unity3D模型花闪烁等效果优化. 最近在做全息投影项目,模型闪烁,锯齿明显,自己总结了一些优化方法. 方法一:在场景内摄像机上挂载如下抗锯齿脚本.摄像机改为Skybox或者Sol ...

最新文章

  1. 函数指针数组在ARM异常中断处理中的应用
  2. Java 基础系列:不变性
  3. [Spring+Hibernate系列]1.Spring+Hibernate 框架搭建
  4. 恋上数据结构完整笔记(第1季 + 第2季)
  5. JQuery Lightbox -- 一个简单而又谦恭的用来把图片覆盖在当前页面上的脚本
  6. strlen 计算给定字符串的长度
  7. 计算机主机技术标准规范,B级机房技术规范要求
  8. 关于win10优化问题
  9. 在线画板_在线画画_在线画图工具-速写板
  10. 北京邮电大学计算机专业考研复试经验分享
  11. c语言输出整数n的所有素数因子,输入一个正整数 输出它的所有质数因子的c语言程序...
  12. Word embeddings-词向量
  13. 3D游戏与编程——UI系统
  14. 阿里云服务器证书登录如何配置
  15. 百度云虚拟机访问项目404
  16. C++学习日记#2——幂法求矩阵的主特征值
  17. 盘点一下CodePen上那些优秀的前端作品(01)
  18. 比较两个字符串是否相等,strcmp wcscmp stricmp wcsicmp
  19. ubuntu9.04新氧中文定制版类似ghost
  20. 农村人为何出来打工却不在家搞养殖?

热门文章

  1. 转盘游戏简单原理设计
  2. 西北乱跑娃 --- requests爬虫五大反反爬机制
  3. 运算放大器的稳定性分析(一)
  4. 【计算机网络】思科实验(8):网络地址转换之路由器动态NAT模拟
  5. 手机学python_手机学python的app
  6. 应聘恩智浦时考察正则表达式
  7. NPL系列之分词和分词框架(二)
  8. python中elif和else的区别_浅谈Python的条件判断语句if/else语句
  9. 给hacke拨乱反正 黑客、红客、蓝客究竟是什么--来自:互联网实验室
  10. opencv学习-均值滤波blur