抗锯齿_DX12渲染管线(2) - 时间性抗锯齿(TAA)

本文介绍了时间性抗锯齿(TAA)在DX12渲染管线中的应用,阐述了TAA如何通过利用历史帧数据解决几何和着色锯齿问题。内容包括TAA的基本原理、采样位置的调整、动态场景处理以及解决闪烁问题的策略,并提供了最终实现的对比效果。
摘要由CSDN通过智能技术生成

79a061ed7388555bb9c5a6eb48889a95.png

(题图出自虚幻4在siggraph2014发布的视频)

最近我做好了简单的场景编辑和序列化,打算回来继续折腾渲染部分了,首先想要实现的就是TAA(temporal anti-aliasing),为什么阴影和AO之类的啥都没有却要先写TAA呢,因为TAA对整个管线的结构影响非常大,而且后面会有许多地方用得着temporal的方法来增加采样率,比如AO、阴影、SSR等等,所以就把抗锯齿先写了。git地址:

MrySwk/GravityEngine​github.com
91f6572933ad8705bb838f24fc4fd103.png

这一套做法一开始基本上是从虚幻里抄出来的,写的期间我受到了许多大佬的教育,所以最后还是决定(跟风)换掉虚幻里的许多做法,最后出来的效果还不完美但是已经勉强能看了,,,然后这将是一篇比较萌新向的文章(因为我就是萌新),会尽量写清楚点,要是有什么错误的话请评论区啪啪啪打我脸_(:з」∠)_

抗锯齿前后对比图如下:

fba0b445832e0e5be81ff758b6ca9d03.png

db5a3d23f7a582b401d055a7791b5843.png

截图的时候没注意把第二张图分辨率截大了点,懒得再回去截了(╯ ̄Д ̄)╯╘═╛

可以看到上面那张图中主要有两种锯齿,一种是几何的锯齿,比如右边那俩默认材质的柱子和方块的边上就有这种几何锯齿,还有一种是着色的锯齿,球上面的细细的闪光点就是这类。

之前的很多抗锯齿算法是把边缘找出来处理,这种做法只能解决geometry锯齿,对shading aliasing无能为力,要解决shading的aliasing,可以通过增加采样次数的方法,然而直接做多次采样的开销是非常大的,而TAA的做法是,把多次采样的过程分布到每一帧中去,也就是每一帧都利用前面几帧保存下来的数据,也就是所谓的“temporal”所指的意思了,如图。

b0c37eee758ff4622a326f4069e3f9e2.png

当然了,这么做的前提是时间里的每一帧在不同的局部位置采样,也就是说每一帧我们采样的位置就不能像以前一样都在正中心采样了,而是要加一个小的偏移量,一般来讲,这个步骤在写GBuffer的时候完成,而且是通过改投影矩阵的方法:

771904d53aa7b1eda9766cb8c61dc49b.png

要验证为什么要这么改就用xyz1去乘投影矩阵然后做一下齐次除法看下结果就知道了,然后这里修改的偏移量一般选的是低差异序列,具体用什么可以尝试,只要效果好就行,这里我抄的虚幻的,虚幻用的是Halton(2,3),如下

7571e61dc05595c6ec119154f33ba934.png

现在我们知道采样位置,比较trivial的想法就是存前7帧的结果和当前第八帧的渲染结果相加,然后除以8,问题是这样就要很大的空间来存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值