【水科普】为什么光线追踪未去噪的图象很暗

最近在玩 Taichi 图形编程,不得不说很好用,十分简洁方便,我在以后就基本上都用 Taichi 语言来展示代码了。

首先再次 review 噪点是怎么来的:


(相关资料图)

现在的光线追踪(路径跟踪)是随机采样的,并且对于实时渲染来讲,一帧往往只能发射 1 条光线去采样。所以原始图像信号是不连续的,由多个离散的采样点组成。如图,绿色的点代表着采样点(中):

然而我们想要的信号是连续的(左),直接呈现这些离散的信号会导致最终结果(显示的图像)失真,所以我们需要进行信号重建(reconstruction)(右)。右图展示了一个线性插值的重建。

在光追中,重建的具体应用就是大名鼎鼎的降噪(denoise)了。不过玩一些游戏可以关闭降噪,你会发现相比于降噪的完结果,未降噪的明显暗很多。难道降噪打破了能量守恒吗?那光追的意义是什么呢?

我们知道现在的光线追踪具体是用路径跟踪来实现的,从摄像机视角发射光线并且追踪到光源,对每个具体着色点求解渲染方程来计算颜色,逻辑上是很简单的一件事。

在程序上,总体就是分这三步:

而我们要讨论的问题就是为什么结果比较暗,这是关于颜色的问题。所以我们看向着色(def 着色(ray: Ray) -> Ray)部分。

这就是着色程序了,非常清晰明了:

你看,着色阶段分为了两种情况,也就是光线命中和未命中。未命中是怎么回事呢?

对了。我们一开始就提到了采样的问题,我们做的是随机采样,有的光线不能命中到着色点。

所以我们定义一个未命中的情况:

看代码,我们定义颜色为 ,而在 RGB 颜色空间中:

是黑色。所以未命中的着色点我们就在程序中让它显示成黑色的。

当然如果你闲的蛋疼,也可以改成  让它变成白色的。是不是这样看上去就不暗了。

所以未命中点的颜色是程序固定设置的,而不是着色方程让它变成黑色。最重要的是它本质上没有违背能量守恒,只是视觉上看起来比正确图像暗而已。

关键词:

x 广告
x 广告
x 广告

Copyright   2015-2022 起点仓储网版权所有  备案号:皖ICP备2022009963号-12   联系邮箱: 39 60 29 14 2@qq.com