UE5 下的 TUIO 简单框架

一、设计目标

  • 将有形用户界面(TUI)与虚幻引擎 5(UE5)结合,设计开发一个框架,将常用操作封装并与有形令牌的行为相关联,最终能够不通过任何代码、蓝图或编辑器内的操作,实现高自由度的三维场景动态搭建与实时漫游。可用于沙盒或预演等情境。

  • 程序分为两个进程,主进程在支持有形交互的触摸屏上运行,承担主要的输入任务;副进程在第二屏幕上运行,承担主要的输出任务。用户可以在两进程中分别导入图片和模型,以更直观地将 GUI 界面与三维场景联系起来。用户不仅可以调整模型的位置、朝向、尺寸,还可以进行调整光线角度、切换日夜环境、调度摄像机等操作。

场景
场景

UI
UI

二、实现方法

  • 该 UE5 程序的开发主要有以下几个重点。

1. UE5 对 TUIO 的支持

  • 在 UE4 的 TUIO 插件的基础上,调整 C++ 代码以适配 UE5 项目。在编写 C++ 插件时需要注意的是,宏定义 WIN32 在一些环境下代表 Windows 32 位操作系统,而在另一些环境下则笼统地代表 Windows 操作系统。这种不一致性导致 UE4 的插件迁移到只支持 64 位的 UE5 时可能发生意料之外的编译错误,应当用代表 Windows 64 位系统的宏定义 _WIN64 来代替。

2. 本地资产的导入

  • Runtime Mesh Loader 插件仅支持“模型+纹理”的导入方式,这使得其实际导入模型一般需要至少两个资产,且无法包含材质、灯光、动画等模型参数,同时也限制了允许导入的资产类型。glTF Runtime 插件仅支持导入 .gltf 和 .glb 格式的模型,这些格式能够同时记录材质、动画等信息,而且主流建模软件如 Blender、3D MAX 等均支持 .gltf 格式的导出,因此该插件能使模型在 UE5 中展现出的视觉效果在更大程度上还原建模软件中设计时的效果。综合考虑,程序使用 glTF Runtime 插件以实现本地资产的即时导入。

  • 上述插件均通过传入文件路径字符串以加载资产。为函数提供文件路径的方式有多种,既可以①将需要加载的资产放入约定的文件夹中,也可以②在程序的配置文件中写好文件路径,还可以③直接将文件路径复制到输入栏中。然而方法①需要移动文件位置,方法②③又太不直观,这些都不方便即时编辑,因此本程序采用 Easy File Dialog 插件,能够呼出资源管理器直接浏览资产的位置,简便直观易于操作,适合即时编辑或修改。

3. 多个进程的同步

  • 程序需要至少两个窗口,即至少两个进程,其中涉及到局域网的联网同步。处理输入的进程需要频繁传递消息给处理输出的进程,而反过来传递消息的需求就小得多。因此将主要处理输入的UI界面定为主进程,在网络中担任服务端;将主要处理输出的场景界面定为副进程,在网络中担任客户端。需要设计哪些信息需要同步,哪些不需要同步,比如在UI界面实例化组件的操作、在场景中导入模型等操作就不需要同步,令牌控制其绑定的模型的位置、对摄像机进行调度等操作就需要同步。

4. 令牌行为设计

  • 在设计开发时,将用户的交互行为拆分成操作层和逻辑层两层,其中操作层仅限于主进程,逻辑层负责沟通主副进程。用户通过对 GUI 的操作,触发各个令牌的逻辑,令牌的作用可能不同,但它们的 GUI 可能相同。因此出于可扩展性和复用性的考虑,GUI 不设计任何逻辑,只处理操作 GUI 的事件,并将操作的结果向上传递至逻辑层,由逻辑层实现不同令牌的功能。例如,设计缩放模型的功能,操作层仅负责将滑动条的数值传递至逻辑层,逻辑层在副进程中将数值的变化转换为模型尺寸的变化。

  • 在既有的 TUIO 预演程序中,“转动令牌以选择”这一操作的实现方法不仅难以复用,而且缺乏灵活性,选项不能动态增减。本程序中,将这一操作同样拆分到两层中,操作层仅负责动态增减选项 GUI,以及将选择结果传递至逻辑层,而选择选项所产生的效果由逻辑层负责实现。将这一操作赋予其他令牌时,不需要更改 GUI,只需重写逻辑即可。

三、用户反馈

  • 在程序开发过程中,采用“设计开发→用户测试→反馈改进”的迭代开发模型。模型强调在开发初期先完成基本功能的设计与实现,然后交由用户进行测试,以获取真实的使用反馈。这种开发方式能够缩短开发周期,同时增强用户体验,使程序在不断完善的过程中更快、更精准地实现目标功能。当前许多功能或特性均于用户反馈后修改得到。

  • 早期版本中,导入场地模型的操作独立于令牌而存在,只能导入一个场地模型,场地只能缩放,无法移动或旋转。用户测试后反馈,场地与器材同样是模型,应给场地模型添加与器材模型同样的令牌控制。改进后不仅复用性更强,还可以进行不同场地间的混合搭建,适用于建筑、舞台等设计中。

  • 设计控制光照的令牌之初,光线角度由 GUI 控制。用户反馈该令牌的位置信息尚未使用,后续便令光线角度由令牌与屏幕中央的连线方向决定。将光源位置与令牌位置对应,符合直觉,而且交互参与感强,比调节 GUI 更加生动。

四、改进方向

  • 使该框架适配 AR 环境是一大改进方向。在 AR 环境中,输出可以不再局限于副进程中,而是与实体交互桌相融合,达到更加符合直觉的效果,实现“所见即所得”。再赋以手势识别、动作捕捉等交互技术后,能够将输入的维度也扩展,激发出更多可能性。

  • 在令牌个数限制下,设计尽可能全面而直观的交互也是改进的重要方向。对于需要复盘的预演等活动来说,录制、导出等功能是必不可少的。令牌间互动的行为设计也有待开发。多个令牌靠近、远离的行为可以赋予符合用户直觉的含义,进一步扩展编辑的自由度。


附:源代码及素材文件