虚拟引擎4 基于Flash三维引擎的虚拟布光系统的设计与开发

  摘 要: 虚拟布光是指使用者借助于摄影布光模拟软件可以像在真实的摄影棚内一样完成各种灯光强度和方向的调整,所取得的效果等价于真实影棚内所取得的效果。介绍了虚拟布光系统的设计思想、开发工具和具体实现方法。研究了视图的创建、三维拍摄主体的创建、三点布光的光源创建、光源有形化、光源的选择、光源强度调节和光源位置调节等实用技术。应用Flash AS3三维引擎开发虚拟布光系统可为开展网上虚拟实验教学提供借鉴。
  关键词: Flash三维引擎; 虚拟布光; 虚拟实验; 三点布光
  中图分类号:TP311.1 文献标志码:B 文章编号:1006-8228(2012)12-29-02
  Design and development of virtual lighting arrangement system
  based on Flash three-dimensional engine
  Shi Qile
  (Faculty of science & technolology, Zhejiang International Studies University, Hangzhou, Zhejiang 310012, China)
  Abstract: Virtual lighting arrangement (VLA) means that the user can adopt simulation software of photographic lighting arrangement to adjust the direction and strength of lights in computer with equal effects in real photo studio. The aim and ideas of VLA system design, and its developing tools are described. The implementation methods are presented, together with how to create the viewport, 3D shooting objects and three-point lighting, how to form and choose light source, how to adjust lighting strength and position. It will be a good reference for virtual experiment instructions in online courses.
  Key words: flash three-dimensional engine; virtual lighting arrangement; virtual experiments; three-point lighting
  0 引言
  摄影布光是商业摄影课程的重要内容。虚拟布光是指使用者借助于摄影布光模拟软件可以像在真实的摄影棚内中一样完成调节各种光源的强度、方向,所取得的效果等价于真实影棚内所取得的效果。虚拟布光系统优势:一是可有效缓解学校经费、场地、器材等方面的困难;二是在网络课程中开展虚拟实验教学能够突破传统实验对“时、空”的限制。
  使用Adobe Flash Professional CS5及其3D引擎开发虚拟布光系统有以下优势:①生成的swf文件较小并可发布在网上,可整合在网络课程中开展虚拟实验教学,并且无需安装插件;②Adobe Flash Professional CS5中ActionScript 3.0已经成为比较成熟的计算机语言,为虚拟布光软件实现交互提供支持;③Away3D是flash或flex上的一个功能强大的3D引擎,是专为Flash表现三维对象而开发ActionScript 3.0的类,Away3D提供的四个基本构件view视口、scene场景、camera摄像机和3D物体适合于构建三维虚拟布光场景。
  1 虚拟布光系统的设计
  三点布光(如图1所示的三点布光光路图)是摄影、摄像时,运用主体光、辅助光、轮廓光三种基本光进行照明布置,能将三维物体的立体感、质感和纵深感的基本造型呈现在二维照片、屏幕上。三点布光,是摄影布光中的核心原理。理解了三点布光原理,在布光中就有了方向,对光的定位就有了设计依据。本系统是以开展虚拟实验教学为目的的软件,主要实现三点布光。在虚拟布光系统的场景中创建三个光源(可分别作为主体光、辅助光、轮廓光),学生可通过鼠标或键盘分别改变这三个光源的位置与亮度。并实时观察布光后的模拟效果,最终达到掌握三点布光方法。
  虚拟布光系统设计了顶视图和前视图两个视图来表示三维虚拟布光场景,虚拟布光系统界面如图2所示。在顶视图中可调节三个光源的位置与亮度,在前视图中可以观察调节光源后的模拟布光效果,调整的位置与亮度数据可以显示出来。
  2 虚拟布光系统的实现
  2.1 视图的创建
  为了从两个视角观察一个场景要创建顶视图和前视图。通过Away3D的RectangleClipping类创建两个视图并确定两个视图摄像机的位置来设定左边为顶视图,右边为前视图。
  2.2 三维拍摄主体的创建
  在Flash的Away3D引擎中,使用提供的类可以创建一些简单规则的三模型(例如立方体,球体等),但是对于复杂任意的三维拍摄主体创建比较困难,所以要引用外部的三维模型。AS3GeomClassExporter是3DMAX插件,可以将3DMAX中的三维模型转换成AS代码(ActionScript 3.0创建该模型的类)。由于一般在3DMAX中三维拍摄主体模型点和面比较多,数据量也就较大,这样应用在主程序中会使程序运行速度变慢,所以在导出之前在3DMAX中要对三维模型进行优化和塌陷操作。得到AS3创建三维拍摄主体的类后,在主程序中创建所要的拍摄主体并给该主体添加材质。由于flash中默认导入的3D模型是线框材质的,灯光对其不起作用,所以我们需要在3D模型上添加PhongColorMaterial材质。具体代码如下:   Var colorMaterial:PhongColorMaterial=
  new PhongColorMaterial(0x666666);
  var the3DModel:MyObject=new MyObject();
  the3DModel.material=colorMaterial;
  myScene.addChild(the3DModel);
  以上代码的作用分别是:定义材质、创建拍摄主体三维模型(MyObject即为使用插件导出的创建拍摄主体的类)、将材质添加到拍摄主体三维模型上、将拍摄主体三维模型添加到场景中。
  2.3 三点布光的光源创建
  在Flash Away3D引擎中有AmbientLight3D,DirectionalLight3D和PointLight3D三种灯光的类分别表示点光源、定向光、环境光。根据摄影布光的实际需求选择DirectionalLight3D类,在本虚拟布光软件中创建三个光源(可分别作为主体光、辅助光、轮廓光),创建其中一光源的代码如下:
  private var light:DirectionalLight3D;
  light=new DirectionalLight3D();
  light.direction=new Vector3D(170,0,180);
  myScene.addLight(light);
  以上代码作用分别是:定义一个定向光源、给定向光源一个方向、将灯光添加到场景中。
  2.4 光源有形化和光源的选择
  Away3D中的光源在三维空间的位置是由参数表示的,没有具体的实物来表示是无形的,在虚拟布光场景中无法看到光源,只能通过光源照在三维模型上反射出来的光才能感知光源的存在,为了选择和调整光源,创建小立方体来表示光源,小立方体的位置变量和光源的位置变量设置成一样,小立方体所在的位置就是光源的位置,从而通过小立方体来选择和调整光源。按以上思路创建三个小立方体(外观颜色为绿、蓝、黄)分别表示三个光源。
  对三个光源的调节前提条件是选择,选择哪个光源就是对哪个光源的位置和亮度进行调节,并且被选择光源表示选中状态(比如用红色表示选中),激活光源1(外观颜色为绿的光源)的代码如下(激活其他光源的代码同理):
  flag=1;
  color=new ColorMaterial(0xff0000);
  color01=new ColorMaterial(0x00ff00);
  color02=new ColorMaterial(0x0000ff);
  color03=new ColorMaterial(0xffff00);
  lightbox01.material=color;
  lightbox02.material=color02;
  lightbox03.material=color03;
  其中,flag=1表示光源1被选中, 用红色表示,同时恢复违背选中的光源2、光源3原有的外观颜色。
  2.5 调节光源强度
  光源强度的增加或减小是以鼠标单击按钮方式完成的,所以要注册对应的光源强度的增加或减小的鼠标事件侦听函数与创建鼠标事件侦听函数。调节光源强度通过改变Away3D引擎中的定向光源DirectionalLight3D类的属性brightness来实现。由于有三个光源,所以要判断选中的是哪个光源,再针对这一光源改变其rightness的属性。调节光照强度的侦听函数代码如下(以增加光照强度为例):
  private function increaseLightbrn(e:MouseEvent):void
  { if(flag==1)
  if(light01.brightness>=10)
  light01.brightness=10;
  else
  light01.brightness+=.5;
  else if(flag==2)
  if(light02.brightness>=10)
  light02.brightness=10;
  else
  light02.brightness+=0.5;
  else if(flag==3)
  if(light03.brightness>=10)
  light03.brightness=10;
  else
  light03.brightness+=0.5;
  }
  2.6 调节光源的位置
  调节光源的位置包括相对于拍摄主体光源的左右前后移动和上下移动,可以通过键盘对选中的光源控制光源的左右前后移动。需要注册对应的键盘事件侦听函数与创建键盘事件侦听函数。光源高度的上下移动以鼠标单击按钮方式完成的,所以要注册对应的鼠标事件侦听函数与创建鼠标事件侦听函数。以上对调节光源的位置都是通过改变Away3D引擎中的定向光源DirectionalLight3D类的属性direction来实现的。键盘控制光源移动主要代码如下(以前后移动为例):
  switch (event.keyCode) {
  case Keyboard.UP:
  if(flag==1) {
  lightbox01.z+=19;
  light.direction=newVector3D(-lightbox01.x,-lightHeight,
  -lightbox01.z)}
  else if(flag==1) {
  lightbox02.z+=19
  light02.direction=new Vector3D(-lightbox02.x,
  -lightHeight02,- lightbox02.z)}
  break;
  3 结束语
  在摄影布光模拟系统中可以像在真实的摄影棚内中一样完成调整各种灯光强度、方向,所取得的效果类似于真实影棚内所取得的效果。为了增加该系统的实用性,今后还需将摄影布光模拟系统与真实的布光效果做对比研究,并实现可任意增加光源、添加多个不同拍摄对象的功能。应用Flash AS3三维引擎Away3D开发虚拟布光系统,文件较小、无需插件,可方便地发布在网上,可为在网络课程中开展网上虚拟实验教学提供借鉴。目前已经有很多比较成熟的Flash AS3引擎,开发者可根据开发项目的需求进行选择,这样可以大幅度地提高应用Flash开发项目的效率。
  参考文献:
  [1] Rob Bateman,Richard Olsson. The Essential Guide to 3D in Flash [M].
  New York:Apress company,2010.
  [2] Matthew Casperson. Away3D 3.6 Essentials[M]. Birmingham:
  Packt Publishing Ltd,2011.
  [3] 陈琦昌,刘彩霞.商业摄影[M].中国纺织出版社,2009.
  [4] 苏民安,苏溯.商业摄影[M].安徽美术出版社,2009.
  [5] 孙颖.Flash ActionScript 3 殿堂之路[M].电子工业出版社,2007.

推荐访问:虚拟 引擎 开发 设计