unity抗锯齿

反锯齿分为两大类:
一 Hardware AA :多重采样,即MSAA, 任何平台都支持
二 Post Process AA: Image处理, 包括 FXAA,SSAA等,   移动平台要求OpenGL ES2.0

测试FPS:爬楼          UI             场景1
无   1.x                      45                58
        2.0                      31               47

2x MS         1.x       15                55
                       2.0       21               45 
4x MS         1.x
                       2.0       21             43
8x MS         2.0       21             43
              
FXAA1_PresetA    8                10
FXAA2               8            10
SSAA                         15               8

实时证明,在移动平台上 多重采样比 ImageEffect的AA要效率高很多。 而用几倍的MS对性能影响区别不大,但是高倍数如8x MS就比2x MS 画面提升很多。
结论:建议移动平台上的高端设备开 8x MS.

无AA:
【风宇冲】Unity3D教程宝典之反锯齿

8x Multi Sampling AA
【风宇冲】Unity3D教程宝典之反锯齿


Subpixel:   即一个pixel的RGB中的一个通道。
在Unity ImageEffects里提供的AA算法, 速度快慢依次是 SSAA>NFAA>FXAAII>DLAA然后到其他的FXAA.
对家用机来说,最好的是FXAA III

1.Antialias
主要是边缘模糊.
主要算法是
SSAA: Super-Sampled  Anti-Aliasing
最古老的算法,先渲染高分辨率的大image,然后针对每个最终像素进行多点采样。完成后再down-sample回屏幕的分辨率的image.   每个像素pixel shader的执行次数为N.

MSAA: Multi-Sampled Anti-Aliasing
SSAA的简化版。不同的是,   每个像素pixel shader的执行次数为1 .显卡支持的经典反锯齿方法。节省fill rate,但是耗费内存. Alpha参差不齐。 适合Forward-rendering. 不适合Deferred renderring,因为光照处理在 MSAA完成后.

SMAA:Subpixel Morphological Anti-Aliasing

FXAA:Fast Approximate Anti-Aliasing
比MSAA更好的算法,因为它不忽略多边形及边缘线条,仅仅分析屏幕上的像素。
当它看见像素是人工边缘时,它加以平滑。它使得其他所有全屏反锯齿的方法都被废弃了。
FXAA毕竟是一种“比较廉价”的抗锯齿技术,在大多数的游戏应用中,效果终究不及传统的MSAA(目前很多3D游戏的MSAA都可以设到8倍),适用于性能不高的电脑配置。

作者Timothy Lottes(来自Nvidia)原话:最简易嵌入和使用的反锯齿方法。
2个优势:
(1) 平滑所有屏幕上的像素,包括pixel shader,及 已经经过alpha混合的贴图。而这些是MSAA不能
(2) 非常快, 早期版本的速度都是4X MSAA的两倍。
缺点:
可能会产生你不想要的 模糊,例如要在 UI和HUD 绘制之前 绘制模糊。

FXAA1: 《F.E.A.R 3》、《 永远的毁灭公爵 》、《柯南时代》、《 孤岛危机2 》、《无主之地》
FXAA2: 针对Xbox 360设计的
FXAA3:

FXAA步骤:
【风宇冲】Unity3D教程宝典之反锯齿
(1)图1: 将非线性的RGB颜色数据 转换成标量来估计亮度
(2)图2: 检查本地对比度来避免处理非边缘地带,检查到的边缘为红,黄色代表subpixel锯齿
(3)图3:检查本地对比度来 水平金色,垂直蓝色。确定边缘方向。
(4)图4:得到了边缘方向。最高的对比度 对应 90度的边缘
(5)图5:检查边缘,正向及负向
(6)图6:得到边缘的两端边缘,边缘的像素位置被转入到 垂直于边缘的位置来减少锯齿
(7)图7:根据这个sub-pixel offset,输入贴图被重新采样。
(8)图8:混合

1. 求亮度 Luminance Conversion
float FxaaLuma(float3 rgb)
{
   return rgb.y *(0.587/0.299) + rgb.x;
}

2 Local Contrast Check
检查本点 以及 上下左右4个临点。如果 luma的差小于 luma最大值的一个比例,那么视为没有锯齿

float3 rgbN = FxaaTextureOffset(tex, pos.xy, FxaaInt2( 0,-1)).xyz; float3 rgbW = FxaaTextureOffset(tex, pos.xy, FxaaInt2(-1, 0)).xyz; float3 rgbM = FxaaTextureOffset(tex, pos.xy, FxaaInt2( 0, 0)).xyz; float3 rgbE = FxaaTextureOffset(tex, pos.xy, FxaaInt2( 1, 0)).xyz; float3 rgbS = FxaaTextureOffset(tex, pos.xy, FxaaInt2( 0, 1)).xyz; float lumaN = FxaaLuma(rgbN);

float lumaW = FxaaLuma(rgbW);
float lumaM = FxaaLuma(rgbM);
float lumaE = FxaaLuma(rgbE);
float lumaS = FxaaLuma(rgbS);
float rangeMin = min(lumaM, min(min(lumaN, lumaW), min(lumaS, lumaE)));

float rangeMax = max(lumaM, max(max(lumaN, lumaW), max(lumaS, lumaE))); float range = rangeMax - rangeMin;
if(range <
max(FXAA_EDGE_THRESHOLD_MIN, rangeMax * XAA_EDGE_THRESHOLD)) {

return FxaaFilterReturn(rgbM); } 

3 Sub-pixel Aliasing Test
4 Vetical/Horizontal Edge Test
判断是水平 还是垂直

5 End-of-edge Search
搜寻end of edge

参考文章:
转: http://blog.sina.com.cn/s/blog_471132920101gvxf.html



### Unity 中实现抗锯齿的方法 在 Unity 中,可以通过多种方式来实现抗锯齿效果。以下是详细的说明: #### 1. 使用多采样抗锯齿 (MSAA) 通过启用 MSAA 可以有效减少几何边缘上的锯齿现象。此功能可以在 Quality Settings 中配置: - 打开 **Edit -> Project Settings -> Quality**。 - 设置目标平台的质量等级,在 **Anti Aliasing** 下拉菜单中选择所需的级别(如 2x、4x 或者更高)[^1]。 对于特定 Canvas 的 Camera 模式下的 UI 渲染,可以按照如下操作: - 将 UI 的 Render Mode 调整为 Screen Space - Camera 或 World Space。 - 创建专用的 Camera 来渲染 UI,并在此 Camera 上开启 MSAA 功能。 - 配置该 Camera 的 Culling Mask 属性仅显示 UI 图层,从而优化性能并专注于处理 UI 锯齿问题。 ```csharp // 示例代码:动态修改摄像机的抗锯齿设置 using UnityEngine; public class SetMSAASample : MonoBehaviour { void Start() { Camera uiCamera = GameObject.Find("UICamera").GetComponent<Camera>(); if (uiCamera != null && SystemInfo.supportsMultisampledTextures) uiCamera.allowMSAA = true; } } ``` #### 2. HDRP 后期抗锯齿技术 如果项目使用的是高清渲染管线 (HDRP),则可以利用后期处理中的高级抗锯齿算法。这些方法通常基于屏幕空间计算,能够提供更高质量的结果而不会显著增加 GPU 工作负担[^2]。 常见的后期抗锯齿方案包括但不限于 FXAA 和 TAA(Temporal Anti-Aliasing),它们分别具有快速执行以及时间维度平滑的优势。具体应用步骤如下: - 确认已导入最新版本的 HDRenderPipeline Asset。 - 在 Scene View 中选中当前使用的 Volume Component 并添加 Post Process Layer 组件。 - 添加合适的 AA Effect Preset 至 Active Overrides 列表内。 注意:TAA 对于运动物体特别有用,因为它会考虑帧间变化;然而它也可能引入轻微模糊感,因此需权衡画质与清晰度之间的关系。 #### 3. Android 设备上自定义脚本实现抗锯齿 针对移动平台开发时,由于硬件资源有限,可能无法直接依赖传统桌面级解决方案。此时可通过编写脚本来手动控制纹理渲染过程中的过滤行为达到一定改善目的[^3]: ```csharp // 自定义抗锯齿逻辑示例 using UnityEngine.Antialiasing; void EnableCustomAntialiasing(RenderTexture targetTex){ var renderer = GetComponent<TextureRenderer>(); if(renderer == null){ renderer = gameObject.AddComponent<TextureRenderer>(); } renderer.targetTexture = targetTex ; } ``` 以上就是关于如何在不同条件下实施 Unity 抗锯齿的一些指导方针。实际运用过程中还需要依据具体应用场景灵活调整参数设定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值