光能传递渲染器到底给了我们什么?
原文作者: mayax 发表时间: 2002-8-22
文章出处: 不详 浏览人数: 352人
光能传递渲染器到底给了我们什么?——对众多光能传递渲染器的反思
我写这篇文章是想让大家静下来想一下到底光能传递渲染器我们有没有必要用,并不是想要骂光能传递,其实,我是一个不折不扣的光能传递迷。
我记得我第一次看到光能传递这个词儿是在一本Lightscape的书上,当时我觉得很好奇,于是便细读了下去。
后来,我学编程,就深入地研究了光能传递,十分地深入,还自己用VC++写了一个Radiosity渲染器。可以说,我很了解光能传递。
那为什么我还要批光能传递的渲染器呢?我这不是自己拿石头砸自己的脚吗?
毛泽东说过:没有调查,就没有发言权!
我调查了一点,所以就有那么一点儿发言权,所以在这里我就要从各个方面说说究竟光能传递给了我们——做CG的人——什么!
一、说说什么是光能传递
曾经在视觉中国上有人问我什么是光能传递。我很好奇,在现在光能传递如此火热的时代竟然还有人连光能传递都不知道。但小日本的广岛研究所在80年代研究光能传递的时候中国又有多少做三维动画的人知道呢?
我虽然痞,而数学、物理又差,但在光能传递上我还是可以说上两句的。
我们之所以可以看见颜色,是因为可见光中包含了这无数种颜色的波长的光,如红色光的波长最长(可见光中)、紫色的最短。白色的则包含了大部分的光波,黑色的则只包含了很少量的光波。万事万物由原子或分子构成(指一般的事物),原子或分子在受光子激发后会吸收一定波长的光波,再把剩下的反射出去。我们的眼睛接受到了这些被反射出来的光、视觉神经就会识别出是什么颜色。那么,红色的物体则反射红色的光,蓝色的物体就反射蓝色的光,白色的物体反射几乎所有的光。
但要注意的是这些物体的表面是粗糙的,才只反射一定颜色,如果是光滑的,就会像镜子一样反射周围的影象。
为什么?因为粗糙的物体表面有很多不平的地方,光反射的方向就不一致了,受光的方向也不一致。而光滑的物体表面受光反射的方向都一致,所以可以完全把受光方向的光的信息反射到反射方向。
学渲染的人首先要接触材质。材质的种类很丰富——Blinn,Phong,PhongE,Lambert,Metal,Anistropic,Cook/Torrance等等。但如果完全按照上面所说的光的理论,那么就只需要一种材质——可以反射光的材质——就够了。所以FinalRender只有一种材质;而Lightscape虽然有多种材质,但它们都是同一种材质不同的参数罢了。以上的材质叫做经验模型。
接着说:当光被物体反射出来后,就会影响到周围的物体。这个步骤相信很多书或教材都有说到,我的另一篇文章也有详细描述,在这里我就不多说了。
光能传递分四种方式:非漫反射面——漫反射面、非漫反射面——非漫反射面、漫反射面——漫反射面、漫反射面——非漫反射面。
有人会说,这四种方式是不是重叠了?其实这四种传递方式一点也不含糊,每一种都有自己的特点和特性。
漫反射面——非漫反射面:这是一般的镜子的情况,从镜子里面看到反射方向的物体,就是物体对镜子的光能传递,光线跟踪可以很好的独立解决这一步。
非漫反射面——非漫反射面:这是从镜子里面看镜子的情况,但其中包含了镜子的形状因子对镜子传递的影响作用的复杂计算,一般的光线跟踪只能简单的模拟。
漫反射面——漫反射面:这是辐射的情况,Lightscape最擅长就是求解这中情况;Br,Mr所用的MC(蒙地卡罗积分)并不能很好的模拟,Fr的采样也在有的场景中有黑块的出现。
非漫反射面——漫反射面:这是Caustic的情况,可以通过PhotonMap求解,但也有精确度问题。
现在的软件,实际上都只能在相对独立的情况下分别解出这四种情况。现实中,这四种情况经常混合发生,会使光能传递变的异常复杂,这是现在没有可以完全求解的情况。 譬如,第四种情况的非漫反射面一定从某个方向承继了二次光源,所以计算时将先计算影响非漫反射面的光能分布状况,但影响非漫反射面的光能分布状况也受到非漫反射面的影响,就只能用逐步逼近的方法解算。这样将耗费大量的运算!
当场景中应用了贴图、BumpMaping、大气效果——大气中的微粒散射在理论上应计算入光能传递之内等效果后,计算复杂度将大得无法用普通的计算机计算!
二、商业光能传递渲染器的奥秘
既然计算量如此大,为什么还把这样不成熟的算法推出市场呢?用户可以忍受这样庞大的渲染时间吗?
渲染器的制造商很聪明,他们懂得人的眼睛对视觉分辨的能力十分参差,大部分的人都不会察觉画面很轻微的变化,所以他们选择牺牲画面质量!
我自己写出来的渲染器是严格按照逐步求精的算法解算的,没有“偷工减料”,当然计算的时间也十分长,但精度够高。在写的过程中我发现要牺牲画面质量十分容易,只要减少采样的数目就够了。正式的分布试光线跟踪要求16X16的采样才可以达到最小象素的损失,但一般的渲染器只提供2X2!如果你可以忍耐一两个月的计算时间(一帧),那么请试一下Mr或Br的16X16吧!我相信你一定可以做出别人无法比拟的画面效果来。
而且,象FinalRender这样的渲染器,投资了在光能传递的加速开发上,就必然减少了在BumpMap、Caustic上的开发力量,它的贴图能力就实在不感恭维了。
三、老外为什么不用
光能传递渲染器都出来了许久了,但用上的电影还不多见,除了FF,我就看不到其他的了。
这么好的东西,为什么聪明的老外不用?
老外不用当然聪明啦!
你想一下,光能传递会把大量的时间用在对镜头没有实际帮助的物体的计算上,那么导演会把主角用的服装、道具、化装用在演隔壁大 *** 临时演员身上吗,这划算不划算! FF用了光能传递是因为小日本人好大喜功,喜欢用根本不需要用的东西。看看Pixar多少年了还不在Renderman里加入Raytrace就知道了。
大多数的光能传递渲染器其实除了光能传递,在贴图、灯光控制、速度、材质、质感、颜色采样、景深、运动模糊等各方面都要弱(MentalRay除外),而这些才是三维创作真正所需要的关键。
四、我们的问题
为什么我们会有如此多的人对光能传递渲染器着迷?
这是历史问题。
最早一批的国内的三维用户恐怕是八十年代的吧。到95、96年左右,就是我第一次见到max的时候,国内才开始有一定规模的三维用户。要知道,这时候老外已经有很多年的动画经验,他们对于如何在扫描线的情况下模拟出真实的光能传递或十分真实的场景已经熟悉得如同小菜一碟了。他们就算,用3DS都可以做出十分逼真的画面。在哪里应该放多少盏灯,在哪里应该用什么贴图、如何用附加的色彩修饰贴图——等等——这是他们的家常便饭!
而我们呢?我们没有这样的经验,但如果我们处在与他们相同的起跑线上,我相信我们可以比他们做得更好!
但……现在处于初步发展中的我们比他们多了一样诱惑——不成熟的光能传递渲染器!这使大量的入门初学者崇尚“一盏灯理论”,就是无论什么场景,都只用一盏灯,或者谁的灯用得少,谁就是英雄!
还有态度问题。
大量的Br、FR作品涌现,还有VirtualLight的。这令很多人都喜欢用这样简便的工具。在画天的论坛上有一位朋友认为调几个参数就可以搞定了的渲染器是优秀的渲染器。
天啊,我们什么时候变得如此不专业?调几个参数、放一两盏灯就可以搞CG了,那我们这些日夜辛辛苦苦钻研的人在干什么?这是搞CG的态度吗?这可以使我们的CG健康发展下去吗?
如果我是老外,我要使中国的CG永远得不到发展,那么我就会首先向中国市场免费提供各种光能传递渲染器!
还有实用问题。
我们是如此的奢侈,用我们宝贵的机子来运算大量与画面无关的信息。老外有钱机器好尚且珍惜渲染的时间,而我们如果把那些浪费在等待光能传递结束的时间在做多一两个用心制作的作品上,我们的技术的进步会有多大多快呢?
五、反思
从Pixar这么多年的作品中我们可以看到别人是怎么样对待渲染的。
Pixar就是一个使用扫描线做出逼真画面的最好例子。
Pixar做CG的态度就是把他当成一件艺术品来对待。
就好象用PageMaker排版的是报纸是书,而用Word的只是办公室文稿。
我们呢?
或许我说的不对、不好听,但,我只是想让中国人的CG可以健康地发展下去。
|
|