Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1

Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1

  • 1 Basic idea
    • 1 RTX
    • 2 SPP path tracing
  • 2 Motion vector
    • 1 previous method
    • 2 industrial solution
    • 3 G-buffer
    • 4 back projection方法
  • 3 Temporal accumulation/filtering
  • 4 Temporal Failure
    • 1 failure case
      • 1 case 1: swithcing Scenes;
      • 2 case2 :waking backwards in a hallway-screen space issue.
      • 3 case3 suddenly appearing background(disocclusion)
      • 4 case 4
        • 1 detached shadows问题。
        • 2 glossy reflected images
    • 2 如何解决
  • 5 some side notes
  • 6 视频

Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第1张图片
皮肤,毛发的渲染都非常复杂,放在离线渲染中讲。
Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第2张图片

Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第3张图片

1 Basic idea

1 RTX

Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第4张图片
2018年 ,提出了RTX架构。2500亿市场。
Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第5张图片

RTX做什么?
允许我们做光线追踪。

Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第6张图片

Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第7张图片

软阴影,反射,环境光遮挡,全局光照。
RTX就是一个硬件架构,能够让我们去trace光线 而已。

RTX是硬件上的一个突破,就是在显卡上加了一个部件。这个部件就是来做光线跟踪的

光线追踪本质上做的就是做光线和场景的求交。
光线和场景如何求交?不断判断光线和一个BVH和AD Tree这种加速结构,从上到下,根节点到叶节点走一遍,看光线和哪些节点内部的三角形相交。其实本质上在做的就是数值遍历的问题。
GPU不好做这个事情。

新的部件可以让每秒trace更多的光线。硬件能力上针对ray tracing,得到了质的飞跃。
每秒trace 100亿根光线。(10G)

2 SPP path tracing

1个光路样本
Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第8张图片

Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第9张图片
1个像素需要打四条光线。

1 rasterization :每个像素都要从camera出发打一条光线穿过像素,看它打到了什么?这一步和光栅化一模一样。与其说 每一个像素trace一根primary光线,不如真正的光栅化一遍,也可以得到最前面的位置。光栅化更快点。
这样的话就只考虑三条光线就可以了。

通过硬件,可以做1spp了,但是结果还是很noisy。RTRT最关键的地方就是降噪。
实时光线追踪和之前的path tracing 只是进行了算法简化,并没有什么新的算法,本身的突破是因为硬件能力的增加。

Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第10张图片

RTRT降噪的效果:
Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第11张图片
输入是左手和右下,中间是降噪的效果。
与DLSS没有关系。

2 Motion vector

1 previous method

overblur:过于模糊
artifact:肉眼可见的bug
速度:小于2ms。

没有RTX的时候,接近于实时,

离线的方法,一幅图需要1分钟。

深度学习的发方法,不可以,跑一遍网络就需要几十ms。
optix—自带降噪器。几十ms
Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第12张图片

2 industrial solution

工业界是如何做的呢?

Temporal:时域上的滤波方法。
关键思维:当前帧的前一帧是滤波好了的。
帧和帧之间具有连续性。
用motion vector来找到前一个位置,告诉你物体是怎么样运动的,从而可以找到之前的对应。
用上一帧的信息知道当前帧,通过这种方法相当于增加了spp。上一帧也用了上一帧的结果,所以是指数衰减。
时间上的复用。
在空间上如何使用呢?下一节课讲。
Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第13张图片

3 G-buffer

几何缓冲区

直接光照,得到一张深度图,任意一个点的法线图,任意一个点对应的albedo图,也就是以前的kd值,世界坐标。

生成G-buffer是很轻量的。
G-buffer记录的是屏幕空间的信息。
Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第14张图片

4 back projection方法

通过back projection方法准确的求出了motion vector;。
当前帧和上一帧,像素和像素的对应。这个对应到底是谁,
肯定不是像素的坐标, 是要找这个像素里面的内容在上一帧应该在哪个位置。
你透过这个像素看到的这个点,在这个场景或者物体上,它的世界坐标在上一帧,如果还投影到你的上一帧的屏幕上,然后你在上一帧屏幕上会看到什么。

Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第15张图片

首先要得到当前帧的像素x,透过它看到的那个点的世界坐标到底是什么,也就是知道这个点它真实坐标是什么,而不是它当前的屏幕上的坐标。

在G-buffe中我们生成了一个世界坐标的图,这个图记录的就是每个像素对应的世界坐标。
1.如果有拿到就可以了,如果没有可以算。
2.如果没有需要自己算,过程如下:
games101复习:
三维空间中的一个点,最后怎么能够变到屏幕上?
经过MVP变换,然后modelviewprocjection矩阵变换,变成一个[-1,1]三次方的cube,然后再经过一个视口变换viewport,变到屏幕上。

把上面这个过程逆变换,但是那个像素点的坐标,必须要带着深度z,变成一个三维的。

如果当前帧和上一帧这个物体没有动,它的世界坐标不会变。
如果点运动了,需要存下一个变换,知道了当前帧像素点的世界坐标,用变换矩阵,求逆就可以得到上一帧的世界坐标。这样当前帧和上一帧的世界坐标我们都知道了。
通过MVP,视口变换我们就得到了当前帧的点在上一帧的对应。
Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第16张图片
光流和motion vector的区别:
motion vector:是个准确的算法,我可以百分之百计算到像素点对应到上一帧的哪里。
但是光流是基于内容的,用的是两帧渲染的结果,然后去找他们的对应。这个就挺困难。如果用深度学习的方法去求光流就很慢。最主要的区别就是我们的算法掌握着整个渲染的过程。

3 Temporal accumulation/filtering

Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第17张图片

当前帧80%左右都是用的上一阵的信息。
如果当前帧的光照改变了,是否可以用上一帧的信息:不能;
g-buffer是通过光栅化的时候得到 的

没有RTX的时候做的整个效果。1spp,8-9FPS;

Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第18张图片

Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第19张图片
降噪后的结果:
Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第20张图片
降噪后的结果亮了,但是带噪声的图绝对不应该是暗的(能量守恒)。
在HDR显示器上看的话带噪声的也是亮的。
滤波绝对不会让带噪声的图变亮。
下面的图是正常的光锥实现的效果,对比降噪和下面这张图,可以看到缺失了一些信息。
Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第21张图片
Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第22张图片

4 Temporal Failure

时间上不好用的时候,该怎么办。

依赖于上一帧,如果没有第一帧,那怎么办。

1 failure case

1 case 1: swithcing Scenes;

蹦迪的场景,光源一直在变换。
Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第23张图片
burn-in period;预热
突变后需要一段时间去预热。

2 case2 :waking backwards in a hallway-screen space issue.

上一帧的时候一些物体不在屏幕中,像素点找不到上一帧的对应。
Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第24张图片

3 case3 suddenly appearing background(disocclusion)

motion vector
disocclusion区域的问题,本质上还是屏幕空间的问题。
Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第25张图片
如果强行复用的话,就会把上一帧的颜色补到不该补的地方。
Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第26张图片
严重的拖影。
Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第27张图片

4 case 4

以上都是几何方面的问题,还有shading方面的问题。

1 detached shadows问题。

Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第28张图片

Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第29张图片

Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第30张图片
Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第31张图片

2 glossy reflected images

地板上的反射颜色滞后。
Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第32张图片

问题是什么?
因为几何没有变,所以motion vector就会没动,但是它的shader变的非常厉害。

2 如何解决

Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第33张图片

Clamping:
上一帧没有噪声的值拉进当前帧。

Detection:
多做一步判断,
每个物体都有一个颜色,作为它的编号ObjectID。
0号物体,箱子是6号物体,
如果这一帧是0号物体,找到上一帧的对应也是0号物体,那可以接受;
如果找到上一帧的对应是6号物体,不可以接受。然后调整apha。但是会更noise,重新引入了noise.
Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第34张图片

5 some side notes

和TAA很类似。

第一篇研究motion vector的文章。
Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第35张图片
下一节课:
Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第36张图片
Games202高质量实时渲染_lecture12_Real-Time Ray Tracing 1_第37张图片

6 视频

https://www.bilibili.com/video/BV1YK4y1T7yY?p=12

你可能感兴趣的:(Games202,高质量实时渲染)