teamviewer 6 0-小米网盘
![fxaa](/uploads/image/0234.jpg)
2023年4月4日发(作者:deamon tools win7)
Unity抗锯齿⽅案梳理
我们在Unity开发过程中通常会碰到锯齿的问题,尤其是⼀些直边斜过来的时候,如图:
抗锯齿在实际项⽬中必不可少,本⽂梳理⼀下Unity中各抗锯齿⽅案:
MSAA-----多重采样抗锯齿----MultiSamplingAnti-Aliasing
FXAA-----快速近似抗锯齿----FastApproximateAnti-Aliasing
SSAA-----超级采样抗锯齿----SuperSamplingAnti-Aliasing
FSAA-----全屏抗锯齿----FullSceneAnli-Aliasing
MSAA----多重采样抗锯齿----MultiSamplingAnti-Aliasing
CSAA-----覆盖采样抗锯齿----CoverageSamplingAnti-Aliasing
CFAA-----可编程过滤抗锯齿----CustomFilterAnti-Aliasing
MLAA----形态抗锯齿(统称,包含FXAA、SMAA等)----MorphologicalAnti-Aliasing
TAA------时间性抗锯齿----TemporalAA(TXAA,TSMAA,TSSAA)
CTAA-----电影时间抗锯齿----CinematicTemporalAnti-Aliasing
SMAA----增强型⼦像素形态抗锯齿----EnhancedSubpixelMorphologicalAnti-Aliasing
MFAA----多帧采样抗锯齿----MultiFrameSamplingAnti-Aliasing
EQAA-----增强型抗锯齿----EnhancedQualityAA
DLSS-----深度学习超采样----DeepLearningAA
MSAA
MSAA基本上只对画⾯中物体的边缘进⾏放⼤、混合的抗锯操作,因为边缘是锯齿最明显的地⽅(注意不是所有的边缘)。在光栅化阶段,判
断⼀个三⾓形是否被像素覆盖的时候会计算多个覆盖样本,但是在pixelshader着⾊阶段计算像素颜⾊的时候每个像素还是只计算⼀次。
我们⼀般说的4x、8x,就是放⼤倍数,放得越⼤,供混合的采样越充份,效果越好,但是处理速度也就越慢。
Unity⾃带的设置中的2倍、4倍、8倍就是MSAA。实测项⽬中MSAA会导致复杂模型内部边缘闪烁问题,最终未开启MSAA。
8倍MSAA效果:
FXAA
SSAA
场景要以最终分辨率的两倍渲染到缓冲区,并平均四个像素的块以⽣成最终图像。甚⾄可以使⽤更⾼的分辨率和不同的采样模式来进⼀步改
善效果。这种⽅法消除了锯齿,但也会稍微模糊整个图像。
简单说就是原来渲染1024x768分辨率的,我直接x2或者更⾼,最后缩⼩到1024x768来渲染。
SSAA是最暴⼒的抗锯齿⽅案,这种做法在数学上是最完美的抗锯齿。但是劣势也很明显,光栅化和着⾊的计算负荷都⽐原来多了4
倍,rendertarget的⼤⼩也涨了4倍。效率⾮常差,实际项⽬中效果确实最好,但在某些移动端机型会造成严重的发热情况。
SSAA的代码可以直接去取,放相机上即可。
SSAA效果:
简单常⽤的基本就上述三种,使⽤起来⽐较简洁。
官⽅的后处理插件PostProcessing抗锯齿⽤法:
1.在PackageManager中找到PostProcessing并安装
2.给相机添加Post-processLayer
3.修改需要影响的物体层,并选择抗锯齿⽅案,物体别忘了改到对应的层
-process插件提供了3种抗锯齿⽅案:FXAA,SMAA,TAA。
FXAA
其中FXAA是如上所述效率最⾼1个DrawCalls,效果最差的,主要针对抗锯齿要求不太⾼的项⽬,甚⾄还能在FXAA基础上选FastMode
进⼀步提升效率。
SMAA
SMAA是类似FXAA的滤镜类抗锯齿,性能消耗约为FXAA的2倍左右,也算⽐较好的,SMAA的核⼼原理来源于MLAA。MLAA的基本思
路是:检测每帧图像上的边缘(通常可对亮度、颜⾊、深度或者法线进⾏边缘检测),然后对这些边缘进⾏模式识别,归类出Z、U、L三种形
状,根据形状对边缘进⾏重新⽮量化(re-vectorization),并对边缘上的像素根据覆盖⾯积计算混合权重,将其与周围的颜⾊进⾏混合,从
⽽达到平滑锯齿的⽬的。
image
SMAA在MLAA的基础上加⼊了针对尖锐⼏何特征的处理,并加⼊了对⾓线模式识别,加⼊了对局部对⽐度的考虑,改善了距离搜索算法。
总体上是效果和性能的中和产物,个⼈尝试了⼀下简单的⾯⽚这个抗锯齿效果最好,4个DrawCalls。
TAA
TAA据说(未考证)是⽬前业内游戏⼤⼚使⽤最多,最⼴泛的抗锯齿。使⽤运动⽮量组合两帧,以确定在何处对前⼀帧进⾏采样。在每⼀帧对
屏幕区域内的像素进⾏⼀个抖动操作,这样当连续的多个帧的数据混合起来以后,就相当于对每个像素进⾏了多次采样,他将采样点从单帧
分布到多个帧上,使得每⼀帧并不需要多次采样增加计算量,但TAA往往会盲⽬地跟随移动物体的运动⽮量,从⽽造成屏幕上的细节模糊不
清。
据说(未考证)⼤⼚基本会⾃⼰根据⾃⼰的项⽬写TAA的效果。如果物体运动过快会导致画⾯糊、残影,性能⽅⾯好像各有说辞,3个
DrawCalls,这⾥如果是⼩团队,建议这⼏个⽅案都试试根据项⽬需求录取吧。
PostProcessing除了抗锯齿之外还提供了很多其他的后处理效果,⼩伙伴们可以⾃⾏百度试试(这应该是TA的事情)。
更多推荐
fxaa
发布评论