堀内贵文

供儿童制作交互物件原型的 VR 系统

概述

Smart Codesign VR 是一个在虚拟现实中搭建并测试交互式“智能物件”的原型平台。玩家从环境、输入和输出中各选一张卡片,再通过身体动作定义物件何时响应、如何响应。完成的虚拟物件可以放进公园,测试它的行为。

项目以米兰理工大学 i3Lab 开发的桌游 SNaP(The Smart Nature Protagonists)为基础。在 SNaP 中,孩子们组合卡片来构思智能物件,并用一句话把它写在纸上。本项目希望把这些文字描述转化为虚拟物件,让孩子们通过自己的动作组装它们并与之互动。

我们的四人团队为米兰理工大学 2020–21 学年 Advanced User Interfaces 课程的期末项目设计并实现了这一系统。预期使用者为 11 至 13 岁儿童,尤其关注有神经发育障碍(NDD)的儿童。原型面向 Oculus Quest 2,以 Unity 和 C# 开发,支持从卡片选择到虚拟公园中交互的完整流程。

演示视频。从选择卡片、决定输入条件与输出行为,到把做好的智能物件放到虚拟公园中运行的整个流程。

SNaP这款桌游,以及设计的前提

让孩子成为设计主角的游戏

在 SNaP 中,2 至 4 名儿童扮演“设计师”,一名成年主持人扮演“市长”。市长提出任务,孩子们讨论想法、组合卡片,设计能回应任务的智能物件。游戏旨在培养创造力、协作能力和表达想法的能力,也考虑了有神经发育障碍的儿童的使用需求。不过,本项目没有评估治疗或教育效果。

环境、输入、输出——三种卡片

SNaP的卡片有三种,各自承担不同的角色。

环境(Environment)卡表示将被赋予智能的物件:树、长椅、秋千、水域、石头、路灯、垃圾桶、自行车、桥、台阶或书包。这些都是公园和街道中常见的物件或设施。环境卡决定了由哪个物件承载输入与输出功能。

输入(Input)卡定义物件检测什么,或对什么作出响应,例如按钮、动作、接触、距离、温度、湿度、亮度、颜色、声音、火、水位或天气预报。它们表示智能物件的输入功能,作用类似于传感器。

输出(Output)卡定义物件如何响应,例如发光、发声、振动、移动、显示、记录或发送信息。它们表示物件的输出功能,作用类似于执行器。

环境卡为一组输入与输出提供具体情境。例如,输入为动作、输出为声音时,垃圾桶可以在垃圾未投中时发声,路灯则可以提示有人靠近。输入与输出定义设备如何响应,而环境卡把这种行为与日常生活中的情境联系起来。

环境卡「Trash can(垃圾桶)」、输入卡「Motion(动作)」、输出卡「Make sound(发出声音)」三张以「&」相连,箭头指向一句话「Missing the trash bin creates a sound.(没扔进垃圾桶就会响)」。
三张卡片的组合,构成一个智能物件的说明文。卡框的颜色表示种类:绿色为环境,浅蓝为输入,黄色为输出。
把SNaP的49张卡片排开的一览表。上两行是20张绿框环境卡,中间两行与最下一行的左端是21张浅蓝框输入卡,最下一行的其余部分是8张黄框输出卡。
完整的 49 张 SNaP 卡片:20 张环境卡、21 张输入卡、8 张输出卡。它们可能形成的组合,界定了游戏的设计空间。

将文字构想转化为可交互的虚拟物件

此前,SNaP的每一场活动都在把构思出的智能物件写成一句话时结束。在i3Lab,还并行开发着把它实际搭建出来的「实体板」,把平板与Arduino结合起来。Smart Codesign VR是对同一个问题的另一个回答,选择了VR作为媒介——这是研究团队当时还没有尝试过的方向。

VR 带来了两种可能。首先,孩子们可以通过全身动作制作原型:抓取、搬运、照光和用画笔涂抹,都可以成为设定条件与定义行为的方式。其次,想法可以呈现为可见的虚拟物件,并立即与之互动。纸上的描述由此变成了眼前具有大小与形状的物件。

为谁而设计

预期使用者为 11 至 13 岁的儿童,尤其关注有神经发育障碍的儿童。设计智能物件需要一定的逻辑推理能力,因此 SNaP 及其 VR 版本都面向这一年龄段。

项目希望通过动手制作原型与交互,帮助孩子表达想法。这些是设计目标,并非已经证实的治疗或教育效果;原型尚未经过儿童用户评估。

对空间本身的考量

根据项目参考的资料,我们从四个方面指导空间设计:声音、光与颜色、空间组织,以及材料。声音方面考虑了隔离噪声、调节音量,以及安静、稳定的音频,以照顾听觉敏感的使用者。光与颜色方面考虑以平静的低饱和色为背景,将明亮、高饱和色限制在小范围内。清晰的空间边界、有序的布局、简单易辨的形态,以及顺畅的通行空间,也都是设计考量。虚拟环境允许设计者控制这些因素,但本项目未评估它们对使用者舒适度的影响。

VR这一媒介本身带有的限制

项目也考虑了 VR 的限制与风险:硬件成本、晕动不适、头显重量给头颈带来的负担、设备遮挡现实环境可能导致的意外、长时间使用造成的眼疲劳,以及过度沉浸带来的依赖方面的担忧。

这些考量形成了三项设计决定:保持交互简单,同时提供足以支持学习的挑战;让视听信息清晰,避免过度刺激;为体验设置明确终点。完成原型制作与公园中的测试后,活动即结束,而非鼓励使用者无限期地停留在 VR 中。


原型:体验流程与实现

体验的四个场景

应用由四个场景构成:待机画面、卡片选择、原型制作,以及在公园中的操作。

1. 待机画面

应用启动后先显示标题画面,等待玩家按下手柄按钮再继续。这一有意设置的停顿,让玩家有时间戴好头显、调整姿势,再进入主要体验。

2. 卡片选择——抓起来,放进箱子

在下一个场景中,从环境、输入、输出各选一张卡片。选择的方式,是抓起代表卡片的物体,搬到对应的箱子里放进去。之所以不用点击而用「抓取并搬运」,是为了利用VR所拥有的三维空间。当检测到三个箱子都有了内容,就会伴随语音提示进入原型制作场景。顺序不限,但三个不填满就无法继续。

VR空间中的卡片选择界面。排列着卡片的展板前方并排放着三个写有input、environment、output的半透明箱子,一只手正抓着扩音器形状的物体。
卡片选择的场景。前方的三个箱子分别对应环境、输入、输出,把抓起的物体放进去即确定选择。在这一阶段无法使用的卡片会以淡色显示。

3. 原型制作——用身体决定条件与行为

这里是整个系统的核心。针对选中的输入卡定义「在什么时候」,针对输出卡定义「做什么」。操作方式按卡片分别制作,并且分配了唯有六自由度追踪才能实现的动作。

例如,输入选择「天气预报」时,手边会出现分别代表晴、阴、雨、雷、雪的物体。抓起其中之一,把从它延伸出的光线对准目标物体,条件即告确定。输出选择「发光」时,则抓起画笔,把笔尖浸入各色颜料罐,再涂抹到对象上,以此决定发光的颜色。想擦掉涂上的颜色时,把笔浸入「水」罐再涂一次即可。

在实现上意义重大的一点,是让输入与输出的组合可以并列定义多组。最初的计划只有一组,「晴天就发红光」便到此为止。改为多组之后,一个物件就能对多种情形作出不同的回应,比如「晴天红、下雨蓝、下雪白」。定义好的组在确定之前可以实际运行试一试,不满意还能退回去修改。

原型制作界面。左侧是输入卡「Weather」的操作说明面板,中央是写着「When it is about to be sunny/rain/snow」的三个对话框,右侧排着输出的对话框,前方有树的物体和颜料罐。 同一画面从右侧看去。在涂成黄色的路灯物体左右,输入与输出的对话框成对排列,最右端是输出卡「Light up」的操作说明面板。
2021 年原型的截图(英语界面)。带编号的对话框将输入条件与输出行为配对。“+”按钮增加一组,“−”按钮删除一组。输入面板写有“Maximum number of instances: 5”(最大实例数:5)。

4. 公园:测试物件

确定物件之后,便移动到虚拟公园。在这里放下自己组装的智能物件,触发所定义的输入条件,实际确认输出的行为。物件成功动作之后,会出现庆祝的演出,体验就此结束。

整体流程

把以上内容整理成UML活动图,即下图所示。上段是整体流程,下段两幅分别把「天气预报」卡与「发光」卡的操作细致展开。选卡之后经指示可以退回重选,确定并试运行之后可以返回重新编辑,这些都各自写成了分支。

UML活动图。上段的「Overall Activity」展示了从待机画面、选择三张卡片、接受指示、定义输入条件与输出行为、确定、确认动作,直到在公园中操作的全过程。下段左侧展开天气预报卡的操作,下段右侧展开发光卡的操作。
表示使用者行为的UML活动图。由于每种卡片的操作各不相同,共通流程与各卡片的细节被分开来写。

设备与工具

原型面向 Oculus Quest 2 开发。其六自由度追踪支持转身、移动和操控虚拟物件。由于反复动手交互是体验的核心,团队没有采用仅支持三自由度追踪的手机式头显。

游戏引擎为Unity,语言为C#;与Quest 2的连接使用Oculus Integration包,VR摄像机的行为、渲染与手柄输入的通用API都来自于它。

四个场景与13个类

系统按Unity的场景分为四个,正好对应体验的四个场景。类共13个,其中3个是抽象类。

标题场景只有TitleSceneCore,按下按钮即切换到下一场景。

卡片选择场景使用 CardSelectionSceneCore 和 CardSelectionDetector。CardSelectionSceneCore 创建三个 CardSelectionDetector 实例,分别对应环境、输入和输出选择箱。每个箱子会吸入附近的卡片物件,并将相应类别标记为已选择。三项选择完成后,场景将结果写入静态类 SmartObject,再切换到下一场景。SmartObject 在场景切换时保留这些数据,使四个场景构成连续的体验。

原型制作场景是核心。PrototypingSceneCore集中管理整个流程,卡片的行为则用以Card为顶点的继承层次来表示。Card之下是InputCard与OutputCard,再往下则排列着Weather、Fire、MakeSound、LightUp等具体卡片的类。真正承担原型制作操作的只有末端的具体类,因此上面这三个都做成了抽象类。

PrototypingSceneCore 分别维护输入条件实例列表和输出行为实例列表。如果选中“天气预报”和“发光”卡片,两个列表中分别保存 Weather 和 LightUp 实例。开始时各创建一个实例,之后每按一次添加按钮,就新增一对实例。系统每帧评估输入条件,并调用对应的输出行为。用户确认物件后,isConfirmed 被设为 true,组装好的行为数据会写入 SmartObject 的静态属性。

交互场景只包含 InteractionSceneCore 一个类,负责在公园中放置物件、测试已定义的条件与响应,以及最后的庆祝效果。

UML类图。画出了Title Scene、Card Selection Scene、Prototyping Scene、Interaction Scene四个包,以及它们所引用的静态类Smart Object。在Prototyping Scene内,抽象类Card之下有Input Card与Output Card,再由Weather Card、Fire Card、Make Sound Card、Light Up Card继承。
系统的 UML 类图。四个包分别对应 Unity 场景。下方中央标为“Smart Object”的静态类负责在场景切换时保留数据。为便于阅读,图中属性与方法做了简化。

成果与待完成的工作

已实现 49 张卡片中的 9 张

原型实现了 9 张卡片。核心功能已经能够运行:选择卡片、定义条件与行为、管理多个实例,以及在场景间传递数据。这为增加更多卡片提供了基础,但相关实现仍待完成。此外,6 张卡片已设计但未实现;其余 34 张还需要完成交互设计与实现。

原型中的实现状况
状态卡片
已实现(9张)环境:树、路灯、道路标志、垃圾桶、桥
输入:火、天气预报
输出:发出声音、发光
仅完成设计(6张)输入:按钮、速度、声音
输出:移动、振动、发送
尚未着手(34张)环境卡15张、输入卡16张、输出卡3张(显示、启动、记录)

尚未开展用户评估

原型尚未经过用户评估。开发期间正值 COVID-19 疫情,团队以远程方式参与,既未能组织使用 VR 头显的线下工作坊,也未能安排远程替代方案。项目证明了所设计的体验能够实现为可运行原型,但儿童使用时的可用性,以及它在治疗场景中的价值,仍未经过检验。

未来评估将考察界面是否便于直观地制作原型。可能采用的指标包括完成时间、最终智能物件与参与者初始想法的吻合程度,以及误按按钮的次数。活动结束后,可用基于系统可用性量表(SUS)的问卷补充量化数据。后续评估也可在取得同意、遵循适当程序的前提下,录制活动以观察参与者的动作。2021 年项目曾将评估年龄设想为 13 岁,以兼顾 SNaP 的目标年龄与当时参考的 Oculus 指引。未来研究需要依据适用指引和研究方案,重新确定参与资格。

再往前的工作

进一步开发的首要任务是完善界面与使用体验。由于时间和经验有限,大部分精力投入了卡片组合功能,视觉、听觉与触觉设计仍不够完善。VR 中的文字使用也需要重新考虑:原本针对平面设计的信息,可能更适合通过空间用户界面(SUI)呈现。针对预期使用者,语音交互也是值得探索的方向。

项目提出了三个研究方向。第一,与 i3Lab 正在开发的实体板进行比较。既有研究报告称,参与者在虚拟环境中玩同一款协作游戏时,对话多于在实体环境中;这为比较两个平台提供了研究思路。第二,支持多名用户同时参与,让儿童能够像“Codesign”这一名称所表达的那样,在 VR 中共同搭建物件。第三,建立描述智能物件的标准化格式,使设计可以在不同平台之间迁移。

小结

本项目创建了制作智能物件原型的环境,将 SNaP 的三类卡片转化为组装单元:物件、触发条件和行为。玩家通过抓取、指向和涂抹把它们联系起来。这个可运行原型将文字构想转化为可交互的虚拟物件,其行为以数据形式表达,并可在场景间传递。

Takafumi Horiuchi, Paul Cozma-Ivan, Elmira Katsajeva, and Olivia Ludkiewicz,“Design and Implementation of a Smart Object Prototyping Platform in Virtual Reality for Children with NDD,” Advanced User Interfaces (A.Y. 2020–21) Final Exam Project,米兰理工大学,2021年2月。