北京建设网站,网页搜索如何屏蔽广告,html网站头部如何制作,微网站的搭建光线追踪重投影方法
重投影这项技术一般用于时间性帧复用技术上#xff0c;例如TAA(Temporal Anti-Aliasing)反走样或者抗锯齿技术。读这篇文章最好先对TAA这类技术的算法流程有了解。 1.TAA抗锯齿技术简介
先简单介绍下TAA抗锯齿的原理#xff0c;在游戏中#xff0c;当前…光线追踪重投影方法
重投影这项技术一般用于时间性帧复用技术上例如TAA(Temporal Anti-Aliasing)反走样或者抗锯齿技术。读这篇文章最好先对TAA这类技术的算法流程有了解。 1.TAA抗锯齿技术简介
先简单介绍下TAA抗锯齿的原理在游戏中当前渲染一帧画面的单独拎出来看是有锯齿的物体边缘有狗牙而TAA则将历史帧作为抗锯齿的参考数据可以一帧也可以多帧。为当前帧的一个像素找到它在历史帧中对应的那个像素做个权重混合。如果用多个历史帧的话那么越久远的帧在混合中使用的权重越低。
大致的原理图如下 所以TAA技术的重点之一就是上图那根红色箭头如何为当前像素找到它在上一帧中对应的位置。实现这个红色箭头的就是重投影技术。 2.重投影技术的简介
重投影技术将当前像素进行投影分为两种
反向重投影从当前像素反向寻找其在历史帧中的位置。前向重投影从历史像素前向寻找其在当前帧中的位置。
我认为区分清楚这两种方向不同的方法非常关键和重要。
TAA抗锯齿技术这类时间性复用技术几乎只用于光栅渲染很少在光线追踪中用到。并不是光线追踪渲染的图无锯齿而是光线追踪渲染无法提供光栅渲染在重投影技术中所需要的数据因此TAA技术无法或者很难直接从光栅渲染中套用在光线追踪渲染中。
重投影在光栅渲染中已有成熟的方法但是在光线追踪中的相关研究较少缺乏通用的方法。光栅渲染做重投影通常用的是反向重投影的方法。例如使用运动矢量(Motion Vecter)方法或者通过投影矩阵反推的方法。
但是运动矢量和投影矩阵方法都是用到光栅渲染过程中可以天然产生的数据而光线追踪渲染的方法又大大不同这些数据都没法在渲染过程中天然获得。
3. 光线追踪前向重投影方法
因为接触到查阅到的大多都是反向重投影的思路所以我想了很久为光线追踪做重投影的路子都觉得太绕太复杂。
后面读文献才知道还有前向重投影这个方向。我就想反过来从历史像素推出它大概会在当前帧跑到哪里行不行。答案是可以的前向重投影的思路能够直接使用光线追踪过程中产生的数据。
先假设这个光线追踪场景场景中物体都是静止不动的前后帧只有摄影机是运动的重投影只用到一帧历史帧。
原理图 具体方法流程 该重投影方法需要缓存历史帧碰撞点坐标。 遍历历史像素时首先取出像素对应的历史碰撞点坐标利用当前摄像机参数将该坐标从世界坐标系变换到当前帧的摄像机坐标系中。 然后利用相似三角形理论将该历史碰撞点的三维坐标变换为当前帧中的 坐标请看下图。 在摄像机坐标系中将摄像机与屏幕像素平面和历史光线碰撞点连接成相似三角形再利用摄影机到像素平面的距离求该碰撞点在像素屏幕中的 和 坐标即当前帧的UV坐标。 接着将 坐标转换为 标准设备坐标再根据当前窗口尺寸计算得到光栅坐标。该光栅坐标即历史像素映射到目标帧中的像素坐标若映射结果超出目标帧的像素范围则弃用最后将历史像素颜色值存入重投影缓存中用于与当前渲染帧像素做加权混合。
算法流程图 效果 能够实现光线追踪的重投影算法那TAA抗锯齿当然能做。我觉得有一块更适合用在光线追踪上的就是降噪光线追踪采样数低的时候噪点非常严重结果重投影技术去研究降噪技术是一种省时间省性能的方法。
下图是我做的对光线追踪采样光线数量只有一条的时候用了上面重投影技术做的时间性降噪方法前后对比还是比较明显的。 因为并没有做额外帧的渲染所以性能额外消耗很少。不过采样数只有也是尽力了把采样次数提高一点的话降噪效果也挺好只是的时候差异很明显。 4.讨论
上面的方法也是限定了场景的场景中物体都是静止不动的前后帧只有摄影机是运动的重投影只用到一帧历史帧。
如果场景中物体会发生变换的话我没有继续研究下去不过我的想法是现在方法是只有摄像机在运动如果物体发生变换的话那就是与摄像机发生相对运动。那就记录物体的变换矩阵把历史帧物体的碰撞点坐标变换到当前帧的新三维坐标再使用上面介绍的算法去计算历史像素其在当前帧中的目标像素点。
有其他光线追踪重投影想法的或者我的算法有啥缺点改进的都欢迎找我交流。