返回到->

最新动态

深入理解渲染器无偏和有偏渲染

作者:炫云 (发表日期:2018-11-15 14:08:23)

在大多数人眼里可能会觉得“无偏”的效果会更好,“有偏”的效果相对会差一些。这样的想法可能看起来没啥毛病,同时也可能让你陷入某些误区。

从渲染器算法的角度来说,“无偏”的计算结果会更精确更稳一些,“有偏”计算结果可能会出现偏差,那么在我们实际使用的时候,到底是怎么样的呢,为什么不管是”无偏“还是有“有偏”,都出不了想要的效果呢? 为了更好理解无偏和有偏,那么我们来更深入的探讨一下。

什么是无偏?

无偏的基本意思是在渲染计算过程中不采用加速的算法或技巧。每一道光线都是一视同仁的,在任何重要性方面上(场景的重要区域或非重要区域)没有无偏,所以,这就需要大量的光线计算才能得到干净的效果。

理论上,无偏是一种算法,在同一个 3D 场景中,需要通过多次运行该算法,并将结果平均化,得到最终干净和正确的渲染结果。很多人认为渐进式渲染本身是无偏的,其实也不一定是真的。当然,你的光线追踪速度越快,那么有偏的越厉害。因为,任何渲染器都或多或少加入了一些有偏的设置选项,来优化加速渲染。

常见误区?

无偏渲染器是物理精确的。然而实际上,无偏和有偏都是不精确的。BRDF(如 Blinn 或 GGX)材质算法本身就是基于真实世界的解决方案,只是如何更快的实现真实的物理效果的区别。全局 GI 缓存是有偏的,暴力 GI 也可能是有偏的。路径追踪是无偏的,但在引入一些优化加速设置之后,也会有偏。许多渲染器会把有偏设置编码到渲染中,并不向用户公开,你也不知道。

导致有偏渲染的那些坑

你是如何把无偏渲染成有偏的呢,可能有的时候你自己也不知道吧?

有些渲染器会给你大坨设置,比如:Vray;有些渲染器会给你隐藏掉很多设置,比如:Corona;当然我们不是来比较渲染器,还是来了解下,那些设置会导致从无偏到有偏的影响吧。

限制光线反弹数量 —— 无偏渲染不会限制光线的反弹数量,直到它完全离开常见或被吸收掉;

使用缓存 —— 这可以为复杂的光线追踪进行插值,例如:有数百个反射的全局照明,焦散的有偏解决方案,加速渲染,允许更多的光线反射等;

自适应采样 —— 让场景中重要的区域有更多的采样;

抑制或消除焦散射线 —— 因为焦散太慢;

修剪某些光线的强度或阈值等,以减少萤火虫 —— 像有光泽的反射光线这些东西,它会随机捕获过亮的光源,通过修剪次级光线来减少这种萤火虫。这些技术都会导致渲染偏差,但可以减少计算或加速渲染,也是不错的。

无偏还是有偏?

使用这些技巧,并不一定能帮助你渲染出高质量的效果。很多人对”无偏”或”有偏”这个词的意思,本身理解就很尴尬。这两个术语从技术角度上分析,也就是和”物理精确”有关。无偏计算具有很高的精度,但并不代表你就能渲染出高质量的效果。有偏计算虽然有些不精确,但也能达到高质量的效果。无偏渲染为了计算出更高的精度,当然会牺牲速度为代价,所以也会引入有偏设置,来加速渲染。

所以,如果觉得“无偏好,有偏不好”,这种理解本身就是有问题的。另外纠结快慢,或者那个渲染器更好,在这些问题上,本身就毫无意义。

无偏或有偏,只是在实现最终效果时所运用的算法或方法不同,无偏更稳,有偏速度更快,各有所长,但渲染的结果,还是基于你对渲染的理解和掌握,并不是渲染器本身解决的问题,任何渲染器都能实现真实的效果,但是渲染器猜不透你的想法。简而言之,没有最强的渲染器,只有最厉害的人。



更多动态

关于3ds Max渲染设置GI里发光图和灯光缓存的模式对渲染效果的影响

Gamma的使用方法和说明

关于灯光问题导致云端渲染时间长的案例分析

V-Ray for 3ds Max中Raytrace材质导致渲染卡住或者崩溃解决方案

卡在灯光缓存阶段问题解决办法及案列分析