Quantcast
Channel: BlenderGET
Viewing all articles
Browse latest Browse all 25

如何在Cycles中降噪

$
0
0

有没有人想过如何在 Cycles 中去除噪点?Bashi 的 NodePack 之前做过类似尝试,没有修改过一句代码,仅仅使用的是结点设置,效果嘛,看看…

bmw27-bashi-comparison

… 你会发现效果其实并不理想,车的前盖看上去还OK,但是地面的阴影却十分粗糙,侧面非直接光照的表面也有大量的噪点。按理说技术层面上是不应该有问题的,但为什么会成这样,还真得花点时间深入研究下。

bmw27-debugging

问题的原因应该是,光泽和色度通道在混合时,双边过滤器会产生一些噪点,也许会在之后的步骤中产生,我们试试怎么基于 Bashi 的结点思路去优化一下。

噪源

光线追踪计算中会产生意料之外的光线数据,可能的来源有3个:

  1. 没有足够的采样光线来支撑积分器做值收敛计算。
  2. 光线在追踪过程中,错过了一些重要的光源。
  3. 你电脑出 BUG 了!

当然,这第三种可能几率很小,所以就只看看前2种情况吧。

sampling_failures

当光线从一个像素点中射出,并试图独立反向寻找一个强光线光源时,就像是一只飞舞在夜空中的萤火虫去寻找光源,如果积分器有足够的采样深度,例如反弹次数和衰减比例等,那么该点和其他所有点一样,最终都能找到光源位置,并根据路径深度来表现光线的明亮度等,这一点是没问题的。

如果希望在这个过程中去除掉噪点,就得考虑其中间接光照产生的非均匀追踪计算。

path_bounce_test-cutaway

如果经过反弹追踪到光源的光线数量足够多,那么我们就能得到足够少的噪点。相应的,如果反弹次数较少,那么大量光线也都能同样成功实现追踪计算,光线效果也会更精确。不过光线不会都从同一个起点出发,所以有些个别光线需要额外的延长光程,去作用于反向追踪计算,以获得更好的光影效果。如果满足不了,那么就会产生噪点。

path_bounce_test-combined

更糟糕的是,目前的3D主流计算趋势,就是要去利用间接光照做照明,而这也是最能模拟真实世界照明的方式。但这种方式会产生的主要问题是,噪点会在一些平面区域上表现的尤为明显,因为我们的人眼会默认为这些平面区域就应该是平滑的,就比如说墙壁吧。

如何在Cycles中降噪

注意看上图,表面平滑的部分,它们的表面看上去都是近乎一样的法线效果,也就是相似的噪点分布。而弯曲或带扭曲的部位,几乎看不见噪点。

classroom-normal1

物体的照明计算主要是依靠于其表面的法线,如果相邻部位的法线值相近,那么照明效果也会相似。这就给出了一个提示:如果将采用相同法线的相近像素光照做一个合并,那么这就可以欺骗系统,在较少的采样数下也能完成大面积的完整采样计算。而且全局照明算法也有类似的手段,采用模糊化的效果来迷惑人眼。

双向过滤

说到模糊化,大家应该都知道高斯模糊吧,这是一种十分高效而且效果很好的数学算法。但和其他过滤算法类似,它也有一个缺陷,就是边界的模糊问题,因为它对待边缘和平面的模糊方式是一致的。

blur_filters

有个取巧的解决办法:使用权重值来控制,人为地降低边界部分的通道色彩叠加效果。这是因为边缘其实就是两个模型的本体色彩,在临界的位置做的一种融合式叠加,当然还包括两侧的阴影。这样的方式呗成为双向滤波,是比较常见的降噪处理算法。

这个场景的噪点十分严重,但是借助双向滤波的算法,我们可以看到,画面的色彩细节从高斯模糊后的画面里凸现了出来,而噪点则被过滤掉了。

我们也可以借助模型的法线属性,用于辅助生成权重图,让物理边缘与视觉边缘相对应,使拥有相同表面法线的物体法线值也相同,最终实现双向过滤的算法。很多实现该算法的功能,都会添加一个权重的选项,用于控制哪些部分可以参与降噪计算,哪些不能。只是看看我们手上的......

bilateral_blur_in_composer

Cycles 居然没有权重的选项!好吧,那我们就加一个上去看看效果如何。

classroom-normal-only

说实话,效果有点惨不忍睹。墙面看上去还行,桌子看上去还行,但是看看招贴处上的纸张,表面色彩几乎和背景色彩糊在了一起。也就是说,法线通道并没有准确得捕获每一处的边缘信息,我们需要一些特殊的色彩来强化边界值,这样贴图和墙纸就能与背景墙区分出来,避免降噪计算时被误伤。

Cycles 有两种解决方案,表面法线值只是其中一种,你可以从下图看出渲染时色彩的默认通道分布,其中并没有照明的相关数据。

classroom-allcol-montage-annotated

色彩信息固然重要,我们可以用来区分不同的物体,但大部分时候,物体的色彩都很相近,所以用色彩来区分物体的方式可能行不通。例如木头,上面的纹理如果用色彩来辅助采样,区分度简直太弱了。

色彩通道和法线通道不一样,它不能为功能化合成提供任何帮助,但是如果我们把它加入结点合成试试呢?

classroom_comparison

看,效果很不错!但是等等,如果再仔细看看,会发现一些较微弱的光照细节,例如紧贴墙壁的物体阴影,都被过滤掉了,导致看上去像漂浮在墙上一样。同样的,光线产生了一些光斑,不是这些的话,这真是一个不错的解决方案。

classroom_comparison-2

等等,注意到墙上的钟没有,整个钟面都成了褐色,而且周围还有些光斑噪点。

classroom-debugging

从上面的图中可以看到,色彩通道将整个钟面的指针和刻度都模糊掉了,这是因为法线和色彩通道只会记录光线第一次碰撞到物体时的数据,而由于玻璃是透明的,所以光线根本就没有穿透进去,导致通道中缺失了以上细节。钟板本身看上去还行,只是色彩上缺少一些对比度。透明这个小细节,我们可以取巧解决掉,要不然花的精力就夸张了。

在 Cycles 里抠出部分物体的色彩方式很多,提供一个简单的思路,就是将钟板物体的 ID 数字填高点,用 Object 的 Index 结点在合成去剔除掉,最后合并到降噪后的结果中。顺手把地面也加进去试试,效果貌似不怎么样。

classroom-final-nodes

其他噪源

渲染结果中出现的噪点,不一定全部是因为采样和光影等作用下产生的,还有可能是因为一些合成因素造成,例如景深计算等。

tube-montage

这是因为光线在追踪和景深聚焦计算过程中,点在场景中的光线散射是发散的,而不是仅仅指向镜头。所以如果你希望得到成像结果,光圈会让光线均匀的散射到画面的所有位置上,如同针孔成像一样。

lenscraft-nolens-png0001

现实镜头中的镜片则用于改变光线的路径,让发散的光线可以最后重新汇聚到一个点上。但是呢,如果要让这种点到点的汇聚计算完美实现,需要让光线和焦距处于一个完美的相对距离之上。如果成像的位置较远或者过近,那么光线的汇聚点将会定位到画面的外部,而画面上将会产生多条光线形成的光斑,俗称噪点。

lenscraft-object_to_plate-png0001

我们可以翻转一下再看,如果画面上的一个特定点,可以收集画面中的全部光线,而在该点的另一侧,拍摄物体的光线也可以完全聚焦在这个点上。换句话说,这个点可以产生一个锥形的投影区间,将场景中的所有光线都汇聚在一起。

lenscraft-lens-focal

如果这样思考可以的话,那么解决方法就可以采用欺骗眼球的方式,辅助以虚拟景深数据来计算,效果还算行。

bmw27-noisered-comparison

但对应另外一种情况,那就是运动模糊,这种暂时的欺骗方式就不行了。还有一种光线效果,就是焦散,它打破了周围相同法线物体表面产生相同光照效果的规则,不过只要适当模糊一下,效果还是挺不错的。但反射效果除外。

caustics-montage-annotated

焦散中的反射清晰明亮,但有时在非平滑的物体背后,它看上去又不一样,在焦点位置呈现出模糊的效果。Olivier Vandecasteele的焦散测试演示如下,你可以看到,直接的光泽通道需要被过滤掉,间接的漫反射出现了相当糟糕的噪点效果,其他通道的效果在这两者之间。唯一的解决方案,就是采用多层叠加,或者部分区域添加遮罩的方式实现。

glass-caustics-licence-cc-by-sa-272b-noisered-blend
好吧,具体的方式可以参考这里。

cornell_exact-denoise-nodes

你当然不用手动再做一遍了,点击下载打开源文件,将它加在双向过滤的结点之前。

所以说到最后,获得最佳过滤算法设置的思路无外乎以下几点:尽可能地提升色彩的西格玛值,直到你看不到任何色彩沉着,然后再降低色彩的西格玛值,直到你看不到任何噪点。迭代参数几乎无用,至少让我来看,设置为1就万能了。不过呢,Blender 貌似不许你去做这些足够细节化的设置,所以你不得不考虑使用结点组的方式来调节。

首先添加一个降噪滤波器,边缘清晰的部分在结点计算之后,不过可能会出现一些闪光点。所以我们在考虑后期输入的同时,不一定要将画面中的所有内容都纳入到结点处理中,把这些影响画面效果的部分直接去掉就行了,或者分开做单独处理。

同样在使用一些现成的结点组时,不要全部都用,可以试试将这些结点组拆分开,按需选用,而不是去调节一些其实并不需要的参数。这里推荐 Mike Pan 的宝马车场景和 Olivier Vandecasteele 焦散测试场景,我将这些降噪方式都应用在了源文件上,你可以打开自己试一试。

不过对于目前越来越便宜的渲染农场,我不清楚这些技术会不会为一些静帧效果提供帮助,但是至少可以帮一些动画制作节约渲染时间。

原文地址


Viewing all articles
Browse latest Browse all 25