李广松 官泽良 吴吉宏
摘要:文章采用Unity 3D游戏引擎和Vuforia SDK插件,开发完成了一款基于岭南地标建筑的增强现实3D虚拟交互系统。通过3DS MAX构建虚拟的地标建筑模型,应用Photoshop设计地标建筑卡片,使用Vuforia SDK完成卡片识别,实现虚拟环境中模型、动画、语音、文字、特效和多点触控融合交互功能。导出apk文件,并在安卓平台上安装测试。测试结果表明,该系统实现了相关功能。文章为岭南地标建筑的虚拟展示提供了一种增强现实技术方案。
关键词:增强现实;岭南地标建筑;Unity 3D;Vuforia
中图分类号:TP302 文献标志码:A
0 引言
2021年,习近平总书记在福建考察调研时强调,保护好传统街区、保护好古建筑、保护好文物,就是保存了城市的历史和文脉。岭南建筑是岭南文化的物质组成部分,是岭南地域文化的一种现象,同时,岭南建筑也是技术与艺术的综合体,需要满足人们实用和审美的双重需求[1]。元宇宙语境下,岭南的建筑遗产在不断创新活化利用手段的同时,建筑与建筑师之间,也将构建起元宇宙的岭南活态空间新思维[2]。增强现实(Augmented Reality,AR)技术是一种将计算机仿真的虚拟信息经过算法处理后叠加在真实的物理世界之上,增强用户对现实世界的虚拟体验和认知的新技术。以增强现实为主的三维计算技术可以为学习者构建立体化学习场景,增强了学习者的学习临场感和沉浸式学习体验[3]。增强现实技术在工业、医疗、军事、旅游文化[4-5]和教育等多个领域均有应用,但该技术在地标建筑虚拟展示方面却少有涉猎。
本文使用AR技术进行岭南地标建筑的虚拟交互系统开发。系统采用Unity 3D引擎和Vuforia插件为开发平台,以6个岭南地标建筑为例,阐述了AR产品的开发流程,并具体分析了开发中使用到的关键技术。系统采用的多功能融合开发为建筑类传统文化的虚拟传承提供了一种AR技术方案。
1 系统架构
Unity是由Unity Technologies开发的专业游戏引擎。开发者使用其图形化编辑器可以创建三维虚拟现实交互环境。系统通过使用C#编写交互脚本,提供沉浸式和实时交互反馈。Vuforia是一个增强现实引擎,是针对移动设备的增强现实软件开发工具包。本文采用Unity 3D 2019.4版本和Vuforia 8.5版本进行开发。
系统使用地标建筑卡片作为识别对象,借助移动设备外置摄像头进行识别,并返回识别结果。Unity根据Vuforia返回的识别结果实现逻辑功能。系统把虚拟环境中的模型、动画、语音、文字和特效叠加在现实世界中,并通过单点或多点触控进行交互设计架构,如图1所示。
2 设计流程
本系统主要针对Android平台进行设计,设计流程如图2所示。Unity平台打包发布为.apk格式的安装包,并在移动平台上运行。系统首先在Unity 3D中通过Package Manager导入Vuforia SDK插件,然后在Vuforia官网通过注册获取许可密钥和创建数据库,并上传岭南地标建筑识别图,最后下载Unity Package资源包,并导入Unity项目。在Unity中,开发者配置Vuforia SDK环境和编写脚本,实现对模型、UI、动画、语音、文字和特效展示效果的控制。最后进行调试、打包和移动平台测试。
3 项目搭建
3.1 配置Unity项目
系统使用UnityHub 3.2工具并以3D模板创建
Unity工程。工程打开后,首先把File->Build Settings->Platform窗口的发布平台设置为Android。接着打开Edit->Preferences->External Tools窗口,检查并安装JDK,Android SDK,Android NDK3个配置项。最后安装Gradle工具。
3.2 识别图与模型
Vuforia是针对识别对象的自然特征点进行检测匹配,其实时检测的地标建筑卡片的特征点跟Vuforia数据库中的模板图片的特征点一致时才能识别成功。为提高Vuforia识别时的准确性,系统地标识别图的设计采用了良好的对比度、较明显的特征和丰富的细节的图形。识别图的文件类型为JPG或PNG,文件格式为8位灰度或24位RGB,文件大小不超过2 M。项目中使用Photoshop制作的识别图(见图3)。
在地标建筑模型构建中,项目使用了3DS MAX软件的Extrule,Mirror,Bevel,Loft,Edit Spline命令。比如在“肇庆古城墙”的建模中,横梁、柱基等就较多地使用了Extrule,Edit Spline命令。为了减少模型面数和保证运行流畅度,项目在建模过程中,避免使用NURMS强制细分命令和涡轮平滑命令,同时使用纹理映射以提高模型逼真程度。
3.3 Vuforia项目构建
Vuforia许可密钥的获取首先需要在Vuforia官网注册账号并登录,然后选择Develop菜单和License Manager标签,再通过Get Basic按钮创建License Name,最后选择并获取许可密钥License Key。Vuforia资源包的获取需要选择Target Manager標签,并通过Add Database按钮创建Device类型的Database,再选择Add Target按钮上传识别对象并下载资源包。Unity项目先通过Package Manager导入Vuforia SDK插件,在Resources/VuforiaConfiguration文件的属性窗口中找到App License Key,再添加Vuforia的许可密钥License Key。最后,项目导入Vuforia的数据资源包。将场景中的摄像头替换为AR摄像头,项目完成Vuforia配置。
4 系统功能实现
4.1 识别对象和播放特效
在Hierarchy面板中,工程添加图片识别对象ImageTarget,并在其属性窗口中配置对应的Vuforia数据库以及识别图。程序运行时,如果移动设备的摄像头成功捕获到识别图或者可识别对象状态发生变化,会通知TrackableBehaviour组件中的所有监听者。在Unity编辑器中,先创建新脚本继承并实现Itrackable EventHandler接口,然后获取识别对象ImageTarget身上需要绑定的TrackableBehaviour组件。当对识别对象识别状态发生变化时,TrackableBehaviour的Register TrackableEventHandler注册的所有监听者会通知OnTrackableStateChanged函数。识别流程代码如下:
if(Status == DETECTED‖TRACKED‖EXTENDED_TRACKED)//识别成功
{
Instantiate(target);//实例化模型,自动调用target上的Awake函数
target.transform.SetParent(this);//模型置为ImageTarget子物体
GetComponentInChildren
}
Awake()
{
AdSource.clip = AdClips[0];//添加特效的聲音片段
AdSource.Play();//播放音效
GameObject effect = Instantiate(effectPrefab);//播放特效
effect.transform.SetParent(this.transform);//特效对象置为模型子物体
Destroy(effect,2f);//特效播放2秒后销毁
}
4.2 模型旋转与缩放
系统通过Unity内置输入系统接口实现手指交互,并操控模型的缩放与旋转。Unity中Touch类用来记录一个手指触摸在屏幕上的状态与位置的相关数据,用来完成对有触摸屏的设备进行交互逻辑实现。其通过Input类的touchSupported与multiTouch Enable的值判断机型差异,并能在不具备触摸功能或多指触摸功能时关闭旋转或缩放模型功能。单指触摸屏幕且进行左右滑动时,系统根据滑动距离旋转模型。双指触摸且移动时,其根据双指移动后的距离与刚接触屏幕时的距离之间的差值进行判断,如果差值大于0,则距离变大和模型放大,否则缩小。实现代码如下:
//如果当前接触屏幕手指数为1,且手指编号0,当前帧的状态为移动状态。
if(Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Moved)
{
transform.Rotate(transform.up * (Input.GetTouch(0).deltaPosition.x / 1920)*
rotateSpeed);//根据当前手指滑动距离和方向进行旋转模型。
}
//如果当前接触屏幕手指数为2,且任意一个手指的状态为移动状态。
else if (Input.touchCount == 2 && (Input.GetTouch(0).phase == TouchPhase.Moved ‖ Input.GetTouch(1).phase == TouchPhase.Moved))
{
//计算手指间原始距离
float preDistance=
Vector2.Distance(Input.GetTouch(0).rawPosition,Input.GetTouch(1).rawPosition);
//计算手指间当前距离
float curDistance=
Vector2.Distance(Input.GetTouch(0).position,Input.GetTouch(1).position);
curDistance -= preDistance // 计算偏移距离
curDistance /= 720;//根据屏幕分辨率控制偏移距离
//进行等比缩放
transform.localScale=
Vector3.one * Mathf.Clamp(originalScale.x + curDistance * scaleSpeed,minScale,
maxScale);
}
4.3 虚拟按钮交互
用户在虚拟场景进行交互时,虚拟按钮通过遮挡模型图形模拟触摸按钮的效果。虚拟按钮的设置需要选中场景中的识别对象,在属性面板中展开Image Target Behaviour组件的Advanced属性,点击Add Virtual Button。在场景中,选中虚拟按钮对象可以对其位置信息进行调整,在其组件Virtual Button Behaviour上可以设置按钮名称与触摸识别的灵敏度。在自定义脚本中,项目通过Virtual Button Behaviour组件类中的RegisterEventHandler函数注册事件,并通过虚拟按钮的名称对按钮事件进行响应。
//注册事件
VirtualButtonBehaviour[] vbs = GetComponentsInChildren
for (int i = 0;i < vbs.Length;++i)
{
vbs[i].RegisterEventHandler(this);
}
//虚拟按钮事件
public void OnButtonPressed(VirtualButtonBehaviour vb)
{
switch (vb.VirtualButtonName)
{
case "Rot":
OnRotButtonClick();break;//模型旋转控制
case "Des":
desPanel.SetActive(true);break;//显示模型文本和语音面板
case "Ani":
OnAniButtonClick();break;//模型动画控制
}
}
4.4 建筑展示与动画
系统以建筑展示为目的,通过分离模型部件的形式进行部件介绍和细节展示。当点击虚拟按钮展开建筑细节时,系统就会触发交互逻辑,并获取对应模型上的Animator组件。Animator是Unity 3D的动画状态机,是把Animation动画片段进行统一管理和逻辑状态管理的组件,系统通过Animator组件进行图形化状态管理。当虚拟按钮触发动画播放逻辑时,系统展开动画,并对展开完毕时的状态进行定格,展开完毕时的动画效果如图4所示。
5 导出与测试
5.1 导出设置
系統导出apk时需要进行设置,设置内容是Project Settings->Player中的Company Name,Product Name与Minimum API Level3项。为避免许多系统层面上的问题,Minimum API Level设置项需要适当提高。本文建议先进行空项目空场景导出,以避免项目复杂后影响报错判断。
5.2 调试和测试
调试需要启用ADB调试功能。首先在Build Settings->Android中勾选Development Build和Script Debugging,并在移动设备中开启USB调试功能,然后通过数据线连接开发设备端以及移动设备,最后重新打包并运行App,Unity会输出调试信息。
Unity调试没错后,导出apk,并复制到移动设备上安装并运行。程序运行时,将摄像头聚焦到识别图上,如果未识别到,说明识别图可能质量低,应重新制作。如果模型显示正常,对交互功能进行测试,主要测试手指触摸旋转、缩放等操作。UI测试主要测试在不同手机分辨率下UI是否会拉伸和位置偏移等。UI测试需要多机型支持,系统采用主流的基于安卓系统手机品牌,包括华为、荣耀、小米和Vivo,使用Vivo进行测试的效果如图5所示。
5.3 测试结果分析
系统经过打包并在手机端进行安装测试,对扫描地标建筑识别图完成后出现的模型进行交互操作,实现了动画、语音、文字、特效和多点触控功能。测试结果为:扫描对应的6张识别图,识别图的识别率为100%,模型显示正确率为100%,识别成功时模型出现时间小于0.1 s,实现了真实世界和虚拟世界的实时交互融合以及虚拟物体和真实物体的精确3D配准。经反复测试,该系统功能稳定,人机交互流畅,达到了较好的增强实境效果。
6 结语
系统采用C#语言,通过Unity 3D 2019.4引擎和高通Vuforia 8.5插件进行开发,并设计了地标建筑识别图,实现了在虚拟场景中对地标建筑模型进行交互的功能。系统通过实例化模型时调用模型上的Awake函数,实现语音和特效播放,通过虚拟按钮实 现虚拟场景和UI交互,通过Animator对Animation动画片段进行逻辑状态管理,并在基于安卓系统的多个手机品牌下测试成功。由于模型和贴图制作精细,存在的问题是导出的apk文件偏大,接下来的研究重点是apk的瘦身,研究的方向是编译日志、冗余资源和AssetBundle打包等。
参考文献
[1]陈诗祺.地域文化影响下岭南建筑“怪而实用”的特征研究[D].广州:华南理工大学,2020.
[2]唐培峰.岭南建筑或在元宇宙中永久存档[N].广东建设报,2022-05-30(008).
[3]张国云,杨文正,赵梅.“技术赋能学习”视域下新兴技术在教育APP中的应用前瞻分析[J].中国电化教育,2018(10):107-117.
[4]梁红昕.基于增强现实技术的粤西文化旅游体验平台设计研究[J].家具与室内装饰,2020(8):86-87.
[5]张正柱,罗成立.基于Vuforia引擎的船政文化AR文创产品设计[J].宁夏大学学报(自然科学版),2022(1):121-124.
(编辑 何 琳)
Design of Lingnan landmark building interaction system based on AR technology
Li Guangsong, Guan Zeliang, Wu Jihong
(Guangdong Polytechnic, Foshan 528041, China)
Abstract: This article uses the Unity 3D game engine and Vuforia SDK plug-in to develop an augmented reality 3D virtual interaction system based on Lingnan landmark buildings. Build a virtual landmark building model through 3DS MAX, use Photoshop to design landmark building cards, use Vuforia SDK to complete card recognition, and realize the interactive functions of model, animation, voice, text, special effects and multi-touch integration in the virtual environment. Export the apk file and install the test on the Android platform. The test results show that the system has achieved relevant functions. This article provides an augmented reality technology solution for the virtual display of Lingnan landmark buildings.
Key words: augmented reality; Lingnan landmark building; Unity 3D;Vuforia