浅析3D Max中的高级灯光技术
关键词:
摘要:3D Max在3D制作软件中渲染功能一直比较薄弱,使其只甘居Maya等3D制作软件之下。为弥补这一缺陷,在5.0版中3D Max增加了高级灯光技术,拥有光能传递、光线追踪器两个全局照明系统,在渲染功能上有了非常显著的改善。本文主要介绍新的光能传递算法。
关键词:渲染 全局照明 光能传递
3D MAX 的渲染功能一直比较薄弱,其效果远不如其他软件(例如Maya)那样逼真,这在很大程度上是因为3D MAX默认的灯光技术不够先进。
在3D MAX中经常使用“光线追踪(Ray-Trace)”材质,与之相联系的就是光线追踪渲染算法。这种算法假设发出很多条光线,光线遇到物体时,被遮挡、反射或者折射,通过跟踪这些光线,就可以得到场景的渲染效果。但是这种方法有一个严重的缺点,就是不能反映现实生活中光的很多特性。例如,在现实生活中,灯光照射到物体后,每个物体都会发射一部分光线,形成环境光,从而导致没有被灯光直射的物体也能被照明,而不是完全出于黑暗状态。又如,把一个红色物体靠近白色的墙壁,那么墙壁靠近物体的地方会显出也带有红色。还有很多诸如此类的灯光效果,使用光线追踪算法都不能产生。
为了解决这些问题,人们发明了更先进的算法来计算灯光的效果,这就是“光能传递(Radiosity)”算法。这种算法把光作为光量子看待(实际上更符合现代物理学),通过计算光量子的能量分布获得渲染结果。这种方法能够获得最逼真的照明效果,因此,通常将光能传递算法和光线追踪算法结合起来,以获得最佳的效果。3D MAX5.0新增的高级光照功能则包含了两个不同的系统:光能传递(radiosity)和光线追踪器(light tracer)。它所得到的结果非常接近对真实事物的再现。
光线追踪器比较通用,也容易使用,使用它不需要理解许多技术概念,任何模型和灯的类型都适用。光能传递相对较复杂,需要为这种处理方式专门准备模型和场景。灯必须是光度控制灯,材质也必须仔细设计。但光能传递在物理上是精确的,对于建筑模型的精确设计是必须的,这一点非常重要,尤其当建模的目的是进行光照分析时。另外,光线追踪器的结果与视点无关,而光能传递不是这样的。光线追踪器在每一帧都计算光照。光能传递只会计算一次,除非场景中的物体移动了或灯发生了变化,或者是从另一个不同的视点渲染场景时。基本原则是光线追踪器更适用于有大量光照的室外场景、角色动画和在空旷的场景中渲染物体。光能传递更适合于使用了聚光灯的室内场景和建筑渲染。
使用光线追踪器进行室内光照仿真时,为避免平坦表面上的噪波,可能需要相当高质量的设定和很长的渲染时间。光能传递则可以用更短的时间提供更好的效果。另一方面,光能传递用于有许多多边形的角色模型时,需要额外的细化步骤、过滤,甚至是Regathering(重新聚合)。而光线追踪器适用默认的设置一次渲染就可以得到更好的效果。
|
| ||
|
传统的渲染引擎值考虑直接光照 不考虑反射光,然而,反射光是 一个场景的重要组成部分。 |
对相同的场景使用全局光照渲染, 上图使用了光能传递(radiosity) 就可以得到一种真实的结果。 |
1.单位
要获得精确的结果,场景中作图单位是一个基础。如果单位是“英寸”,一个100×200×96单位的房间可以被一个相当于60瓦灯泡的光度控制灯正确照明,但如果单位是“米”,相同场景会变得非常暗。
2.光能传递的解决方案
光能传递是一个独立于渲染的处理过程,一旦解决方案被计算出来,结果被保存在几何体自己内部。对几何体或光照作改变将使原解决方案无效。解决方案是为整个场景全局计算的,这意味着它与视点无关。一旦计算出来,就可以从任何方向观察场景。当摄像机在一个固定场景中移动时,这将会节省时间。如果对几何体或灯作了动画,每一帧都必须计算光能传递。渲染菜单中的选项允许定义如何处理光能传递过程。
3.工作流程
基于物理光能传递的工作流程:
当你使用光能传递去模拟现实光照场景时,务必注意以几点:(1)场景尺寸: 确认你的场景拥有正确的尺寸和一致的单位 (一盏灯光在一个120米高的房间里和在一个120厘米高的房间里是大不一样的)。(2)灯光: 你必须使用 Photometric lights,并确保这些灯的亮度在正确的范围内。(3)自然光: 要模拟自然光, 确定你使用的是 IES sun 和 IES Sky,它们能根据特定的地点、日期、时间,给出正确的光照信息。(4)材质反射度: 你必须保证场景中材质的 reflectance value 与现实中相一致。例如:一面漆有白色油漆的墙,它的反射度大概是80%。可是,一个纯白的材质 (RGB:255, 255, 255) 所拥有的反射度是100%。这时你就必须去手动的调节反射度。(5)曝光控制: 曝光控制相当于照相机的光圈。 你可以使用它去控制最后的渲染结果,优化渲染图像。
使用光度控制灯光基于物理的光能传递工作流程:
(1)检查并调节场景中物体的尺寸符合其物理大小,调整材质的反射度符合其物理属性。(2)放置 photometric lights 到你的场景中,你能按照真实世界放置灯光的方法去放置你的虚拟灯光。(3)选择 Rendering 菜单 Environment 对话框,选择你想使用的曝光类型。(4)渲染场景预览灯光效果。在这一步光能传递并不进行处理,但你能快速地确定直接光的位置和强度,调节好直接光的位置强度等。(5)选择 Rendering 菜单 Advanced Lighting 对话框,在高级灯光选项中选择光能传递。(确定 Active 前的小方块打上了勾)(6)在Radiosity Parameters 卷展栏中,点击Start计算光能传递。当计算完成时,你就能在视图里看见效果了。灯光效果直接显示在几何体上,你能很方便的在视图中观察调整而不必重新计算。(7)再次点击渲染场景。渲染器计算直接光和阴影,完成渲染工作。
你可以不使用基于物理属性的灯光去创建你的场景,但你必须注意以下几点:(1)灯光:因为光能传递计算是基于物理属性,在计算中 Standard lights 被解释为 Photometric lights。例如:一盏 multiplier=1.0 的聚光灯将被转换为1500烛光亮度的灯光。而标准灯光的光线衰减,不论你如何设置,都将按照光能传递的内部算法进行,而不理会你的设置。(2)自然光照: 如果你不想使用基于物理的灯光类型去模拟自然光,你可以使用Direct Light 去模拟太阳光,使用skylight 去模拟天光。(3)曝光控制:因为标准灯光不是基于精确物理学的灯光, 所以你需要只能对光能传递的结果进行调整而不影响直接光照。使用 Logarithmic Exposure Control,打开仅影响间接光照功能,这用你就可以使用曝光控制的亮度对比度功能去控制光能传递的结果了。
标准灯光的光能传递工作流程:
(1)确定你场景中的几何体的尺寸符合真实的大小。(2)在你的场景中放置 standard lights 。(3)如前,渲染场景预览灯光。(4)选择 Rendering 菜单 Advanced Lighting 对话框,在高级灯光选项中选择光能传递。(5)在 Radiosity Parameters 卷展栏中,点击Start计算光能传递。(6)选择 Rendering 菜单 Environment 对话框,选择你想使用的曝光类型。当在光能传递中使用标准灯光时, 一定要使用 Logarithmic Exposure Control 并选择 Affect Indirect Only,这使曝光控制只影响光能传递的效果。这样,你就能在不影响直接光的情况下,使用亮度与对比度控制调整间接光效果,使光能传递效果控制在正确的范围。(7)再次点击渲染场景。渲染器计算直接光和阴影,完成渲染工作。
缺省情况下, 光能传递计算当前帧。 如果你的场景中有动画的物体或你需要光能传递计算动画的每一帧, 选择渲染场景对话框中的 Compute Radiosity 选项。在动画计算的过程中,当有物体移动变化或灯光发生变化时,每一帧都需要重新进行光线追踪计算。如果在两帧之间没有任何变化的话,渲染引擎将不进行光能传递计算。因为渲染引擎采用了随机统计学采样,动画的各帧之间可能产生闪烁。在光能传递计算一个较长的动画之前, 你应该先手动计算一帧,已确定最终的效果是正确的。如果你的动画仅仅是摄影机移动 (例如一个建筑环游效果图) 你不必每一帧都进行光能传递计算,你只需计算一帧就可以了。
大家都知道,LIGHTSCAPE中的灯光运算速度很慢,往往渲染一张图片需要很长时间(因此这个软件定位于照片级静态图渲染制作)。在动画制作中,一秒钟的动画就需要渲染20多张图片(NTSC式的为30帧/秒,PAL式的为25帧/秒,电影为24帧/秒,如果要保持流畅的动感则至少需要15帧/秒),一分钟就要渲染1000多张图片,那么你的等待将是无穷无尽的。好在MAX有很多第三方开发的外挂插件,在灯光方面比较优秀的插件有RADIOSITY、MENTALRAY等可供用户选择。不过运算速度上有点差强人意。当然,如果你就渲染一张静态图片而不是做动画(如建筑效果图等),为了取得更好的效果与更方便的照明设置,等待一个小时也是可以的。MAX中的灯光最大优势在于运算速度,照明质量其实是不错的。只要设置得当,同样可以产生真实、令人信服的照明效果。
关于渲染器,我们可寄托太多希望了,Brazil速度的进步,Finalrender渲染品质的提升,Mentalray的不断升级,总之,有的是希望。

