Mental Ray 与 VRay 之争

作者 xdxu 发布于 . 分类 Rendering, Research

    如果单就 GI 算法而言,Vray 提供的 GI 解决方案比 Mental Ray 要灵活和先进,目前而言,在直接照明阶段的一次反弹 GI 部分,Mental Ray 有 final gathering, Vray则有 irradiance map,这两种都是同一类型极其接近的算法,虽然在某些细节上处理方式不一样,提供给用户的可调手段各有差别,但在这里我们不做具体比较。

    但在次级 GI 引擎方面,Mental Ray一直沿用传统的 photon map 算法,Vray 则有自主开发的 light cache,并且也有 photon map,还有 brute force。

    photon map 是正向光线追踪的,从效率而言不及 light cache,实用性方面也不及 light cache,photon map 对光源的要求比较多,天光,自发光体都是不发射 photons 的,但这不是最要命的,photon map 算法的正向光线追踪特性使得一个场景的 GI 效果够不够好,更多取决于用户来评估其需要多少 photons,易用性不如 light cache,而且,也因为是正向光线追踪,所以阴暗角落和细小几何边缘是这个算法很难处理到位的,light cache 在这方面比 photon map 要好很多,这就是为什么 Vray 更适合室内、建筑动画的最主要原因。

    当然,并不是 Mental Ray 的开发团队都是傻子,photon map 这么传统的算法被 MR 沿用至今,有它的道理,这就要先理解 Mental Ray 的 shader 体系,和我们 Vray 中所谓的 material 之间的差别。

    Vray 大概用来用去都是围着 Vray material 这一个材质在转的,尽管开发团队不断推出新的 material,但问题是,用户还是只能被牵着走。而且材质之间存在众多兼容性问题,并且 ,如果你试图改变这些规则,那几乎是不可能的。也就是说 Vray 的材质体系不具备开放性。

    我们再来看看 Mental Ray,Mental Ray 的材质体系一开始就被设计成开放式的,它提出一个新的 shader 概念,并在设计之初就提供一套最基本的 shader 库,就像一个 C++ 的基本类库或函数库一样,完成最最单纯且必须的功能,在 Mental Ray 的世界里,shader 不能单纯地被理解为“着色器”,它就像 C++ 里的一个函数,接收参数,完成功能,返回结果,比如,Mental Ray 里有只用来计算反射结果的 mib_reflect shader,这个 shader 在 maya 和 max 里都能找到,XSI 就更不必说了,mib 的前缀说明这是一个 Mental Ray 的基础 shader,我们可以看到这个 shader 在Mental Ray 里是这样定义的:

color "mib_reflect"
(
color "input",
color "reflect",
boolean "notrace"
)

    这是一段 Mental Ray 对该 shader 的定义,其实相当于一个函数形式声明,函数定义了三个参数:input reflect 和 notrace。也就是说,这个 shader 可以接收来自外界传递给它的三个参数,然后返回结果,它的具体工作方式是,使用光线追踪来计算反射,并将反射和 input 颜色混合在一起并做为最终结果返回。我们不用了解它的内部是如何实现的,我们只知道一个事实是,它用来返回一个颜色在计算完反射后的最终结果是什么。

    不难看出 mib_reflect 不是一个材质,它既不能是一个木质材质也不能是一个透明材质 ,它只是一个完成特定功能的个体,计算反射,并返回结果,你可以把某个反射结果返回给一个计算 bump 的灰度,反正一切都任由你选择和控制,在 Mental Ray 里有着各种各样像这样的基础 shader,比如还有 mib_refraction,用来完成折射的,等等,它们就像一个个功能块,这样做的好处是,这些零件可以被你任意组合。

    想像一下,你将一个像素的反射计算结果传递给一个折射 shader 的 input 然后与之混合,等等这些,你可能做任意运用,这就是这种灵活性的强大,你甚至可以决定光线如何被计算,什么情况下计算什么情况下不计算,你甚至可以把 AO 用在任何一个模块的计算上,这一切都是 Vray 不可能完成的。

    所以,正是因为 shader 和 shader 之间需要这样一种数据传递机制,所以 Mental Ray 一直采用 photon map 算法,而没有使用 light cache,因为 photon map 能很好的动作于这种机制,反向光线追踪显然不太好适应。

    所以通常,电影工业更多选择 Mental Ray,因为电影要的是效果,不像建筑动画或效果图要的是效率。

    另外一点是,Mental Ray 的图像反走样计算非常的快,这一点是 Vray 目前还无法比的,性能指标还差得太远。

    再谈到兼容性问题,为什么三大三维软件 Maya,XSI,Max 都不约而同的选择了 Mental Ray?这不是偶然,也不是商业动作,而是因为 Mental Ray 的设计体系,它的开放性确保了兼容性做得是最好的,它的 shader 只需要接收来自软件平台同类型的数据就可以了,而 Vray 的 material 一开始就是封装得很复杂的东西,所以 Mental Ray 可以和这三个软件,或者说任何三维软件结合得非常好。

    谈到这里,我想选择很明显,各自的优势也很明显,从事建筑和效果图制作的人员,如果你们觉得能适应 Mental Ray 的灵活,那么我想一样是高效率的,Vray 的 DMC 内核和light cache,以及针对于建筑动画的各种简便功能集,都是值得称到的,但如果做特效,我会不加思索地选择 Mental Ray。

    现在Mental Ray 也考虑到建筑动画的众多用户群了,开发了 Mia shader 集,功能、易用性都非常强,我觉得大家没必要挂死在一棵树上了,总而言之,搞影视特效什么的,Mental Ray 是有必要学的。 建筑动画可以按需选择一下。

注:现版的 Mental Ray 开发了 importon 及 irradiance particle,它们提供了类似 light cache 基于摄像机视图来分布和选择性存储 photon 的方式;unified sampling 提供了类似 QMC 的采样方法。

Smilie Vote is loading.

Tags: , ,

Trackback from your site.

Leave a comment