找回密码
 立即注册
查看: 567|回复: 8

UE4抗锯齿学习

[复制链接]
发表于 2022-4-9 15:57 | 显示全部楼层 |阅读模式
今天学习了一下UE4高质量抗锯齿自己写了一点东西:
UE4主要的抗锯齿方法:TemporalAA
AA效果展示:





快速抗锯齿效果如图



仔细看起来 似乎Temporal AA效果更好点

主要存在的问题:
1.锯齿的产生问题
2.既有几何锯齿又有着色锯齿
3.子像素特征问题
4.稳定性问题
MSAA(多重采样抗锯齿):
优点:-将当前分辨率成倍提高,然后把画面投射到显示器上。这样就在显示尺寸不变得情况下,让单个像素变得极低,从而减少了锯齿感。
缺点: -不用每个每个像素都着色一次的,但是需要采用太过昂贵的延迟渲染,自身渲染会使用太多的位宽。
           -在三角形内部有比在其边缘有更多的锯齿。
Spatial filter(空间过滤):
-例如MLAA,FXAA,SMAA等等,主要是寻找边缘,用来减少阶梯式的变化,但是不是清楚亚像素的特点,即使在简单的阶梯式变化中也不具有稳定性。FXAA,SMAA几乎是是一致的。
Specular Lobe filtering:
-例如Toksvig,LEAN,vMF等等,要过滤着色器输入以防止亚像素的着色器输出。但是很难过滤所有的东西,因为几何特点是主要问题所在,然后通常没有唯一的roughness图,程序化的纹理,还是存在锯齿。如果在屏幕空间过滤锯齿的话,会缺少亚像素的特点。
Temporal filtering:
-在多个框架上分别过滤,例如SSAO的使用,采用这种过滤器,能获得更高的质量,同时更简洁。能达到类似于SSAA的效果。
SSAA:
超级采样抗锯齿,主要是查找边缘,然后模糊边缘,为一种后处理方法,主要在边缘进行超级采样,不必进行全图采样,为一种。
在静态场景中:
1.Jittering
-调整投影矩阵


-规则网格


2.Sample Pattern
-无论在时间上还是空间上,都不进行聚类,需要一个低差异渐进的序列。
-在Halton[2,3]序列中要优于HW MSAA



ToneMaping

       -简单的说来,就是为了让图像能在显示器上面显示的更真实。主要是计算当前的平均亮度,然后根据这个平均亮度来选择一个合适的亮度域。最后将整个场景映射到这个亮度域得到一个正确的计算结果。防止在将一部分像素映射到显示器时出现曝光的现象。



动态场景中:
Reprojection(场景重建方面):
1. 当前像素的历史可能在屏幕的其他地方根本不存在
2. 使用与运动模糊相同的速度缓冲区去计算
3. 同时要去掉抖动
Velocity accuracy(速度精准方面):
-如果没有正确的速度的运动可能会被抹除,同时微小的不精确会对静态图像产生条纹,在    16:16的速度缓冲器上。同时如果是程序动画,滚动纹理,和几乎不透明的半透明物体上面如果处理会很棘手。
Motion on edges(移动边缘方面):
  -可能在移动的时候,边缘的抗锯齿不会和物体一起移动。剪影边缘会失去抗锯齿效果。


  Ghosting:
-出现阴影的原因有,所有的样本都具有不同的深度,同时速度加权会产生着色器的改变,出现半透明效果。


Neighborhood clamping:
  -引擎采用这个方法,用来对于当前的像素以及周围的数个像素的颜色建立一个颜色空间。在之前的像素和现在的颜色区别不是很大的时候,就包含在这个区域里。如果和之前的差距特别大的,也会尽量将其拉到和之前差不多的范围。假设AA的结果是相邻的混合,在3x3的临域来作为最小最大值混合




Shaped  Neighborhood clamping:
-由8个相邻的结果组成一个3X3的区域




YCoCg box:
   -基本的最小最大值为RGB空间中的AABB,理想的情况下是使用领域的颜色。但是消耗大




Translucency:
-在单一历史的情况下,或者单一速度的情况下,半透明是不适用的。因为无法对于深度缓冲区进行比较。
Translucency solution:
-给半透明以有反应的材质信息
  -在呈现半透明时设置模板。
  -Neighborhood clamping只会对火花这样的小粒子效果有用




Temporal AA:工作流程




Flickering(出现闪烁):
出现闪烁的情况:-相机静态,像素闪烁
                           -通常在垂直或者水平的线条因为连贯的抖动,会出现因为丢失子像素历史而被Clamp
                          -在Clamp的一瞬间出现闪烁
                           -会出现如下图类似的闪烁


可取的解决办法:-采用bias降低波的振幅


                           -减少平滑度的变化复杂度

学习来源:https://de45xmedrsdbp.cloudfront.net/Resources/files/TemporalAA_small-59732822.pdf

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2022-4-9 16:07 | 显示全部楼层
正好我把虚幻的TAA的Flickering弄到Unity了。然后ghost换成了variance的。滑稽。
发表于 2022-4-9 16:09 | 显示全部楼层
你写反了吧,msaa 不能用延迟渲染
发表于 2022-4-9 16:15 | 显示全部楼层
我想请教一个问题,在引擎中点光源(固定和动态)灯光离远了变亮是怎么回事
发表于 2022-4-9 16:24 | 显示全部楼层
这我还真没见过
发表于 2022-4-9 16:32 | 显示全部楼层
好的,谢谢
发表于 2022-4-9 16:37 | 显示全部楼层
我仔细看看 可能写错了
发表于 2022-4-9 16:43 | 显示全部楼层
看到MSAA 需要使用延迟渲染 我就陷入了深深的怀疑。。果然
发表于 2022-4-9 16:48 | 显示全部楼层
渲染出来的序列高光闪在哪里调整
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-22 15:43 , Processed in 0.095825 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表