虚拟水族馆三维建模和漫游研究
近年来,虚拟现实在生态信息可视化方面的应用正成为生态学者和计算机研究者共同感兴趣的课题。水族馆是一个展示海洋生态资源的场所, 一座水族馆通常造价昂贵而在中国每个城市中并不普及, 采用虚拟现实来实现水族馆生态信息的可视化具有重要的现实意义。本文在分析国内外水族馆景观要素的基础上,提出了建立网上三维虚拟水族馆的方法。使用VRML97和3DSMAX共同建立网上虚拟水族馆景观,利用VRML强大的交互功能,在微机上实现了虚拟水族馆的三维漫游和水族生物的动画。本文的方法可以应用到水族馆的景观规划和网上展示中。
1、引言
自然生态资源的合理开发和利用是社会可持续发展的重要组成部分,如何利用新技术开发生态资源是人们普遍关注的话题。近年来,虚拟现实技术在生态信息可视化方面正不断取得新的应用成果。以生态旅游信息资源的利用为例,生态旅游强调对自然景观的保护,是可持续发展的旅游。并且在生态旅游的全过程中,必须使旅游者受到生动具体的生态教育。把虚拟现实技术引入到生态旅游可以有效地克服旅游信息时间和空间的限制,从而达到更好的教育效果。
传统旅游的局限性主要表现为:
(1)从空间角度来讲。由于地域限制,很多地方没有条件或空间开发旅游资源。特别在人口稠密地区,土地资源少,政府不易去开发较多的大型森林公园或是动物园,不居住在公园附近的人们很少有机会能利用到这些旅游资源。另外,也有很多旅游地不是常人能涉足的,但是又能引起人们兴趣,如太空漫步、极地探险、海底寻宝等等。都市化生活使人们更加留恋大自然,但是由于时间、金钱、地理位置等的局限,有些人就不能经常亲临诸多旅游胜地进行实地游览,也需要通过其他渠道获得这一方面的旅游体验。
(2)从时间角度来看,有些已经灭绝的物种和那些濒临灭绝要特别保护的物种,同样有观赏和学习的价值,也能引起人们广泛的兴趣和好奇心(如:恐龙时代)。但是,我们却很难获取相关的知识。近年来,虚拟现实技术的发展为人类观察自然提供了新的技术手段,利用虚拟现实技术,可以构造各种虚拟旅游资源,在一定程度上弥补了现实生态旅游的不足,更能实现场景与人之间的互动,对旅游资源的开发具有重要意义,值得推广研究。作为一种尝试,本文提出了构造虚拟水族馆的方法。水族馆是一个展示水生生物的场所,集科普、教育、自然保护、观光与一体。水族馆具有很高的科技含量(如:水质处理、人工海水配置、水生生物的饲养、水族馆的建造材料、照明、布景等)。水族馆的发展始于18世纪后叶,1789年,法国建立了世界上第一个水族馆,其后,日本、英国、美国也相继建立。水族馆在国外大致经历了三个发展阶段,即火车窗式,洄游槽式和大型综合式。我国海域跨越热带、亚热带、温带三大气候带,海洋生物资源丰富,人们很早就意识到利用水族馆来提高人们对保护海洋资源的认识。1932年,我国建立了近代第一个水族馆--青岛水族馆,在当时属亚洲一流水平。近年来,随着经济的发展,我国很多城市开始兴建水族馆,投资规模也不断增加。
如果置身于水族馆中,就可以感受五光十色的海底世界,观赏飘动摇曳的各种海草以及各类悠闲游弋的鱼类,倾听海流的低吟,这些会带给人们美的享受。通常,水族馆的造价昂贵,远未普及,一般都是建在沿海城市或省城里,门票的价格也很贵。水族馆建设也存在一些局限性,如资金、气候、场地等的限制,在许多情况下,很多地方没有条件建立水族馆,如在我国北方严寒地区就不适合开发露天水族馆。另外,即使有些城市建立了水族馆,城市里的大多数人很少有机会享受水族馆的资源,如何让更多的人(特别是青少年)参观利用水族馆是人们感兴趣的一个话题。本文在借鉴国内外水族馆资源开发工作的基础上,提出了虚拟水族馆的概念。所谓虚拟水族馆就是采用虚拟现实技术,通过在计算机上建立一个类似于真实水族馆的虚拟环境,让游览者实现虚拟观赏效果。虚拟水族馆不仅能够模拟真实水族馆的景观,还能够保护珍贵的水生生物,因为水族馆里所有的生物都是虚拟的。同样,在虚拟水族馆中,我们可以编制更多种类的生物,避免了由于地理位置、气候等因素带来的不同生物生存环境的限制。这项技术对于由于地域限制而无法开发水族馆的地区是十分值得提倡的。虚拟水族馆的组成主要包括:鱼箱、各种鱼的模型、各种海底生物、山石的模型等。还要包括背景、灯光的设置以及各种生物的行为设置等等。虚拟水族馆目前在国外虽然已经得到初步开发,但价格也很昂贵,不利于普及。例如,葡萄牙里斯本海洋水族馆,作为在葡萄牙第98届世界博览会上的一部分,一个超级图形计算机模拟这个海洋水族馆的外表和其周围的环境以及它的内景,包括生活在海平面上下的海洋生物[7]。从观赏的角度上分析,如果为海底生物建立类似于人工鱼的行为模型,必然要增加很大的计算量,为此,可以考虑简化海底生物的运动,从而达到可以在普通微机上开发的目标。
本文在对虚拟水族馆景观要素分析的基础上,以普通微机作为开发工具,采用虚拟现实造型语言VRML97和 3DS MAX实现了某虚拟水族馆的场景,利用VRML强大的交互功能,实现了虚拟水族馆中生命体的动画,本文的方法为开发水族馆资源提供一种新的手段,水族馆的游览者不再受时空的限制,更好地实现了人与水族馆的互动。本文的方法可以应用到水族馆的景观规划和网上展示中。
2、虚拟水族馆的场景设计
虚拟水族馆具有透明的玻璃幕,里面有许多浮游的虚拟鱼、虚拟海草、虚拟礁石和虚拟灯光。本文采用3DS MAX作为三维建模的工具,虚拟水族馆的所有景观物体均事先在3DS MAX中绘制好(纹理通过预先拍照获取),然后再将三维模型导成VRML97的格式。具体绘制步骤概括如下:
(1)在3DS MAX绘制虚拟水族馆的水箱和建筑模型:
(2)绘制不规则形状的静态物体:不规则形状物体包括海底和礁石,可先绘制一个规则形状的物体,然后通过在编辑过程中添加噪声来实现不规则的效果。最后,选择合适的贴图来实现表面视觉效果。
(3)绘制海草:可以有多种方法绘制海草的几何造型,为了表现海草的运动,可以设定波浪空间扭曲物体,将其扭曲影响施加给海草,实现海草的运动效果。
(4)海底生物的绘制:主要是包括虚拟海星和虚拟鱼,可采用多种方式实现。虚拟鱼的模型完成后,可以为其设定骨骼系统来实现运动。虚拟鱼的运动包括鱼尾的摆动和身体的前进。其中,鱼尾的摆动通过创建骨骼、设置骨骼的运动,将鱼的身体作为骨骼的蒙皮来实现。身体的前进通过路径约束并在此基础上调整鱼的位置(设置关键帧)实现。如图所示。
3、虚拟水族馆动态效果编程
虚拟水族馆的动态效果包括以下几个方面:
(1)设定不同的漫游视点:利用VRML的ViewPoint视点说明语句,实现不同视点的漫游效果。其中,从鱼的视角观察周围世界需要使用动画视点的方法,即将一个视点绑定于鱼的头部,作为鱼的眼睛来观察周围的景物。如果鱼的运动路径已经在3ds max中设置好,可以将摄像机链接到鱼头部。为了提高漫游的效果,需要设置自动漫游,可以通过在3ds max设置摄像机动画来实现。
(2)虚拟鱼的动画:在3DSMAX中预先设置鱼的游动动画,然后可以直接转换成转化为VRML动画文件,可以用文本编辑器打开此文件,对其中的关键语句(如传感器TimeSensor、位置插值PositionInterpolator、朝向插值OrientationInterpolator、坐标插值CoordinateInterpolator等)的参数进行修改调整。
虚拟鱼和环境的碰撞检测可以利用VRML中节点Collision来实现,但当鱼的数量很多时,需要进行大量的碰撞检测。在本文实现的原型中,出于视觉观赏的考虑,不追求虚拟鱼行为的真实感。为避免鱼在水中游动时与障碍物发生碰撞,采取了比较简单的方法,即为每一种鱼设置好运动路径,这些路径避开静态的障碍物,并在空间上尽量避开其他鱼的运动路径。
(3)光线的动态效果:虚拟水族馆可以利用光线的变化来烘托气氛,调动用户的情绪。使用时间传感器和颜色插补器来实现不同环境背景的转换动画。方法是在场景中选择需要变色的光源,用颜色插补器控制光源的颜色属性来实现不同灯光背景的颜色转换。主要代码为:
DEF clock TimeSensor { #时间传感器
cycleInterval 100
loop TRUE}
DEF inter ColorInterpolator {
#颜色插补器
key [
0.0 0.33 0.67 1.0
]
keyValue [
1.0 0.0 0.0
0.0 1.0 0.0
0.0 0.0 1.0
1.0 0.0 0.0
]
}
ROUTE clock.fraction_changed TO inter.set_fraction
ROUTE inter.value_changed TO plr-LIGHT.set_color
ROUTE inter.value_changed TO sp. set_diffuseColor
其中,clock是定义的时间传感器节点名,inter是定义的颜色插补器节点名,plr-LIGHT是定义过的光源节点名,sp是定义过的一个长方体(水族馆)节点名。通过路由语句创建事件传播体系,随着时间的推移,光源和水族馆表面的颜色根据颜色插补器中设置的颜色值不断发生变化。
(4)动态交互:VRML的Script节点可以实现动态交互功能,Script节点的定义如下:
Script {
url []
directOutput FALSE
mustEvaluate FALSE
eventIn eventTypeName eventName #多个入事件、出事件和域
eventOut eventTypeName eventName
fieldTypeName fieldName initialValue
}
其中url域的值设置一个url列表,列表中的url域值可调用Java、JavaScript等脚本语言。
mustEvaluate域的值设置脚本程序何时进行处理。若该值为TRUE,则当Script节点的某个eventIn入事件接收到一个新值,浏览器将立即对相应的脚本程序进行处理。若为FALSE,则可推迟对该脚本程序的处理。directOutput域的值设置脚本程序的输出是否受限制。默认情况下为FALSE,即脚本不能直接进行写操作或对任何节点发送入事件,但可以访问。例如,在虚拟水族馆中可以实现开启灯和音乐的动画。具体实现是:从3ds max导出的VRML文件中插入所需要设置的声音节点s和光源节点center-LIGHT,并在触发对象(一个绿色小球key0)节点代码中插入名为mouse的接触传感器节点,即在小球key0上捆绑了接触传感器使之成为一个可交互的造型,当鼠标单击绿色小球时即可实现开启灯和音乐的动画。主要代码如下
DEF s Sound { #声音节点
source AudioClip {
url "sea.wav"
loop TRUE
}
direction 1 0 0
intensity 0.0 #表示静音
maxBack 300
maxFront 300
minBack 150
minFront 150
spatialize FALSE #作为环境音
}
DEF center-LIGHT PointLight { #光源节点
intensity 1
color 1 1 1
location -18.72 105.4 0
on FALSE #表示灯关
radius 204.9
}
DEF key0 Transform { #开关(绿色小球)
translation -28.75 16.38 -13.41
children [
Shape { …… }
DEF mouse TouchSensor { }
]
}
接下来在VRML文件的末尾插入Script节点和路由语句,代码如下:
DEF path Script { #Script节点
eventIn SFTime time
eventOut SFBool light
eventOut SFFloat loudsound
url "javascript:
function time(){
light = TRUE ;
loudsound = 0.5;
}"
}
ROUTE mouse.touchTime TO path.time
ROUTE path.light TO center-LIGHT.on
ROUTE path.loudsound TO s.intensity
以上Script节点共定义了一个SFTime类型的入事件time、一个SFBool类型的出事件light来控制灯的开启、一个SFFloat类型的出事件loudsound来控制音乐的响起。通过JavaScript脚本程序为time入事件定义了一个同名函数time( ),并使用赋值语句为出事件light和loudsound赋值,从而改变场景节点的相关参数。由于场景中绿色小球捆绑了接触传感器,一旦使用鼠标单击小球,传感器就输出touchTime事件,而Script节点的time入事件通过路由接收到传感器输出的事件后将自动调用time()函数进行处理,处理结果是将改变后的light和loudsound值分别通过路由输出到光源center-LIGHT和声音s的相关域上,使得灯开启、音乐也随之响起。
(5)Lod技术:Lod是一个VRML的节点,它能够根据物体与观察者之间的距离选择同一对象的不同细节的版本来控制场景的复杂度。如果一个物体是接近观察者的,那么该物体是高度细节化的,观察者能较清楚地看到物体表面特征,越靠近越清晰;如果物体是远离观察者的,那么观察者将不会发觉小的细节。Lod技术的作用能够保证了在不降低浏览效果的同时提高系统的交互性和图像绘制速度。
可以在3DSMAX中直接插入VRML节点的方式来使用Lod技术,也可以在VRML文件中直接编辑。LOD节点的语法格式为:
LOD {level []
center 0.0 0.0 0.0
range [] }
其中level域的值设置细节层次节点列表。一般将第一个层次节点设置为高细节造型,其后的层次节点程度依次降低。center域的值表示LOD节点内建立的模型中心在当前坐标系中的三维坐标。range域的值设置浏览者与造型间的距离列表。浏览器根据距离列表选定需要渲染的level域中的就节点造型。range域的值须大于等于零,且必须递增排列。
在本文,主要针对虚拟鱼造型纹理清晰度的变化来实现细节层次。即分别创建两个VRML文件(通过3ds max导出),一个是清晰度较强的高细节造型,命名为near.wrl;另一个是缺少鱼的纹理的造型文件far.wrl。再在LOD编组节点的level域中通过Inline加以引用,将两个文件组织在一起,通过range域中合理的设置达到浏览效果。代码如下:
#VRML V2.0 utf8
LOD {level [
Inline {url "near.wrl"}
Inline {url "far.wrl"}
]
range [150] }
当浏览者与造型的距离小于150时,看到的场景是高细节的;当这个距离值大于150时,看到的场景是相对低细节的。
4、原型系统
虚拟水族馆的演示效果见图。
5、结 论
本文提出了建立虚拟水族馆的方法,实现用浏览器观看虚拟水族馆的效果,利用3DSMAX和VRML的功能,初步实现了虚拟水族馆的多媒体互动演示功能,游览者可以在普通的微机上感受虚拟水族馆的场景。本文提出的方法为今后水族馆资源的开发提供了一种新的技术手段。
>>相关产品