制作3d模型大概是最基本的工作,但受限于目前一般PC硬件运算能力与Virtool本身所能程受的负荷范围,
因此3D模型不能作到非常精细,不然会导致运作时系统不稳定而当机。一般而言,整个场景作出来的polygon面数
最好是维持在10000~15000面之间,同时贴图亦不要超过10mb左右为最佳。
1.利用地形图作为描绘底图
我们调阅台大周围地区的数值地形图,将整个椰林大道范围输出成一张底图,以利制作3d模型。
2.拉出各建筑物量体
利用地形图当底图后,再利用Polygon中Create Polygon Tool、Split及Extrude等功能,将量体拉出。建筑物量体的高度,由于缺乏数据,因此以三角函数测量的结果为数据。
3.细修模型
有些模型量体不大,但却重要且型体较复杂就要作细一点,但是在作时一定要控制polygon的面数,以免作得太细导致数据量暴增而使Virtool无法负载。
每polygon面要记住不要有内角超过180度的情形发生,不然会形成不合法的面,造成显示上的问题
4.其它注意事项
(1)看不见的面﹝如背部﹞要删除以节制polygon面数。
(2)非特别重要的树木植栽不用作成模型,最后到Virtool以3d Sprite方式作,以控制资源。
(3)模型确定后记得把History删除,然后作最佳化处理(Optimize),如此一来将模型转到Virtool后才不会变形或扭曲。拍摄得到的相片,常因为有些干扰﹝如被树木遮挡﹞或是拍摄时的人为因素,使得照片还需要经过影像处理才能拿来当作3d贴图使用。而影像处理的软件很多,其中功能最为强大的,应该就属Photoshop了,而以下就以Phostoshop作为我们的工具,而以下就以行政大楼的照片处理过程,概述我们对于相片处理处理的作法:
(这是未处理的相片)
由于每张照片会因为拍摄角度、时间及位置不同,使得其色阶色相及色调有不同的结果;因此,第一部即利用Photoshop把照片的色阶、色相、色调调整得和谐点。
将照片中我们需要的部分利用photoshop调整其大小、位置及修正扭曲部位等。
在Photoshop7.0之后,有两个很方便的工具:Healing Brush Tool及 Patch Tool;它们的用法有点像图章,但跟图章不同是它们在涂抹后便会自我修补涂抹范围,相当方便。因此,利用它们来去除不要的部分。如:很多花草遮着我们需要的部分时,?就可以用他们来修改。
最后,利用Dodge、Burn、Sponge等工具,增减某些部位亮暗程度即可。
(最后完成的一张贴图元素就变成如此)
5.贴图
在制作3d模型时我们就已经把polygon模型的UV拆理好,因此我们在作贴图时,只要将上述处理贴图元素利用Photoshop把他们全部对应到UV范围内,最后再输出成一张图即可。但要注意的是,最后的贴图最好是2次方的倍数,如:256*256、512*512或是1024*1024以上;因为2的次方倍数的图在被Virtool读取时,速度较快
(拆理好的UV)
(贴图元素对应UV)
(3d模型贴图完后的樣子就是如此)
随后所有的模型皆以此方式处理,此外需注意的是,Virtool本身只有两种材质球: Flat及Gouraud因此在3d软件内你所指定的材质将会在输出后自动换原来的Phong, Lambert, Blinn, Anisotropic, PhongE在Virtool时将会转为 Gouraud。最后将贴完图的模型,利用virtool的转换软件,全部加入virtool的场景内,我们就可以作交互式的设定。而我们目前所作的设定很单纯,主要有第一人称的摄影机之移动与旋转、场景活动范围界定、还有树丛的设定等。
型输出Virtool可读的档案格式
将模型输出成virtool可读的(.nmo及.vmo)档格式,需另外加装各3d软件的输出程序。而我们是用Maya5.0作模型,因此需要安装Maya5.0汇入virtool的程序,随即便到Maya的Windows/Setting/Preference/plug-in Manager中勾选virtool的外挂程序。然后打开已作好的场景模型,到File/Export All即如下图所示:
在这选单中,你可以指定你要输出的项目及内容。包含对象层极关系(Hierachy)、模型几何面(Mesh)、材质(Texture)、摄影机(Camera)、灯光(Light)、法线(Normal)及动作(Animation);并可以依情况输出成Character或是一般等,此外亦可分别指定要输出选择的模型或是全部。
指定好项目后,将档案存取到对应的目录,在此要注意输出的项目为何,再去对应目录名称,例如你要输出角色就建议输出到Character数据夹,其它场景中的对象则存到3d entity中,因为在Virtool中有一些行为模块是有各别针对Character专用的。此外,材质与声音等,亦建议存取到对应的目录。 ◎在输出前建议先到Virtool内建立一个Resource Data夹
其它输出时注意事项 :
●Nurbs及Subdivision的模型无法支持,因此请转成polygon模型后再输出。
●所有的线,如spline作为path用的线无法支持,这点你可以在Virtool中利用Create Curve祢补。
●Set及Partition可支援。
●支持同一对象贴有不同材质的情况。
●支持模型Smooth及Break从0~180。
●支持模型的贴图UV位置及方式(Planar, Cylindrical, Spherical, and Automatic mapping)。
●支援Vertext颜色及Alpha。
●支持group、parent及root的关系。
●不支持三视角摄影机输出,其它摄影机将转为Virtool的Target Camera并可保有其原来摄影机动画。
●灯光方面,Virtool支持Spot、Point、Directional的光,而Ambient会转为point,其它则不支持。
启动Virtools,进入的工作窗口画面,选择上方指令选单的Resources/Import File﹝或是Open Resource )a,找出并汇入刚刚输出的NMO档案。
调进来时,模型都会黑黑的,那是因为还没有调整物体材质本体光(emissive),或是灯光太弱。只要选择物体按鼠标右键选Material Setup,选择 emissive选项后,调整色阶后就会展现正常状况(如下图)。
以此类推,我们将所有场景的对象都输入后,便可得到下图状况。而先前我们有提及,我们需要的面只有椰林大道两侧,因此建筑物其它面,如屋顶及其它三侧并没有作得很完整,一方面可以降低整个场景的polygon面数以维持效能,二者我们摄影机只有在椰林大道中移动,其它面是看不到的。
全部汇进来的状况就像如此
模型进入Virtools后,就可以作交互式的设定,而Virtool本身就有500多个行为模块,彼此间可以搭配串连就可混合出很多不同的互动设定。然本案用到的机能不多,计有碰撞设定、第一人称摄影机自由移动、喷泉及流水等等。
(一)Virtool行为模块
Virtools的交互式设定是相当有逻辑性,好像在玩电路板游戏,或说是把写程序转化成一种具像的流程图,每个关键的语汇转化为一块块的行为模块﹝Behavior Building Block﹞,每个模块身上很多插孔,有输入插孔(Behavior Input ,用来接收流程上层命﹞、输出插孔﹝Behavior Output,传送执行结果﹞、输入参数﹝Parameter Input,执行前的参数设定﹞、输出参数﹝Parameter Output,执行前的参数设定﹞,这些行为模块是构成一个物体作用的最基本元素,只要各种不同的行为模块合理地联结起来就可以让3d对象互动起来。
而如何联结这些行为模块,我们可以从下图来了解:
上图就是把几个行为模块连成一个行为的例子。首先我们要作的结果,是把一个对象(即Eva这角色)放在一个地板上(Floor),然后让光打在Eva上,让Eva的影子产生在地板上。而在Virtool我们就是把这样的概念用几个行为模块去连起来,其中图上的Charater Control 是角色的动作控制,而ShadowCaster目的在于指定Eva为影子的投射者﹝灯光参数为Point Light),而Enhanced Charater Keep On Floor是指定Eva要站在地板上﹝Floor模型增加一个地板属性﹞。随后执行的结果就会有阴影产生。而Virtool有500多个行为模块可以相联结。
(二)台大椰林大道模块设定
1.设定场景范围
由于我们所作的场景集中在部分椰林大道上,因此出了此范围外,就会穿梆。因此我们首先要定义我的场景范围,使所有的活动皆在里面发生。而Virtool提供了一个方便的工具Create Gird,目的是将场景网格化,随后可以在不同的网格上作不同的设定。
(1)首先利用 新增一个Grid,执行后场景上就会出现一个方块笼罩在场景上(如下图),如果在下方黑色网格上涂画,Perspective View就会出现对应的范围。
因此我们可以利用 (增减网格数)、 (移动网格区块)、 (放大缩小网格区块)来调整Grid的影响范围,使之与我们作的场景大小符合。进一步再去把我们所要作用的范围涂画出来。
最后,针对椰林大到作的区域如上图所示,红色范围为避免进入的区块,之后这区块将定义为不可进入的范围,而黑色则为可活动的范围。
2.第一人称的摄影机
这个摄影机可以利用键盘上的上下左右键进行前后左右的移动。此外我们还要使它对应之前勾勒出的场景范围,当它遇到场景边缘时,就会自动滑避。
(1)首先先新增一个摄影机 ,并将摄影机移动至适当的地点,作为启动结果时的预设位置。
(2)到Level Manage/Level/Global/Camera里选择刚设的摄影机,然后按鼠标右键,选择Create Script,随后便会便出现下图:
(3)加入行为模块
这部分我们会用到的行为模块如下:
行为模块
位置
功能
Set As Active Camera
Cameras/Montage/Set As Active Camera
作为启动后预设的摄影机
Switch On Key
Controllers/Keyboard/Switch On key
使键盘上的某些键具有操作功能
Per Second
Logics/Calculator/Per Second
指定某变量的变化速率
Translate
3D Transformations/Basic/Translate
移动
Rotte
3D Transformations/Basic/Rotate
旋转
Object Slider
Collisions/3D Entity/Object Slider
使摄影机遇到场景边缘时会滑开
(4)连结
随后我们将这些行为模块连接成下列行式:
这样的连接逻辑为:我们设一个新的摄影机,使这个摄影机在启动所看到画面的摄影机(Set As Active Camera),且让这摄影机的移动可以键盘的上下左右键来控制(Switch On Key)。而为了控制摄影机的移动速率,我们各别在上下(控制摄影机的前后移动Translate)、左右(控制摄影机的前后移动Rotate)加了Per Second来控制相关参数,并在命令完成后连到Switch On Key使成为一个循环。除此之外,入Layer Slider 让它遇到场景边缘时会自动滑开。
●最后完成后,我们都要选取摄影机作Set IC For Selected的动作,IC即Initial Condition,目的在于把现在对象的位置状况设为最初的情形。
Virtool除了可以针对场景上的对象各别作复杂的行为模块联结外,对于某些重要元素,如场景上的花花草草及水流等等,亦提供了相当方便的行为模块来操控。
一、流水制作
其实流水的概念只是把一张水的图,利用Virtool内建的Texture Scroller,让其在某个向度上不停地作循环移动,就可以达成了。
二、喷泉
喷泉的设定也是很简单,我们只是叫了Building Block/ Particles /Point Particle System到场景,它是模拟粒子动力学的工具。原理是把一张图(即喷泉水的图)当成一颗颗的粒子,然后以一个发射器来发射,只要调整想要的发射方向、速度及重力环境等相关参数后,便可以简单模拟出喷泉的样子,这种工具常常用来作射击游戏的子弹效果。
三、植栽
植栽说起来可以说是一种障眼法,原理就是利用图片的屏蔽,将不需要的地方隐藏起来,而且使这张图片永远面向摄影机即可。而这种方式即是用Virtool中的3D Sprite来完成。
1.首先需在影像处理软件上把图片不需要的部分上单一颜色(如黑色),再存盘(建议存成有带alpha)成图档。
2.把这张图放在Resource Data下的3D Sprite目录。
3.进入Virtool后,直接从3D Sprite中的图文件用鼠标左键拖拉到场景中。
4.在窗口中选择该3D Sprite(即该图),按鼠标右键进入3D Sprite Setup中。
5.在Sprite Type中勾选Y Rotate(代表只能旋转Y轴)及Pickable(可选取)。
6.再选该图按鼠标右键到Texture Setup,点选Pick Color,然后移到图中屏蔽部位(如上图的黑色部分)