周 佶,尤 翔
ZHOU Ji,YOU Xiang
(南京工业大学 土木工程学院 工程图学中心,南京 210009)
本文解决了城市数字化模型搭建中,超大规模数字模型的渲染与软硬件设备和工作效率之间的矛盾。重点在于在现有软硬件设备的情况下,找出更加合理的技术解决方案,实现快速三维渲染成像。
现在渲染引擎很多,各有特点,有些渲染效果好,但速度慢,有些速度快但则渲染效果较差。其中渲染参数的设定是很重要的,本文的“UF参数组群”法可以较好地解决这个问题。
渲染是生成虚拟场景图像的重要技术环节。针对此环节,各种软件都提出了自己的解决方案。但是大多数的软件中的渲染算法未能解决海量数据模型中对渲染的多种要求。针对本文的要求,我们重点对各种渲染算法进行了研究,并从大量的实验数据中总结出一套行之有效的参数组群。
1)每一个渲染器都基于一套基本的求解算法,这些算法的名称大家都已耳熟能详了。基本渲染算法有三种:Scanliner(扫描线)、Raytrace(光线跟踪)、Radiosity(辐射度)。Scanliner与Raytrace都为大多数软件所采用,而Radiosity就只有BMRT与Lightscape采用。Scanliner最早被开发,应用亦最广泛。其中Renderman的REYES(Render Everything You'd Ever Seen)算法是Scanliner的最极致的发挥,但也表示Scanliner已经走到了尽头了。
Raytrace的应用越来越广泛,它最初用来求解非漫反射面之间的光能传递,即反射与折射的模拟。后来分布式光线跟踪与双向光线跟踪得到长足发展,特别是先进的有限元采样算法得到发展后,光线跟踪也被应用于漫反射面的光能传递求解。MentalRay的Global Illumination、Vray、Brazil、FinalRender就是很好的例子。其中,分布式光线跟踪的算法决定了软件输出的质量。MentalRay假定每个元面都有一张PhotonMap(在双向光线跟踪算法的创始人Arvo(ARVO1986)的论文中叫Illumination Map),在PhotonMap上投射光线采样,然后把PhotonMap像Texture一样贴在元面上。所以MentalRay必须设定光线的大小(Radius)以方便在PhotonMap上采样。这样保证了速度,但要在有丰富经验的人调较下才能渲染出高质量的图片。Brazil直接用半球体采样,用立体方位角投射到元面表面,类似于Radiosity算法的立方体采样,但Brazil通过控制辐射残差来加快速度,也牺牲了质量,所以在采样不足的情况下,Brazil渲染的质量是最差的。Vray用有限元采样,同时保证了速度和质量。有限元是一种结合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渲染器)。
2)每个渲染器都有贴图的优化算法,这也是渲染的关键。因为高级的渲染往往极依赖贴图,所以贴图的质量是十分重要的!Renderman的优化算法堪称第一!它用了先进的改良式B-spline(B样条)算法,克服了许多贴图变形的问题,尤其是在同等元面由于镜头焦距不一引起的走样。
3)光能传递。Lightscape中的完成百分比实际是它估算的环境内辐射平衡残差,但也可以看作是封闭环境中剩余的未平衡能量。
Raytrace极其成功地解决了两种传递:非漫反射面~非漫反射面和漫反射面~非漫反射面。
Radiosity把元面上的光能看作整体,采用全局求解的方法,先把整个场景的光能分布求出,再在屏幕上显现。它不在受一条条的光线所限制,而把能量一分分地送出去。
PhotonMap用在Caustic上是一种十分精确的方法,但在全局光照里就属于基于视觉上的算法,并不精确真实。
根据对上述渲染算法的研究,我们发现,速度与质量始终是一对矛盾。解决这一矛盾的最好办法就是针对不同的模型对象采用不同的渲染计算方式,并且将这些计算方式的参数组群化。
在本文的渲染中我们重点选择了Scanliner(扫描线)、Retrace(光线跟踪)两种渲染计算法;PhotonMap和ShadowMap两种渲染贴图计算方式;选择Radiosity、Raytrace 以及Raytrace 中PhotonMap光照图和BSP模式作为渲染光能传递方式。
不同场景下根据成像要求的不同,应该选择不同的渲染计算方式,具体选择方法,如表1所示。
根据以上选择的渲染计算方法,我们主要采用了Scanliner和Vray的分布式等两种渲染引擎,并针对输出图像的细致要求程度进行了参数组群化。不同的对象选用不同的渲染引擎参数。Scanliner渲染引擎参数组群如表2所示。
表1 不同场景对象渲染技术选择
表2 Scanliner渲染引擎参数组群
图1 Scanliner渲染引擎粗参数渲染
使用上述参数组群的各种渲染效果:Scanliner渲染引擎粗参数渲染的效果如图1所示 ,Vray的分布式等两种渲染引擎粗参数渲染的效果如图2所示。
图2 Vray的分布式等两种渲染引擎粗参数渲染
本文所举应用实例,因为需要反映大面积区域的整体规划,因而无论从规模上还是数据量上都属于大场景城市虚拟模型。总结本文的研究结果,我们认为,对于要求逼真效果的虚拟场景渲染,本文的研究成果可以使普通渲染人员在渲染参数组群的指导下顺利完成,且能够保证品质的统一性。