关于Renderman,MentalRay,Lightscape,Brazil,FinalRender的算法讨论
--- k : 关于Renderman,MentalRay,Lightscape,Brazil,FinalRender的算法讨论
众所周知,Renderman,MentalRay,Brazil,FinalRender,Lightscape都是一流的渲染器,孰优孰劣,大家都在网上讨论了很多了。这次我想从它们的算法入手进行分析,看它们在算法上的优劣,希望能让大家对它们有更深入的了解,从而改进对渲染器的使用。
首先,每一个渲染器都基于一套基本的求解算法,这些算法的名称大家都已耳熟能详了。基本渲染算法有三种:Scanliner(扫描线)、Raytrace(光线跟踪)、Radiosity(辐射度)。Scanliner与Raytrace都为大多数软件所采用,而Radiosity就只有BMRT与Lightscape采用。
Scanliner最早被开发,应用亦最广泛。其中Renderman的REYES(Render Everything You’d Ever Seen)算法是Scanliner的最极致的发挥,但也表示Scanliner已经走到了尽头了。Raytrace的应用越来越广泛,它最初用来求解非漫反射面之间的光能传递,即反射与折射的模拟。后来分布式光线跟踪与双向光线跟踪得到长足发展,特别是先进的有限元采样算法得到发展后,光线跟踪也被应用于漫反射面的光能传递求解。MentalRay的Global Illumination、Brazil、FinalRender就是很好的例子。其中,分布式光线跟踪的算法决定了软件输出的质量。MentalRay假定每个元面都有一张PhotonMap(在双向光线跟踪算法的创始人Arvo(ARVO1986)的论文中叫Illumination Map),在PhotonMap上投射光线采样,然后把PhotonMap像Texture一样贴在元面上。所以MentalRay必须设定光线的大小(Radius)以方便在PhotonMap上采样。这样保证了速度,但要在有丰富经验的人调较下才能渲染出高质量的图片。Brazil直接用半球体采样,用立体方位角投射到元面表面,类似于Radiosity算法的立方体采样,但Brazil通过控制辐射残差来加快速度,也牺牲了质量,所以在采样不足的情况下,Brazil渲染的质量是最差的。
FinalRender用有限元采样,同时保证了速度和质量。有限元是一种结合Radiosity的采样方法。Radiosity是在80年代末发展起来的渲染算法,它采用热力学的辐射积分式:B(x)=E(x) + p(x)$B(x’)[cos(x)cos(x’)/pi*r^2]*HID(dS(x),dS(x’))dA(x’),其中x’为源元面,x为目标元面,B(x)是x的辐射度分量,E(x)是x的源能量,p(x)是x的漫反射系数,$是对元面x积分,HID是遮挡函数(x与x’之间有遮挡为0,没有则为1),dA(x)是x的面积。可以看到,Radiosity是通过对整个场景的表面都求解辐射度来达到模拟光能传递效果。
Lightscape的求解过程就是Radiosity的Shooting过程,它采用空间四叉树算法来加速求解,所以速度比较快。Radiosity渲染基于物理学理论,其渲染效果真实,是Raytrace所不能比拟的,但从视觉效果上考虑,现在Raytrace和Radiosity不相上下,在速度上,Raytrace更占绝对优势。而且,Refract(折射)、caustic(焦散效果)是Radiosity无法模拟的(所以Lightscape也带了Raytrace渲染器)。