沈萦华,方瑜骅,吕朝辉,李春红
(中国传媒大学,北京 100024)
开发舞台灯光模拟系统对于舞台灯光设计工作有重要的意义,舞台模型是多种多样的,对于不同的舞台,需要相应的灯光设计。这样,在舞台灯光设计工作过程中便会有许许多多的不确定因素。在这篇文章中,通过舞台灯光效果的模拟,可以降低能源和时间的投入。
通过使用OGRE引擎的架构,能够更加方便的模拟逼真的三维舞台灯光环境,虚拟技术本身所具有的临场感和交互能力不仅可以将静态的设计和创作转化为动态形式的再现,而且还可以及时地捕捉和展现设计者的构思、创意和灵感,一个成熟而完善的虚拟设计系统平台无论是对于灯光设计师、演出导演、灯光控制操作者,还是对于灯光美术教学和做灯光效果演示等都是一个非常专业且实用的设计工具和得力助手。而实时方便的可交互性功能,则使得系统更加具有实时性和可操作性。本系统提供一个实时可交互的操作环境,满足了用户的需求。
无论是游戏还是虚拟现实,为了表现其逼真性,虚拟场景大多比较复杂,所以虚拟场景的创建大多由3D建模工具生成,然后对场景实时渲染输出。舞台灯光设计由3DMAX提供基本的场景文件,通过DOM(Document Object Model)接口进行解析,并进行资源的导入和场景的组织。最终进入OGRE系统进行渲染[1]。
光照模型是多种多样的,需要在场景中分别实现它们的效果。同时用户也要能够通过UI界面进行各种各样的操作。系统要求操作复杂度高,计算量大,可扩展性强。需要设计与建立一个数据处理与计算效率高、可扩展性强、功能模块松耦合强内聚的总体实现架构[2],如图1所示:
图1 系统架构图
系统分为资源层,接口层,渲染层。
资源层:由3DMAX+Ofusion插件导出,生成场景组织,材质,实体,贴图等系统所需的资源文件。
接口层:负责将这些资源文件导入场景中。
渲染层:实现舞台场景和灯光的渲染,系统资源的管理,用户交互的实时响应等。
系统所需的资源文件由3DMAX通过Ofusion插件导出。导出的场景组织文件是XML格式的,记录着舞台的一些基本的参数和每一个舞台实体的位置,朝向等各个方面的信息。
场景节点是以树状形式组织的[3],每个节点都有相应的父节点,因此我们可以通过对父节点的操作,方便的使多个子节点同时移动和旋转。
图2是OGRE中场景图和场景内容的关系描述图。
图2OGRE场景管理图
要把三维的渲染结果展现到二维的屏幕上,需要进行从三维坐标到平面坐标的转换。
首先,需要建立一个三维坐标系,我们创建一个三维的斜二轴侧坐标系,其中x轴方向为水平向左,z轴方向为竖直向上,y轴的方向为与水平方向成45°角。在该坐标系中显示图形时,x轴和 z轴方向的长度取图形实际长度,而y轴方向的长度则取实际长度的一半。
公式中,ηx、ηy、ηz是 x、y、z 轴的轴变形系数。进行轴测投影变换,可得下列方程式:
其中f和d是轴测变换矩阵系数,求解这个方程式,可得
为了使立体感更强,令d=f=-0.354,可以求出轴测投影变换矩阵:
接下来,需要将图形的三维坐标转化为屏幕上的设备坐标,在透视窗口中,坐标原点位于屏幕的左上角,向右的方向为x轴的正方向,向下的方向为y轴的正方向。假设在三维空间中的一点(x,y,z),在设备坐标中的坐标是(xx,yy),运用刚刚的轴测投影变换矩阵,可以得到如下转换公式:
公式中xX,yY,是三维坐标原点在设备坐标系中的相对坐标。
将公式(4)代入(5),可以得出变换方程:
粒子是用四边形来表示的。它有长宽、方向、颜色、寿命、数量、材质、重量和速率等属性。粒子的属性由粒子发射器(Particle Emitter)和粒子特效影响器(Particle Affector)共同决定。粒子发射器负责粒子的发射,给出粒子在发射时的一些属性,包括运动速率、颜色、生命期等;粒子特效影响器负责粒子从发射后到消亡前这一阶段粒子属性的改变,可以用来模拟重力、拉力、颜色衰变等特殊效果。当粒子发射器不停地喷发出大量粒子时,就可以形成烟、火和爆炸等效果。
OGRE提供了粒子系统脚本语言,可以在脚本中设置粒子的各种属性。一个简单的粒子脚本文件结构如下所示,
Particle
{
系统属性
发射器
{
发射器属性
}
影响器
{
影响器属性
}
}
文件里可以包含粒子系统属性、多个发射器和多个影响器。因此当需要时,可以自己实现粒子和粒子发生器,并在系统中使用它们。
本文中,通过粒子系统描述了舞台烟花,下雨和云雾的效果。结合OGRE的动画效果,可以实现更加逼真的场景粒子效果。
光照是舞台效果的关键因素,也是本设计系统核心的技术[4]。渲染引擎提供了几种常用的灯光,比如点光源、方向光源和聚光灯。但是对于真实的舞台灯光效果模拟,这些是不够的。对于一些特殊的舞台灯光效果,比如体积光等,需要通过可编程渲染管线技术(shader)来实现。shader有两种,一种是顶点级的,称为vertex shader(OpenGL称为vertex program),取代固定渲染管线中的变换和光照部分,程序员可以自己控制顶点变换、光照等。硬件中处理顶点shader的单元叫vertex shader processors(顶点处理单元)。一种是像素级的,称为pixel shader(OpenGL称为fragment program),取代固定渲染管线中的光栅化部分,程序员可以自己控制像素颜色和纹理采样等。硬件中处理像素shader的单元叫pixel shader processors(像素处理单元)。
为了使灯光的模拟更有真实感,还需要借助3D的光照方程来模拟计算。这里往往是一种近似的算法,但是它能达到一个很好的模拟效果和很快的运行速度。常见的光照模型有两种:全局光照模型和直接光照模型。本系统采用全局光照模型。
全局光照模型是一个能很好的模拟真实感的光照模型。它可以同时考虑到光线照射到物体表面上产生的反射、折射、透射、阴影和物体相互间作用的光照效果。利用全局光照模型,需要模拟实际光线的传播过程和能量交换的辐射度[5]。
对于光线跟踪,需要考虑光源的直接照射结果以及反射光对该点的照明效果,把两者综合起来:
接下来计算辐射度,需要计算每个面片上的光照情况:
这里Ld是光源照射的光,T是光照传播因子,TLi是其他面片反射来的光照,L便是最终要求的光照值[6]。
图4为舞台烟花效果图。图5为体积光效果图。系统可以实现舞台的切换,舞台中各种场景效果,也可以与舞台场景和各种灯光进行实时交互。
图4 舞台烟火
图5 体积光效果
舞台灯光设计已经成为照明设计师的一个主要问题。他们经常要面对这样高成本,高能耗和高耗时的问题。随着信息产业的蓬勃发展,专业舞台灯光领域也跨入了全面的数字化时代。系统利用OGRE渲染引擎建立虚拟舞台,并且对舞台灯光设计及调整进行实时呈现,同时为舞台灯光设计师提供了丰富的系统交互功能,能够很好的解决这一难题。
接下来,系统还需要进一步丰富舞台的灯光模型,能够模拟各种各样的灯光,比如:柔光灯,闪光灯,追光灯等。用户的操作界面也需要进一步优化,提高用户操作的友好性。
[1] S Yan,D Xu,B Zhang,H Zhang.Graph embedding:A general framework for dimensionality reduction[A].CVPR05[C].San Diego:IEEE CS Press,2005.830 - 837.
[2] Wendy Jones.Beginning DirectX9[M].MA,Boston:Prem ier Press,2004.
[3] Z L Zheng,J Yang.Supervised Locality Pursuit Embedding for Pattern Classification[J].Image and Vision Computing,2006,24:819 - 826.
[4] Randima Fernando.GPU精粹——实时图形编程的技术、技巧和技艺[M].北京:人民邮电出版社,2006.100 -106.
[5] 朱腾辉,刘学慧,吴恩华.基于象素的光照计算技术[J].计算机辅助设计与图形学学报,2002,14(9):861 -865.
[6] Tomas Akenine -Moller,Eric Haines.实时计算机图形学[M].北京:北京大学出版社,2004:20-21.