基于纹理的场景复杂光照实时绘制

2020-11-10 07:52
智能计算机与应用 2020年5期
关键词:纹理光照绘制

李 纲

(川北医学院 计算机与数学教研室, 四川 南充637007)

0 引 言

在虚拟机场的图形应用中,为了加强虚拟机场场景画面真实性,做到与真实机场场景类似的光照效果。 不仅要能够模拟白天的机场场面,还要能够随着时间的推移,从白天的场景过渡到夜间场景。而早晨和黄昏以及夜晚场景中存在复杂多样的局部灯光光照场景,诸如地面建筑、电灯或广告牌等在晚上发出的局部灯光,高杆灯的照明对周围局部地面和建筑的照明效果,候机楼大厅发射出的灯光等。整个场景夜间有着较为复杂的多灯光局部照明情况,对其的真实模拟比较困难。 虚拟仿真应用对场景渲染的实时性也有较高要求。

计算机图形学中的全局光照算法通过基于物理的渲染方程对场景中逐像素地进行光照计算[1-4],能够对场景做到模拟真实的光照,由于需要进行多次反复计算光子的运动和反射,虽然能够获得较好的全局光照效果,但在场景范围大的情况下,光照计算需要消耗大量的时间。 由于虚拟机场场景里面有大量不同类型的光源,要做到对这些光源的光照按物理光照原理进行模拟,需要的时间难以满足虚拟现实应用对绘制画面的实时性要求[5-6]。 近年来,有研究人员在全局光照方法实时化方面做了一些工作,但仍然存在许多局限性。 通过体素锥追踪的方式进行了交互式的间接光照渲染,但其帧率只有5-30 帧/s[7]。 李用CPU 上通过Phong 光照模型预计算多光源的光照图,用GPU 计算间接光照并结合光照图合成最后的图像,在3 个光源的情况下,纹理大小为1024 × 1024,屏幕分辨率1440 × 900 时,最高帧率只有26 帧/s[8]。 在全局光照实时化方面也有很多研究,但难以做到虚拟仿真应用要求的帧率。虚拟仿真应用场景中机场场景的渲染时间在整个渲染时间片中要求不能占据过多的时间,除场景外还有其它的特效等,也要占用一定的计算时间片,因此对场景的渲染要求更高的渲染帧率,而现有的全局光照加速方法还无法满足这样的虚拟仿真要求。 另外,虚拟机场场景中的建筑物在夜间也有比较复杂的局部灯光,多光源全局光照绘制算法的绘制效率较低,也使得目前的全局光照方法无法用于虚拟机场仿真的应用环境中。

本文提出将Blinn-Phone 光照模型与真实的Rayleigh 散射环境光照数据修改后的环境光照数据相结合,形成较为真实的白天环境光照场景。 夜间的局部灯光光照则采用纹理记录局部的灯光光照信息。为模拟早晨和黄昏场景光照的渐变,将夜间的局部光照纹理数据与白天的环境光照信息根据不同时刻点进行融合,形成模拟真实的早晨和黄昏光照场景。

1 光照场景的模拟

1.1 Blinn-Phone 光照模型及环境光的模拟

Phone 光照模型是计算图形学中的经典光照模型。 其计算公式如式(1)和式(2)所示。

其中ka为环境光反射系数,Ipa为环境光光强,kdIpd(L·N) 为漫反射分量,ksIps(V·R)n为镜面反射分量,n 为物体表面光滑度因子,表面越光滑则值越大。L 为光线入射方向,V 为视点方向。

Blinn-Phone 光照模型如式(3)和式(4)所示,该光照模型是对经典的Phone 光照模型的改进,其主要优点是计算过程比Phone 光照模型要简单,计算速度较Phone 光照模型更快。 由于虚拟现实应用对实时性的要求较高,因此在虚拟机场的应用环境下,场景光照的绘制过程所采用的光照模型选择上,没有采用经典的Phone 光照模型,而是采用绘制速度更快的Blinn-Phone 光照模型作为场景绘制的光照模型。

其中,ka为环境光反射系数,Ipa为环境光光强,kdIpd(L·N) 为漫反射分量,ksIps(N·H)n为镜面反射分量。N 为物理表面法向量, L 为光线入射方向,V 为视点方向,H 为入射方向L 和视点方向V 的中间向量。

由于白天室外的光照主要来自于太阳光,属于单一光源,因此式(3)可以简化为式(5)

其中,太阳光照作为环境光Ipa的主要来源,在一天24 小时内的光照颜色是不同的。 其对天空的照射可以通过Rayleigh 散射进行近似描述[9-14],如图1 所示。

图1 天空Rayleigh 散射颜色的纹理图像Fig. 1 The Texture of Rayleigh scatter color of the sky

由图1 可知,太阳光的光照颜色随着时间的推移由全黑渐变为明亮的天蓝色,再渐变为全黑。 在清晨和黄昏时,由于大气散射,出现微红的光照特征。 因此,根据天空的Rayleigh 散射可以获得太阳光光照在24 小时不同时段的光照颜色,以此颜色作为地面场景建筑物或路面绘制时所使用的环境光颜色。 但由于太阳光投射到地面时,通常是白色而并不是天空一样的蓝色,因此对天空照射的Rayleigh 散射图须加以修改,以适应地面场景的光照。

根据图1 的Rayleigh 散射数据,由艺术人员制作生成太阳光环境光照纹理如图2 所示,此纹理保留了Rayleigh 散射图的基本光照情况,但又有所区别。 中午12 点的光照颜色是白色而不是天空的蓝色。 通过纹理图2 能够模拟太阳光对地面场景24小时不同时段的光照情况。

图2 太阳光对地面场景的环境光模拟图Fig. 2 The ambient light recording texture of the sun

黎明时环境光的颜色比较偏红色,中午时颜色偏白色,而傍晚时又比较偏黄色。 为了实现这种效果,使用了一张保存了二十四小时光照颜色的纹理,如图2 所示。 该纹理记录了二十四小时不同时刻环境光的颜色,从中可以明显看到不同时刻环境光颜色的差别。 如果现实应用中需要模拟晴天、阴天或雨雪天等不同天气条件下的环境光照,可以通过使用类似图2 的多张纹理图,并根据不同天气条件替换对应的光照纹理图,可模拟各种不同气象条件下的地面环境光照。

1.2 场景局部灯光光照的模拟

通过Blinn-Phone 光照模型结合光照纹理采样,可以很好的模拟出一天24 小时全局光照颜色的变化。 但场景中的各种物体(如建筑物、飞行器和地面),除了白天的全局光照颜色外,在夜晚的夜间场景会有更加复杂的局部灯光光照。 只通过一张由白天到夜晚的颜色记录纹理无法完全实现对复杂地面场景的日夜渐变以及夜晚灯光的局部光照模拟。

夜间场景内的灯光情况较为复杂。 建筑物内部发出的灯光,地面和灯杆上的照明灯光以及地面对灯光的反射,还有运动物体(如车辆和飞机)内部也有灯光射出。 为了实时绘制从白天的环境光照到夜晚的局部灯光光照变化,在同一套模型中使用了双重纹理的方法,来记录场景的白天和夜晚的颜色或光照情况。 双重纹理的示例图如图3 所示,该图是机场中某建筑物夜间(左图)和白天(右图)的纹理。白天的纹理只包括建筑物本身的颜色,而夜间纹理则真实地记录了建筑物夜晚的环境光照以及建筑物内部的局部灯光光照。 整个虚拟机场内的几何体(包括静止的建筑物和运动的车辆、飞机等)均采用类似图3 的两层纹理,第一层纹理为场景几何体白天纹理,第二层纹理为场景几何体夜晚纹理,其中夜晚纹理记录了场景中各种局部灯光的照射效果,包括建筑物内部灯光、路灯、车辆和飞行器内部灯光等。

图3 场景中某建筑物夜晚(左)和白天(右)的纹理Fig. 3 Night texture(left) and daylight texture(right) of a building

场景中物体在某时刻点t 的颜色不仅与其白天所呈现的几何体材质颜色(即图3 右图)有关,也与图2 中的时间和环境光照颜色有关。 随着时间的变化,场景由白天变为夜晚或由夜晚变为白天,通过Blinn-Phone 光照模型结合环境光照纹理图片产生环境光照的交替变化。 而建筑或运动物体的光照需要考虑环境光全黑的夜间纹理(图3 左图)与白天纹理(图3 右图)的转换,而转换的自变量则是时间t。 因此某时刻点t 的物体颜色是一个与时间相关的分段函数,则场景物体某一时刻点t 的物体颜色由分段函数式(6) 决定。 根据图2 的环境光纹理的不同时刻点的颜色值,不考虑天空光线散射造成的光照,假定日出的时刻点(由黑转亮) 为t2,日落的时刻点(由亮转黑) 为t7,太阳升高到足够高的位置而只有白色环境光的时刻点为t4,太阳刚落下到刚出现黄色环境光的时刻点为t6,则可以通过公式(6)计算出不同时间段内,场景物体在某个时刻点t 的颜色值。 日出前或太阳落下后,只使用图3 左图的夜间纹理,即只考虑夜间的局部灯光光照,此时的太阳环境光纹理图2 所对应的是全黑的纹理。 当太阳升到较高位置时,此时地面建筑或电灯等发出的局部灯光基本可视为已完全关闭,即使有未关闭的灯光也较难在白天分辨出来。 这个时间段忽略掉局部灯光光照,而只使用图3 右图的白天纹理数据。 当处于黎明或黄昏时,由于既有太阳的光照又有局部的灯光光照,则不能单独使用白天或夜间的光照数据。 在对光照建模时,不考虑云层等对太阳光突然的遮挡造成的光照突变,默认为太阳光照变化是连续的。 因此,黎明或黄昏时的光照模拟采用对白天的颜色纹理和夜间光照纹理线性插值的方式,完成对黎明或黄昏渐变光照的绘制,具体的分时段光照绘制公式(6)为

其中, nightTex 是场景物体记录夜晚的纹理颜色,dayDiff 是场景物体通过Blinn-Phong 光照模型计算的白天物体的光照颜色。

2 光照模拟的结果

光照场景的绘制采用的计算机操作系统为Windows7 操作系统,CPU 为Xeon E3-1230,图形处理硬件为NVidia GeForce 1080ti。 机场模型的面片数量为74 378 个,绘制帧率可达100 帧/s 左右,达到了绘制实时性的要求。

同一视点下的同一建筑物在不同时间段的灯光绘制效果如图4~8 所示。 其中图4 为凌晨5:00 的建筑物光照及局部灯光绘制效果,此时计算几何体颜色使用的纹理为夜间局部灯光光照纹理nightTex,与此类似,图8 展示了晚上22:30 时的场景绘制效果,所使用的纹理仍为nightTex;而图5 和图7 分别为早晨6:20 和傍晚19:30 的建筑物光照绘制效果,此时的光照绘制是nightTex 与dayDiff 通过公式(6)计算后得到的图像融合后的光照绘制效果,这两个时间点的光照绘制既有白天的纹理、环境光又有夜间的局部灯光的效果,较好地模拟了天刚亮或天刚黑时,既有天光又有局部灯光照射的融合光照场景。 图6 为中午12:00 的绘制效果,此时由于太阳光强较强的原因,建筑物内的灯已经关闭或基本不可见,因此只使用dayDiff 的颜色,即只采用Blinn-Phone 光照模型而不考虑建筑物局部灯光。

图4 凌晨5:00 场景中某建筑物的光照效果Fig. 4 Light illumination scene at 5:00 am

图5 早晨6:30 场景中某建筑物的光照效果Fig. 5 Light illumination scene at 6:30 am

图6 上午11:00 场景中某建筑物的光照效果Fig. 6 Light illumination scene at 11:00 am

图7 傍晚19:30 场景中某建筑物的光照效果Fig. 7 Light illumination scene at 7:30 pm

图8 晚上22:30 场景中某建筑物的光照效果Fig. 8 Light illumination scene at 10:30 pm

3 结束语

本文通过Blinn-Phone 光照模型,结合修改的Rayleigh 散射环境光纹理数据及单模型双重纹理的方式,成功地实现了对虚拟机场场景的实时渐变的真实感光照,满足了虚拟现实应用对光照的真实感和实时性的要求。 由于虚拟机场的场景除地面场景外,还有太阳、月亮、星星和云层等,如何对这些常见的自然景观进行模拟,物理真实的实时绘制,进而考虑各种物体间的相互使用,比如太阳的光照,夜晚的星光和月亮如何模拟将是下一步的研究方向之一。

猜你喜欢
纹理光照绘制
肉种鸡的光照不应性对养殖生产的不良影响分析
Painting ski maps 绘制滑雪地图
绘制童话
隐蔽的力量
绘制世界地图
肺纹理增多是病吗?
童梦
TEXTURE ON TEXTURE质地上的纹理
消除凹凸纹理有妙招!
水禽舍的光照及其控制