虚拟现实(virtual reality,VR)技术是指将计算机、传感器、人工智能、5G等技术相结合,生成的一种人机交互技术.通过现有信息技术在视听触嗅等方面生成近似真实世界的数字化环境,用户与虚拟环境中的对象交互通过虚拟现实设备实现,使人获得身临其境般的感觉[1-2].虚拟现实系统[3]主要包括虚拟对象建模、虚拟环境管理和模型行为交互,其中虚拟对象建模是整个虚拟现实系统建立的基础,虚拟对象建模生成三维模型的真实度决定了虚拟现实系统的沉浸度.当前虚拟现实建模主要有三维软件图形化建模(如ZBrush[4],中望3D[5],3DSMax[6])、脚本建模(如VRML[7],VTK[8],MAXScript[9])和仪器设备测量建模.仪器设备测量建模通过扫描仪对实物表面进行扫描生成模型,操作简便;三维软件图形化建模通过可视化界面拖拽操作生成模型,效果直观;脚本建模通过代码编译生成模型,表示精准.相比其他两种建模方式,脚本建模适用于对模型精细度和流畅度有更高要求的应用,如在工业VR设计中,机械构件的精细度意味着产品的成效,图形建模在外观上能达到要求,但具体细节不如脚本建模准确.PAR[10-13]是一种统一软件形式化开发方法及支撑开发平台,能够显著提高算法和软件开发的效率和可靠性.Apla语言[14]是PAR的一种泛型抽象程序设计语言,充分体现功能抽象、数据抽象等现代程序设计思想,使构成的程序易于阅读理解和验证.本研究围绕PAR及其抽象程序设计语言Apla展开,设计与原Apla语言融合的虚拟现实建模机制.1 现有方法和问题分析1.1 现有方法优缺点1.1.1 脚本建模脚本建模通常用来实现批量化处理模型、动画创作及精确模型创建,是一种用代码来控制模型的开发方法.VRML是一种三维造型和渲染的图形描述性语言,用在网络上创建逼真的三维虚拟场景.VRML通过节点描述几何造型和视点等,从而达到模型和虚拟环境的创建.文献[15]提出了一种基于虚拟人合成技术的中国手语合成方法,将文本句子翻译成聋人手语,使用VRML来模拟和显示三维虚拟人的姿态.其优点是能同时实现建模和交互,创建的是可进入和可参与的三维虚拟世界,使虚拟世界的真实性、交互性和动态性得到更充分体现;其缺点是尽管代码操作简单,但是创建3D空间却需要一定的空间逻辑能力,这对于没有学过三角图形学的用户来说,无疑是一个巨大的挑战.VTK是一种利用面向对象技术设计和实现的三维可视化工具箱,最早主要应用于医学可视化,后加入了几何图形的三维建模功能.VTK既支持基于体素的体绘制,又保留了传统的面绘制,同时封装了许多三维可视化算法,把几何数据转换成图形数据并负责构建几何体.文献[16]调用VTK库实现了一个用于医学MRI数据集和3D光学图像显示的导航工具NIRViz,轻松实现磁共振和光学图形叠加.其优点是平台无关性,通过相关配置就可以在Java和Python等语言上使用,同时支持并行可视化;其缺点是设计开发人员须过多地关心图形可视化的内部实现算法,不能把精力集中在设计上,生产效率过低.MAXScript语言是3DSMax自带的建模脚本语言,是一种面向对象的程序设计语言,能够控制3DSMax软件的所有交互操作,进行建模、材质调制、渲染处理等.文献[17]基于Kinect和MAXScript完成了骨骼动画快速建模,对复杂三维场景层次细节模型和三维植被过程式建模研究,利用该脚本语言对三维模型生产过程进行优化.其优点是代码没有严格的格式要求,易于设计人员和开发人员掌握,3DSMax软件拥有的所有功能都能通过脚本实现,还可以提升模型精确性;其缺点是MAXScript Editor没有代码高亮、报错等提示.1.1.2 PAR方法和Apla语言PAR方法和PAR平台包含循环不变式的新定义和新开发策略[18]、统一的算法程序设计方法和新算法表示方法、自定义算法设计语言和抽象程序设计语言等关键技术,集成涵盖了泛型[19]、生成式、模型驱动和构件组装[20]等新型软件开发技术,可以大幅度提高开发复杂算法程序的效率和可靠性.Apla语言[12,21]是为了实现算法程序形式化开发的PAR方法而定义的一种抽象程序设计语言.设计Apla充分体现了功能抽象、数据抽象的语言机制.即利用自顶向下逐步求精的程序开发方法,先基于抽象的功能和数据,设计抽象的程序;再逐步将抽象的功能细化,直至能使用可执行语句描述.Apla语言支持抽象数据类型,提供基本数据类型、抽象数据类型和自定义ADT机制,能够大幅简化开发过程,在保证易读性的同时缩短代码长度,通过循环不变式的新定义和新开发策略推导出循环不变式,使得它们更容易理解.Apla既是Radl→Apla程序转换器[22]的目标语言,又是Apla→C++程序自动转换系统[23]、Apla→C#程序自动转换系统[24]、Apla→JAVA程序自动转换系统[25]和一系列Apla代码转换到其他高级程序设计语言的自动转换系统的源语言.1.2 问题分析从功能性角度分析,脚本建模与图形化建模是等价的,即脚本建模能够实现图形化建模的所有功能,反之亦然.目前,虚拟现实脚本建模依旧存在一些挑战性问题:语言复杂繁琐,抽象程度不高;建模的精确性和开发效率还有待提高;建模程序的可靠性难保证;虚拟现实建模阶段和交互阶段相互独立,没有统一融合.针对上述问题,基于Apla语言,通过扩充带有建模特点的数据类型、数据结构、基本体类型和修改器构件,设计出了一种虚拟现实建模的抽象语言机制.基于Apla的虚拟现实建模语言抽象程度高,便于开发人员设计三维模型;开发的Apla→MAXScript自动生成系统能够将抽象Apla程序转换成MAXScript脚本,有利于提高建模的精细度和开发效率;基本体和修改器同时兼容了建模阶段和交互阶段的基本操作,使Apla语言既体现了虚拟现实的建模功能,又能与虚拟现实交互引擎Unity3D进行融合.2 虚拟现实建模机制设计2.1 数据类型扩充MAXScript语言和其他面向对象的程序设计语言在数据类型上稍有不同,主要是针对设计三维模型提出的,因此MAXScript中拥有许多和图形设计相关的数据类型,如point3和angleAxis等.Apla最大的特色就是数据类型十分丰富,拥有实现抽象数据类型的预定义ADT,如“集合”“包”“序列”“树”和“图”,但仍无法完全表示出虚拟现实建模所需的数据类型.拟添加point3,color,angleAxis,array和matrix3等数据类型,方便实现Apla建模开发.部分语法如下.三维点类point3:var〈point3_Name〉:point3;〈point3_Name〉:=[〈expr〉,〈expr〉,〈expr〉].轴向角类angleAxis:var〈angleAxis_Name〉:angleAxis;〈angleAxis_Name〉:=〈deg_Float〉〈Axis_point3〉.2.2 模型的扩充多边形(Polygon)建模是目前三维软件两大流行的建模方式之一,这种方式通常是选择一个接近模型外观的基本体,再使其转换为可编辑多边形对象,通过对多边形对象的Vertex,Edge,Border,Polygon和Element五种子对象模式进行编辑和修改来实现建模过程.基本体是多边形建模的基础,选择的基本体越接近原本所要设计模型的结构,越能节省建模所需的时间.在Apla中也须扩充建模所需的基本体模型,如长方体、圆锥体、球体和平面等.部分语法如下.长方体box:var〈box_Name〉:box;〈box_Name〉.length:=〈value_Float〉.圆锥体cone:var〈cone_Name〉:cone;〈cone_Name〉.radius1:=〈value_Float〉.2.3 修改器构件设计除了使用可编辑多边形的形式进行模型的修改,MAXScript还提供了多种修改器,通过使用不同的修改器能将建模的流程进行简化,同时又可以创造出复杂精妙的模型.例如自由形式变形FFD修改器能通过层级选项中的Control Point来改变外形,Control Point越多,每个点的控制范围就越小,控制的精密程度就越高.在Apla中以构件的形式来实现修改器的功能,不同于PAR平台的其他转换器构件的设计,本虚拟建模语言机制直接重用MAXScript修改器的API接口,无须额外使用目标语言(如C++,Java)来开发构件.MAXScript的修改器类型多达98个[9],每个修改器的方法数量多,不同修改器之间的属性和方法也不相同.重构这些构件工作量大、重复性高、实现过程繁琐,直接通过调用API来重用MAXScript的修改器能大幅度减少重复性工作.Apla重用MAXScript修改器API的部分语法如下.调用添加修改器:〈geometry_Name〉.addModifier(〈modifier_Name〉).挤出修改器属性控制:〈Extrude〉.amount:=〈value_Float〉.通过直接重用MAXScript的API来设计Apla语言的修改器构件具有如下优势:用户使用Apla脚本建模无须关注修改器的编码细节,能够快速实现模型开发;延续了Apla程序抽象程度高的特点,便于对虚拟现实的建模程序进行形式化推导和正确性验证,进而保证Apla建模程序的可靠性;以构件的形式实现修改器功能,方便之后对修改器进行扩充和修改.2.4 Apla语言建模开发流程通过对虚拟现实模型的开发过程进行研究可以发现,创建一个典型的虚拟现实几何模型大致分为创建基本体、添加修改器、添加材质和贴图及导出.Apla建模时序如图1所示.10.13245/j.hust.210209.F001图1Apla建模时序图创建基本体确定了模型的基本外观,通过对比拟开发的模型,选择和模型外观相近的基本体,之后模型的修改都是基于基本体进行改变;添加修改器是在基本体上添加修改器构件,修改器能够对模型进行编辑,改变其几何形状和属性;添加材质和贴图是给模型赋予更加逼真的外观,材质包含了颜色、质感和反射等内容,贴图反映了模型表面的纹理效果,将二者组合能够使模型在光照条件下呈现出不同的视觉效果;导出是按照选择的模型文件格式将其导出到虚拟现实系统中使用.3 平台构建和案例分析3.1 建模与交互的融合Apla语言是基于对象的抽象程序设计语言,使用扩充了虚拟现实功能的Apla语言开发虚拟现实系统,包含建模和交互两个阶段(如图2所示).10.13245/j.hust.210209.F002图2基于Apla的建模和交互a. 建模阶段MAXScript脚本语言具有易维护、质量高、效率高和易扩展的优点,通过对脚本建模和PAR方法的研究,结合虚拟现实开发方法,针对虚拟现实建模,设计了一个Apla→MAXScript程序自动转换系统,通过编写Apla代码生成几何模型.b. 交互阶段PAR平台已有Apla→C#程序自动转换系统,Apla→C#转换系统为虚拟现实系统中模型的行为交互提供了可能,C#作为Unity3D的脚本语言,能够对虚拟环境进行管理,实现三维模型移动和触碰等交互操作.3.2 Apla→MAXScript自动生成系统为了实现虚拟现实建模的开发,PAR平台针对不同的可执行程序拥有多种典型的转换系统,结合抽象程序设计语言Apla的特点,设计了一个Apla语言到MAXScript语言的自动程序生成系统.该系统的主要功能有:从文件中读入或者手动输入一个Apla程序;对Apla进行语法、词法和语义分析;根据Apla语言到MAXScript语言的转换规则,通过生成器将Apla程序生成MAXScript程序等.为了方便平台间的移植,Apla语言不能直接编译得到运行结果,而是将编译交给目标语言平台,保证编译器正确性同时实现平台无关性.在Apla→MAXScript自动生成系统中,生成的MAXScript脚本在3DSMax软件中进行编译和运行,从而生成最终的模型文件.3.3 石头模型案例结合Apla建模流程,可得石头的建模过程如图3所示.首先分析石头的基本外观,选择一个接近石头形状的几何球体,然后通过FFD3×3×3修改器控制球体的基本外观,使其更像石头,噪波修改器可以制作不规则形状,松弛修改器可以更改球体表面的光滑度,挤压修改器可以指定突出和挤压效果的大小,UVW展开修改器可以实现法线的分割,最后选择合适的材质就可以导出模型.10.13245/j.hust.210209.F003图3石头建模过程根据Apla语法规则预实现该模型案例的程序代码如下:program createStone;var stone:Sphere;nosieS,i:integer;function baseStone (baseSize:integer,basePos:point3,diffuseMap:Character);beginstone.radius,stone.segs,stone.pos:=baseSize,16,basePos;stone.addModifier(squeeze);//挤压修改器squeeze.Bulge_Amoun,squeeze.Bulge_Curviture,squeeze.Squeeze_Amount:=(random -0.1 0.1),(random -20 20),(random -0.1 0.1);///FFD修改器噪波修改器 松弛修改器 uvw展开修改器//贴图map(all,“D:\stoneModel\”+diffuseMap,1,70,33,0.6);end.begini:=0;baseStone(baseSize,basePos,“stone”+i+“.jpg”);i:=i+1;od;export(all,“D:\stoneModel”,“stone”,1) ;//导出end.在虚拟现实自然环境场景中,石头分布比较广泛,使用的模型外形也多种多样.案例中控制石头外形的挤压修改器使用了随机函数,这样每编译运行一次脚本,生成不同外形的石头模型.Apla代码通过生成器生成对应的MAXSctipt脚本编译后得到的石头三维模型如图4所示.10.13245/j.hust.210209.F004图4石头三维模型3.4 分析与验证3.4.1 精细度图形化建模是所见即所得的建模方法,可以通过拖拽编辑多边形的点线面来调整模型的位置和大小,高精度模型位置点往往有图纸规划,此时拖拽达不到高精度的要求.Apla→MAXScript自动生成系统编写的Apla代码能够实现模型数据化,通过代码对每个坐标进行精准控制.在石头模型案例中各个石头的位置、大小及面数都通过精确的代码来保证模型的高精细度.3.4.2 开发效率在Apla→MAXScript自动生成系统中,调用封装好的抽象方法,既能够缩减代码长度,又能够保证代码的可读性.案例中可以一次性生成指定个数的石头模型,无须重复操作,节省建模时间.贴图和导出只须两三行Apla代码就能实现MAXScript中十几行代码的功能,可以大幅提高开发效率.Apla还能实现模型在Unity中的交互,开发人员无须熟悉MAXScript和C#即可完成虚拟现实程序的开发,简化开发过程.3.4.3 可靠性针对上述核心代码,可以使用PAR方法中循环不变式的新定义和新开发策略推导出循环不变式,使用Dijkstra最弱前置谓词方法,对Apla程序进行形式化正确性验证.前置断言{Q:i=0∧baseSize=5∧basePos=[0,0,0]}.后置断言{R:i=5∧baseSize=25∧basePos=[0,120,0]}.循环不变式{ρ:0≤i5∧baseSize=5*(i+1)∧basePos=[0,30*i,0]}.界限函数τ=5-i.验证过程如下.证明Q⇒ρ∵ρ≡{baseSize=5*(i+1)∧basePos=[0,30*i,0]}0i≡{baseSize=5∧basePos=[0,0,0]};{Q:i=0∧baseSize=5∧basePos=[0,0,0]}∴Q⇒ρ成立.证明ρ∧C⇒wp("s",ρ)∵wp("s",ρ)≡wp("baseSize,basePos,i:=5*(i+1),[0,30*i,0],i+1",baseSize=5*(i+1)∧basePos=[0,30*i,0])≡{baseSize=5*(i+1)∧basePos=[0,30*i,0]}5*(i+1)baseSize [0,30*i,0] basePos i+1 i≡True∴ρ∧C⇒wp("s",ρ)成立.证明ρ∧¬Guard⇒R∵ρ∧¬Guard≡0≤i5∧baseSize=5*(i+1)∧basePos=[0,30*i,0]∧i≥5≡False∴ρ∧¬Guard⇒R成立.证明ρ∧Guard⇒τ0∵ρ∧Guard≡0≤i5∧baseSize=5*(i+1)∧basePos=[0,30*i,0]∧i5≡0≤i5∧baseSize=5*(i+1)∧basePos=[0,30*i,0];τ0≡5-i0≡i5∴ρ∧Guard⇒τ0成立.证明ρ∧C⇒wp("τ1:=τ;s",ττ1)∵ρ∧C≡0≤i5∧baseSize=5*(i+1)∧basePos=[0,30*i,0]∧i5≡0≤i5∧baseSize=5*(i+1)∧basePos=[0,30*i,0];      wp("τ1:=τ;s",ττ1)≡wp("τ1:=5-i;baseSize,basePos,i:=5*(i+1),[0,30*i,0],i+1",5-iτ1)≡[(5-iτ1)i+1i 5*(i+1)baseSize [0,30*i,0] basePos]5-iτ1≡4-i5-i∴ρ∧C⇒wp("τ1:=τ;s",ττ1)成立.本案例中的Apla程序完全正确,在Apla→MAXScript自动生成系统可靠的前提下,生成MAXScript程序的正确性也可以得到保证.4 结语本研究为解决虚拟现实系统中建模阶段和交互阶段相互独立、语言机制复杂繁琐、可靠性难保证及脚本建模开发效率不高的问题,设计了Apla→MAXScript自动生成系统.通过石头模型案例验证了该生成系统有利于增强模型精细度、提高模型开发效率及保证模型可靠性.脚本建模语言提供了一种不同于图形化的精确建模方式,使用Apla修改器构件能够创建比VRML更复杂多样的精确模型,满足虚拟现实系统的要求,而通过对MAXScript模型操作的封装,极大提高了模型的建模效率,同时借助经过扩充的Apla→C#程序自动生成系统,能够在Unity平台构建完整的虚拟现实系统.

使用Chrome浏览器效果最佳,继续浏览,你可能不会看到最佳的展示效果,

确定继续浏览么?

复制成功,请在其他浏览器进行阅读