全局光照下古建筑场景的仿真渲染研究
2018-12-17汪浩文
汪浩文,张 捷
(南京航空航天大学 艺术学院, 南京 211106)
渲染是一种基于虚拟场景的图像处理行为,在最高抽象层次上,渲染行为可表示为场景描述与图像间的转换。动画、集合建模、纹理机制等相关算法通过某种处理过程传递结果,进而在图像中呈现[1]。古建筑的渲染难点主要体现在建筑构件丰富、纹理多样以及对室内外光照要求高,在渲染中会出现光线跟踪或色溢等,画面极易出现噪点及黑斑现象[2-3],难以达到预期效果。此外,古建渲染时间较长,对计算机硬件消耗高,不利于整体细节的呈现。因此,找寻高效、高真实度的仿真渲染方法是古建数字化呈现与数字化保护领域中值得探讨的新课题。
1 全局光照原理的分析
全局光照渲染原理是基于环境中所有表面和光源相互作用的照射效果,整个渲染过程描述了能量从光源发射,经过不同材质表面的多次反射、折射、焦散等,最后进入人眼。在这个过程中,光线强度、材质的物理属性是一种互相依托的关系[4],因此要达到高真实度的渲染效果,必须从全局光照的渲染原理及特点出发进行分析。
1.1 光线追踪
光线追踪是一种将光线投射算法进行扩展的递归算法,由于光线经过多次反弹后可以抵达某一表面,需要跟踪源自对象表面处的相关光线来捕捉视觉信息。经过光线跟踪后的图像处理效果非常清晰,明暗对比强烈、物体的阴影边缘明显,并具备反射没有模糊、失真等优势,适用于模拟晴天正午太阳光下或强光下的场景,对于自然光或柔光下的场景并不适用,因为它无法呈现较模糊的阴影效果。
1.2 光子的发射和传播
任何光源都存在能量分布,光子的发射分布与光源的能量分布息息相关,当光子都具有相同能量时,光子图也能够达到最理想的渲染效果。此外,当场景中多个光源共同发射光子时,渲染引擎会根据光源的强弱对光子进行自适应分布,即强光源光子数量多,弱光源光子数量少,需尽可能保证每个光子携带的能量相近。被发射的光子会在场景中传播,跟踪光子与跟踪一条光线的方法大致相同。假设光源为单色光,对于一个具有漫反射系数a和镜面反射系数b(b+a≤1)的表面,需要决定经过此表面的光子是被漫反射、镜面反射,还是被吸收。这里使用一个随机变量M∈[0,1]:
这样,光子的总能量不变,只是根据物体的随机数和表面的反射特性来决定光子的反弹去向。最后,光源的能量将被平均分配给光子,以确保渲染计算的正确性。
1.3 光子图的应用
光子图是一种用于记录光子信息的贴图文件。在场景中,当光子与非镜面物体相交,需要把光子信息保存到光子图中。光子图包含直接光子、间接光子及焦散光子3种信息。直接光子是光源发射光子与非镜面物体第一次进行相交的记录,间接光子是光子与非镜面物体第1次相交后,经过2次反弹与其他物体进行相交的记录,而焦散光子是光子与镜面物体第1次相交后,又与其他物体相交的记录。光子图被创建以后,渲染引擎可以通过光子图上的信息,利用统计学中的密度估算法判定空间中任何一点的光照信息,也可以渲染比光子图像素尺寸更大的图纸。这里值得注意的是:光子的能量越大,光子的密度也就越大,估算的参考信息越充分,也会使渲染计算更加精准。
1.4 采样细分
采样细分是针对场景中模型、材质以及灯光进行着色处理的过程。它能够通过自适应细分、极限噪波、最小采样对渲染质量进行全面提升,也可以从模型的网格、图像光滑度以及图元信息3方面对场景进行综合优化[5-7]。
自适应细分是将模型网格进行细分的过程[8],网格细分程度越高,模型的渲染质量越理想,渲染计算时间也越长。因此,理想的处理方法是结合模型的形态与网格布线的样式,在模型的重点结构区域增加细分,而对于模型的非重点区域可以适当减少细分,在保证渲染精度的同时也能使硬件低资源消耗。极限噪波是针对光子传播时出现的噪点进行优化的过程,极限噪波数值越小,图像处理得越光滑,在具体的应用中可以均衡处理,将场景的受光部分减小数值,而逆光部分可以适度加大数值。最小采样是针对场景中的图元信息进行获取的过程,采样值越大,采样范围内的图元信息越广,渲染时间越长,光线的真实度也越理想。
2 古建筑渲染流程的思考
古建渲染过程是一项系统性流程。其中,渲染的质量将与模型、灯光、材质相互关联,也需要根据渲染测试反复地推敲渲染引擎中的相关参数设置。一般情况下,由于古建场景面片较多,渲染时间较长,需要合理地设计一套较为高效的渲染优化流程[9-10]。
2.1 渲染中的逻辑关系
高质量渲染并非是仅依靠参数设置去完成的,而是应从模型、材质以及灯光的三者之间的逻辑展开分析,从而寻找最佳的解决方案。由于古建结构层级较多,可以按照实际层级,如瓦面层、梁架层、斗拱层、柱础层及装饰层,对模型构件进行成组与分类,便于后期材质及UV(UVW map)的整体调整[11-12]。此外,当模型面片数量过多,需要在布光前对模型进行面片优化,可以有效减少光子在面片间来回反弹的时间,避免渲染出现重影、曝光、破面等错误。
对于材质而言,它与模型、灯光是相互影响的。模型精度不够,可以通过材质中的遮罩、凹凸、置换等方式进行改善。材质的纹理、反射、折射等物理属性与灯光计算相互影响。纹理明度过亮、饱和度过高、反射及折射过强均会导致灯光在计算时色溢过重。因此,理想的方法是完成纹理贴图后,先对灯光进行渲染测试,再根据渲染效果逆向调整材质属性。
灯光主要包括直接照明与间接照明两部分。灯光不仅对模型、材质进行仿真,还能改善场景氛围,尤其对历史久远的古建而言,它的光照强度、衰减、色温、光子分布都可以为模型的精度、色调以及材质细节增添感染力。
2.2 确立渲染流程
基于对渲染逻辑关系的分析,首先可以提出在渲染前应优化模型冗余面片,并按照层级名称成组,统一设置材质并调整UV。其中,对一些曲面造型或纹理坐标有特殊要求的模型,如雕塑、吻兽、镂空雕等部件可以单独使用UV拆分,之后再布置场景的主光源与辅助光源,然后以较低的引擎参数快速测试,根据场景的实际渲染效果调整相关灯光属性,直至灯光确定后,再调整纹理的反射、折射及焦散等相关参数并进行二次测试。若测试后的效果能够达到较理想的要求,可以提高渲染引擎的出图规格,渲染最终图纸,完成整套流程(见图1)。
图1 渲染流程
3 古建筑渲染方法的思考
古建筑的渲染方法主要基于模型的优化、灯光、材质以及渲染引擎的设置。通过渲染既要展示场景的造型细节,突出高仿真效果,也要控制好色溢关系,确保环境色调与古建筑整体氛围相融洽。一个高质量的渲染结果往往需要经历多次测试来实现。本文采用目前普及度较高的3dsMax插件Vray作为古建的渲染研究平台。
3.1 模型的优化方法
古建的面片数量较多,导致渲染效率低下。因此,在渲染前需要对模型进行优化,有以下3种方法:① 可以删除因遮挡无法看见的模型面片。例如,古建模型中的梁架层、斗拱层与柱础层存在很多榫卯咬合现象,类似的隐藏面片应全部删除(如图2);② 对于有特殊精度要求的模型,如家具或雕塑等模型可以采用段数控制法优化模型,即通过面片塌陷、合并去减少不明显影响模型精度的面片(如图3);③ 由于渲染引擎对面片中的凹多边形的计算时间明显高于凸多边形,可以适当地将非主体结构中的凹多边形分割成若干个较小的凸多边形(图4),进而提高渲染效率。
图2 需删除的面片
图3 段数的优化
图4 多边形分割
3.2 灯光的渲染方法
灯光是渲染中的重要环节,它主要包括自然光照明与人工光照明两部分。灯光的角度、强度、色温以及光照衰减的实现,需要通过多次测试才能够找到最佳的解决方案。
3.2.1 自然光照明的实现
自然光照明可分为阳光照明与天光照明。在布光过程中,可以先确定阳光的入射角度并测试建筑构件的阴影倾斜效果,再利用实时渲染对阳光、天光的其他属性进行确认。此外,由于不同时段的光线强度、色温及浑浊度各不相同,可以根据实际情况灵活调整。例如,模拟大规模古建群气势磅礴的特征,可以采用正午明亮的光效设置,将阳光入射角调节为60°~90°,以提高光照强度,降低浑浊度和光照衰减,调整天光为浅蓝色。在渲染引擎中开启光线跟踪,使古建阴影边缘更加锐利,对比关系强烈、色调冷峻(如图5)。再例如,想要突出古建的古朴质感,可以通过模拟傍晚黄昏的光效,将阳光入射角更改为小于45°,以降低光线强度,提高浑浊度和光照衰减,设置天光为橘黄色,关闭渲染引擎中的光线跟踪,使建筑阴影变得细长,边缘过渡模糊,使建筑轮廓在黄昏环境中若隐若现,整体对比关系柔和(如图6)。经测试,相关时段的照明参数取值见表1。
表1 不同时段的自然光照明的设置
3.2.2 人工照明的实现
人工照明主要包括局部照明与辅助光源,应用于古建室内空间为多,局部照明的布光方式应按照光源的实际位置进行布置。例如,古建中的射灯、吊灯、灯带等可以通过点光源、面光源、光度学灯光进行模拟。在布光时应注重冷暖搭配,确保空间的色调均衡(如图7)。对于强度较高的光源,应及时关闭高光反射,避免局部反射条件强的物体过于曝光。此外,光度学灯光不仅需要通过光度学Web对光照轮廓进行模拟,还需要通过区域阴影中的UVW对物体的阴影进行控制,确保强光的阴影明显,弱光的阴影柔和。而辅助光源的布置,一般通过面光源进行模拟,光源的长宽尺寸应以空间的体积与明暗程度作为参考标准。辅助光源的光照强度一般不超过自然光源的1/3,以确保场景主次分明,避免出现过多的重影现象。
图5 正午时段渲染
图6 傍晚时段渲染
图7 古建室内渲染
3.3 材质的渲染方法
材质在古建渲染中不仅需要注重纹理的实际效果,还需要注重材质物理属性的设置,如反射、折射、折射率、焦散等。由于古建场景中的材质大多为木质或石材,画面的对比应微弱、细腻。这也意味着在光照信息确定后需要对材质进行整体的纹理调整及属性确认。
3.3.1 反射的实现
反射在材质的设置中应用颇多,反射可以分为漫反射和镜面反射。漫反射反射程度较低,表面映射具有模糊性,使光子的二次反弹方向分散;而镜面反射程度高,映射明显且具有光滑性,使光子的二次反弹方向集中。此外,镜面反射可以根据需要启动菲涅尔反射计算,当这个选项启动后,反射将具有更接近真实世界的反射效果。这意味着当光线和表面法线之间的夹角接近0度时,反射将衰减,当光线几乎平行于表面时,反射可见度最大。当光线垂直于表面时几乎无反射。
在古建场景中,除了玻璃和水的材质同时具备反射、折射外,绝大多数材质只具备反射特征,因此可以针对3类材质作出具体分析。一是反射强的物体,如瓷器、石材等可以根据实际需要开启或不开启菲涅尔反射,但必须将反射RGB值明度提高,设置高光值略小于默认值1(默认值为最佳光滑度),使反射具备较强的可见性;二是对于漫反射物体,如木质的梁架层、斗拱层等,适当将反射RGB值明度降低,关闭高光,开启模糊反射略小于默认值1(默认值为模糊反射不可见),使物体反射表面具备颗粒感,进而能够呈现模糊的反射效果(如图8);三是对于反射极弱的物体,如瓦片、假山等,可以直接关闭反射,提高渲染效率。经测试,相关材质的反射参数取值见表2。
表2 不同类别材质反射的设置
3.3.2 折射的实现
折射主要针对古建场景中的水、玻璃等透明或半透明材质进行模拟。它能够实现材质的折射强度、折射率以及通过光滑度控制折射的衰减程度。目前,绝大多数全局光照渲染器中的材质折射率都可以依照物理学中的常用折射率表直接设置参数,并参与渲染计算,折射率越强,材质发生折射的能力也越强。但并不意味着材质的透光能力与焦散能力越强。材质的透光及焦散能力是与折射强度及光滑度相互关联的。因此在具体的应用中,可以通过折射强度及光滑度的调节,让材质模拟各种晶莹剔透、暗淡无光的透明或半透明材质(如图9)。经测试,相关材质的折射参数取值可见表3。
表3 不同类别材质折射的设置
3.3.3 UV拆分的应用
对于古建场景中有特殊纹理坐标要求的模型,如果将它的构件纹理一一绘制,会极其影响纹理制作或后继渲染效率。因此,可以将这些模型附加成整体,利用拆分工具将模型表面以平面化形式完全展开(如图10),并对其纹理进行整体绘制。这里值得注意的是,UV拆分后所得到平面贴图的像素应依据模型构件的数量,数量越多,像素应越大,确保模型纹理能够精准呈现[13-14]。此外模型在拆分时,应从隐蔽的位置进行裁切,能够有效避免模型出现过于明显的接缝。
3.4 引擎的设置方法
通常情况下,全局光照引擎由光子的首次发射和二次反弹两组算法构成,应依据模型的特点选择算法。古建场景有大量光影细节,对于近似的光照信息可以精简或共用相同数据。因此可以采用发光贴图(Irradiance map)加灯光缓存(Lighe cache)的算法搭配,理由为以下两点。第一,发光贴图可以采样空间中任意一点和全部照射到这一点的光照信息,当光照接触物体表面时,系统会在发光贴图内查找与当前计算过的类似的点,并从已计算过的点中提取信息,将相似的点进行内差值替换。发光贴图能够对物体的边界、转折处重点计算,对于平坦区域进行低精度全局光照,在符合模型特点的同时也能够过滤掉灯光首次发射中过多的近似信息[15];第二,光子的二次反弹比首次发射的信息量更多,利用灯光缓存作为二次反弹的算法,能够只追踪虚拟相机中可见的光线微粒,对其进行角度及反射的衰减计算。这样可以有效排除相机外的光照信息,从而提高渲染效率。此外,在渲染最终图像前,可以将着色方式定为准门特卡洛采样,这样仅在像素呈现的阶段,提高图像的抗锯齿程度,在最终环节确保图像的真实细腻效果。
图8 材质模糊反射
图9 材质折射
图10 UV拆分
4 结束语
古建场景的渲染不仅是一个单纯的技术制作过程,同时也是一个科学与艺术相互融合的实现过程。在这个过程中,应该客观、深入地剖析好全局光照渲染引擎与模型、材质、灯光间的逻辑关系、互动关系以及诉求关系,根据每个古建场景的实际条件、实际特点,以科学的制作流程与灵活的应用方法为模型提供理想的渲染结果。