TAA原理及OpenGL实现

有没有人在啊,想请说下,TAA原理及OpenGL实现
最新回答
慌屿

2024-10-16 05:39:26


在寻找关于OpenGL实现TAA的文章时,发现相关资源匮乏,于是根据所搜集的资料,这里总结了TAA的原理和实现步骤。


TAA(Temporal Anti-Aliasing)采用不同于MSAA的策略,它将多次采样分散到每一帧中,通过在非像素中心点进行抖动(jitter)来采集历史帧数据,降低了对额外存储空间的需求,但不适用于延迟渲染。


具体实现涉及动态混合,使用公式:[公式] 通过上一帧的历史信息、当前帧颜色和一个系数(如0.05)进行混合。同时,需要记录物体在历史帧的MVP矩阵,以重投影动态物体的屏幕空间坐标,用于动态模糊和 Motion Vector(位移向量)的计算。


TAA流程包括:在渲染管线中定位、处理新出现的像素(Ghosting)、解决颜色对比过大导致的闪烁(Flickering)问题,以及针对几何和着色走样的解决方法。例如,通过比较当前帧和历史帧的色彩,以及使用ToneMap和色彩空间转换来减少闪烁。


尽管TAA能显著减少锯齿,但它仍然面临挑战,如闪烁问题的难以解决,特别是在几何走样情况下。虚幻引擎尝试了多种方法,但闪烁问题仍被视为"Extremely difficult!"。


参考文章如下:



  • [1] DX12渲染管线(2) - 时间性抗锯齿(TAA)

  • [2] 主流抗锯齿方案详解(二)TAA

  • [3] TAA tutorial

  • [4] Temporal AA Anti-Flicker

  • [5] HIGH-QUALITY TEMPORAL SUPERSAMPLING - Brian Karis (Epic Games, Inc.)

  • [6] An Excursion in Temporal Supersampling - NVDIA

  • [7] Temporal Reprojection Anti-Aliasing in INSIDE