配色: 字号:
虚幻触觉:虚幻引擎中用于高保真触觉渲染的插件系统 20221216
2022-12-26 | 阅:  转:  |  分享 
  
虚 幻 触 觉 : 虚 幻 引 擎 中 用 于 高 保 真 触 觉 渲 染 的 插 件 系 统原 作 Marc O. R del, Johannes Ganser, Rene Weller , and Gabriel Zachmann翻 译 方 建 勇我 们 介 绍 了 虚 幻 触 觉 , 这 是 一 组 新 颖 的 插 件 , 可 在 虚 幻 引 擎 4 中 实 现3 自 由 度 和 6 自 由 度 触 觉 渲 染 。 其 核 心 是 集 成 了 最 先 进 的 碰 撞 检 测 库 ,支 持 非 常 快 速 和 稳 定 的 力 和 扭 矩 计 算 , 以 及 用 于 与 不 同 触 觉 硬 件 设 备通 信 的 通 用 触 觉 库 。 我 们 的 模 块 化 和 轻 量 级 架 构 使 其 他 研 究 人 员 能 够轻 松 地 根 据 自 己 的 需 求 调 整 我 们 的 插 件 。 作 为 一 个 用 例 , 我 们 已 经 在

一 个 新 的 非 对 称 协 作 多 人 游 戏 中 测 试 了 我 们 的 插 件 , 该 游 戏 面 向 盲 人和 盲 人 。 结 果 表 明 , 即 使 在 复 杂 场 景 中 , 我 们 的 插 件 也 很 容 易 满 足 触觉 渲 染 的 要 求 。1 引 言随 着 Oculus Rift 或 HTC 等 多 种 消 费 设 备 的 兴 起 , 虚 拟 现 实 ( VR) 领域 的 兴 趣 和 发 展 有 了 很 大 的 增 长 。 这 些 设 备 的 新 显 示 和 跟 踪 技 术 实 现了 高 清 晰 度 的 图 形 渲 染 和 与 虚 拟 环 境 的 自 然 交 互 。 像 Unreal 或 Unity

这 样 的 现 代 游 戏 引 擎 极 大 地 简 化 了 VR 应 用 程 序 的 开 发 。 他 们 几 乎 在内 容 创 建 过 程 中 隐 藏 了 技 术 背 景 , 所 以 今 天 , 每 个 人 都 可 以 在 几 分 钟内 点 击 进 入 自 己 的 VR 应 用 程 序 。 然 而 , 消 费 类 VR 设 备 主 要 专 注 于向 两 种 主 要 的 人 类 感 官 输 出 信 息 : 视 觉 和 听 觉 。 此 外 , 游 戏 引 擎 主 要

限 于 视 觉 和 音 频 输 出 。 触 摸 感 被 广 泛 忽 视 。 这 种 触 觉 反 馈 的 缺 乏 会 严重 干 扰 虚 拟 环 境 中 的 沉 浸 感 。 此 外 , 专 注 于 视 觉 反 馈 将 大 量 人 排 除 在游 戏 引 擎 创 建 的 内 容 之 外 : 那 些 看 不 到 这 些 内 容 的 人 , 即 盲 人 和 视 力受 损 的 人 。在 游 戏 环 境 中 , 触 摸 感 被 广 泛 忽 视 的 主 要 原 因 是 触 觉 设 备 仍 然 相 对 笨重 和 昂 贵 。 此 外 , 触 觉 渲 染 在 计 算 和 算 法 上 非 常 具 有 挑 战 性 。 尽 管 许多 游 戏 引 擎 都 有 内 置 的 物 理 引 擎 , 但 它 们 通 常 仅 限 于 简 单 的 凸 面 形 状 ,而 且 速 度 相 对 较 慢 : 对 于 视 觉 渲 染 循 环 , 每 秒 60– 120 帧 ( FPS) 的

速 度 足 以 保 证 流 畅 的 视 觉 反 馈 。 我 们 的 触 觉 对 时 间 分 辨 率 更 敏 感 。 这里 , 需 要 优 选 1000Hz 的 频 率 来 提 供 可 接 受 的 力 反 馈 。 触 觉 渲 染 的 这一 要 求 要 求 将 基 于 物 理 的 模 拟 与 视 觉 渲 染 路 径 解 耦 。在 本 文 中 , 我 们 提 出 了 虚 幻 触 觉 , 以 实 现 现 代 游 戏 引 擎 中 的 高 清 晰 度触 觉 渲 染 。 按 照 将 模 拟 部 分 与 核 心 游 戏 引 擎 分 离 的 想 法 , UnrealHaptics由 三 个 单 独 的 插 件 组 成 :– 我 们 称 之 为 Haptico 的 插 件 : 它 实 现 了 与 触 觉 硬 件 的 通 信 。

– 基 于 物 理 的 模 拟 过 程 中 的 计 算 瓶 颈 是 碰 撞 检 测 。 我 们 的 名 为 Collette的 插 件 构 建 了 一 个 到 外 部 碰 撞 检 测 库 的 桥 梁 , 该 库 对 于 触 觉 渲 染 来 说足 够 快 。

– 最 后 , FForceComp 根 据 碰 撞 信 息 计 算 适 当 的 力 和 扭 矩 。虚 幻 触 觉 的 这 种 模 块 化 结 构 允 许 其 他 研 究 人 员 轻 松 更 换 单 个 部 件 , 例如 力 计 算 或 碰 撞 检 测 , 以 满 足 他 们 的 个 人 需 求 。 我 们 已 经 将 虚 幻 触 觉集 成 到 虚 幻 引 擎 4( UE4) 中 。 我 们 使 用 一 个 快 速 、 轻 量 级 、 高 度 可维 护 和 可 调 整 的 事 件 系 统 来 处 理 虚 幻 触 觉 中 的 通 信 。作 为 一 个 用 例 , 我 们 为 视 力 正 常 和 失 明 的 玩 家 提 供 了 一 个 新 颖 的 非 对称 协 作 多 人 游 戏 。 在 我 们 的 实 现 中 , Haptico 集 成 了 CHAI3D 库 , 为

各 种 可 用 的 触 觉 设 备 提 供 支 持 。 对 于 碰 撞 检 测 , 我 们 使 用 最 先 进 的 碰撞 检 测 库 CollDet, 该 库 支 持 以 触 觉 速 率 进 行 与 复 杂 度 无 关 的 体 积 碰撞 检 测 。 我 们 的 力 计 算 依 赖 于 基 于 惩 罚 的 方 法 , 包 括 3 和 6 自 由 度( DOF) 力 和 扭 矩 计 算 。 我 们 的 结 果 表 明 , 虚 幻 触 觉 能 够 以 触 觉 速 率计 算 虚 幻 中 不 同 的 3 自 由 度 和 6 自 由 度 设 备 的 稳 定 力 和 扭 矩 。2 相 关 工 作游 戏 引 擎 使 高 端 图 形 的 快 速 开 发 成 为 可 能 , 并 使 VR 易 于 扩 展 到 广 大

开 发 者 。 因 此 , 在 设 计 要 求 苛 刻 的 3D 虚 拟 环 境 时 , 它 们 通 常 是 首 选 。显 然 , 这 也 适 用 于 触 觉 应 用 。 因 此 , 存 在 许 多 已 经 将 触 觉 集 成 到 此 类游 戏 引 擎 中 的 ( 研 究 ) 项 目 。 然 而 , 他 们 通 常 花 了 很 多 时 间 来 开 发 单

一 用 途 方 法 , 这 些 方 法 很 难 推 广 , 因 此 不 适 用 于 其 他 程 序 。实 际 上 , 只 有 极 少 数 的 方 法 可 以 为 将 触 觉 集 成 到 现 代 游 戏 引 擎 中 提 供舒 适 的 界 面 。 我 们 只 发 现 为 UE4 提 供 了 插 件 , 这 些 插 件 通 过OpenHaptics 库 作 为 3D Systems Touch( 以 前 的 SensAble PHANToMOmni) 的 接 口 。 OpenHaptics 是 一 个 专 用 于 3D 系 统 设 备 的 专 有 库 ,这 意 味 着 其 他 设 备 不 能 与 这 些 插 件 一 起 使 用 。 此 外 , 这 些 插 件 没 有 得到 积 极 维 护 , 似 乎 无 法 与 UE4 的 当 前 版 本 ( 编 写 时 为 4.18 版 本 ) 一起 工 作 。 另 一 个 例 子 是 的 PHANToM 设 备 的 插 件 , 也 是 基 于

OpenHaptics 库 。 与 其 他 插 件 一 样 , 它 不 再 被 维 护 , 甚 至 从 Unity 的 资产 存 储 中 删 除 。 在 我 们 的 研 究 中 , 我 们 找 不 到 任 何 支 持 3 或 6 自 由 度力 反 馈 的 常 用 游 戏 引 擎 的 主 动 维 护 插 件 。在 游 戏 引 擎 的 环 境 之 外 , 有 许 多 库 为 触 觉 设 备 提 供 力 计 算 。 一 个 例 子是 CHAI3D 库 , 它 是 一 个 用 C++编 写 的 开 源 库 , 支 持 不 同 供 应 商 提供 的 各 种 设 备 。 它 为 所 有 设 备 提 供 了 一 个 通 用 接 口 , 可 扩 展 以 实 现 自定 义 设 备 支 持 。 对 于 其 触 觉 渲 染 , CHAI3D 通 过 使 用 轴 对 齐 边 界 框( AABB) 层 次 结 构 来 加 速 与 网 格 对 象 的 碰 撞 检 测 。 力 渲 染 基 于 finger

代 理 算 法 。 设 备 位 置 由 试 图 跟 踪 设 备 位 置 的 第 二 虚 拟 位 置 来 代 理 。 当设 备 位 置 进 入 网 格 时 , 代 理 将 停 留 在 网 格 曲 面 上 。 代 理 尝 试 通 过 沿 曲面 滑 动 来 最 小 化 到 设 备 位 置 的 距 离 。 最 后 , 通 过 在 两 点 之 间 施 加 弹 簧力 来 计 算 力 。 由 于 该 方 法 的 简 单 性 , 它 只 返 回 3 自 由 度 力 反 馈 , 即 使

该 库 通 常 也 允 许 将 扭 矩 和 握 力 传 递 给 设 备 。 尽 管 如 此 , 我 们 在 用 例 中使 用 CHAI3D, 但 仅 用 于 与 触 觉 设 备 的 通 信 。H3DAPI 库 是 一 个 类 似 的 稍 老 的 库 。 与 CHAI3D 相 同 , 它 在 设 备 和 算法 领 域 都 是 可 扩 展 的 。 然 而 , 默 认 情 况 下 , H3DAPI 支 持 更 少 的 设 备 ,并 且 同 样 不 提 供 6-DOF 力 反 馈 。Ru ffe aldi 等 人 提 出 了 一 个 以 网 络 开 发 为 重 点 的 通 用 触 觉 工 具 包 。 它基 于 eXtreme 虚 拟 现 实 ( XVR) 引 擎 , 利 用 CHAI3D 库 , 以 实 现 独 立

于 特 定 触 觉 界 面 的 快 速 应 用 程 序 开 发 。 不 幸 的 是 , 自 从 他 们 的 主 页 关闭 后 , 工 具 包 还 没 有 进 一 步 开 发 , 也 没 有 找 到 任 何 文 档 。上 述 所 有 方 法 都 限 于 3 自 由 度 触 觉 渲 染 。 Sagardia 等 人 提 出 了 子 弹 物理 引 擎 的 扩 展 , 以 实 现 更 快 的 碰 撞 检 测 和 力 计 算 。 他 们 的 算 法 基 于VoxmapPointshell 算 法 。 对 象 在 voxmap 中 进 行 编 码 , voxmap 存 储 到对 象 最 近 点 的 距 离 以 及 对 象 表 面 上 的 点 壳 , 这 些 点 壳 被 聚 集 以 生 成 最佳 包 裹 的 球 体 树 。 然 后 使 用 voxmap 的 穿 透 深 度 来 计 算 力 和 扭 矩 。 与子 弹 的 内 置 算 法 不 同 , 这 种 方 法 为 复 杂 场 景 提 供 了 完 整 的 6DOF 触 觉

渲 染 。 然 而 , 已 知 Voxmap Pointshell 算 法 非 常 内 存 密 集 , 并 且 易 受 噪声 影 响 。

3 不 真 实 的我 们 的 工 作 目 标 是 为 现 代 游 戏 引 擎 中 的 触 觉 渲 染 开 发 一 个 易 于 使 用 、同 时 可 调 整 和 可 推 广 的 系 统 。 这 可 以 用 于 游 戏 、 研 究 或 与 业 务 相 关 的环 境 , 无 论 是 整 体 还 是 部 分 。 我 们 决 定 使 用 虚 幻 引 擎 进 行 开 发 , 原 因如 下 :– 它 是 最 受 欢 迎 的 游 戏 引 擎 之 一 , 拥 有 庞 大 的 社 区 、 定 期 更 新 和 良 好的 文 档 ,

– 在 大 多 数 情 况 下 , 它 可 以 自 由 使 用 , 特 别 是 在 已 经 大 量 使 用 的 研 究

环 境 中– 它 是 完 全 开 源 的 , 因 此 可 以 进 行 检 查 和 调 整 ,– 它 为 程 序 员 提 供 了 源 代 码 级 别 的 访 问 权 限 , 而 游 戏 设 计 者 可 以 将 一个 舒 适 的 图 形 编 辑 器 与 一 个 名 为 Blueprints 的 图 形 脚 本 系 统 结 合 使 用 。因 此 , 它 结 合 了 开 放 类 库 和 可 扩 展 IDE 的 优 点– 可 通 过 插 件 进 行 扩 展 ,

– 最 后 , 它 建 立 在 C++之 上 , 这 使 得 集 成 外 部 C++库 变 得 容 易 。 这很 方 便 , 因 为 C++仍 然 是 高 性 能 触 觉 渲 染 库 的 首 选 。我 们 的 目 标 直 接 意 味 着 系 统 的 模 块 化 设 计 。 将 触 觉 技 术 纳 入 程 序 的 主要 挑 战 是 快 速 碰 撞 检 测 、 稳 定 的 力 计 算 和 与 硬 件 设 备 的 通 信 。 图 1 显示 了 插 件 之 前 的 状 态 : 一 方 面 , 有 不 同 的 触 觉 设 备 可 用 于 其 库 。 另 一方 面 , 我 们 希 望 在 UE4 中 集 成 设 备 。 因 此 , 我 们 的 系 统 由 三 个 单 独的 插 件 组 成 , 这 些 插 件 实 现 了 其 中 一 个 任 务 。 具 体 如 下 :

– 一 个 名 为 Haptico 的 插 件 , 它 实 现 与 触 觉 硬 件 的 通 信 , 即 初 始 化 触觉 设 备 , 在 运 行 时 接 收 位 置 和 方 向 , 并 将 力 和 扭 矩 发 送 回 硬 件 。

– 名 为 Collette 的 插 件 , 用 于 与 ( 外 部 ) 碰 撞 检 测 库 通 信 。 最 初 , 它将 几 何 对 象 从 Unreal 传 递 到 碰 撞 库 ( 使 其 能 够 潜 在 地 计 算 加 速 度 数 据结 构 等 ) 。 在 运 行 时 , 它 更 新 对 象 的 变 换 矩 阵 并 收 集 碰 撞 信 息 。– ForceComp, 一 个 力 渲 染 插 件 , 它 接 收 碰 撞 信 息 并 计 算 最 终 发 送 给Haptico 的 力 和 扭 矩 。 力 计 算 与 碰 撞 检 测 方 法 密 切 相 关 , 因 为 它 取 决于 所 提 供 的 碰 撞 信 息 。 然 而 , 我 们 决 定 将 实 际 碰 撞 检 测 中 的 力 和 扭 矩计 算 分 离 到 单 独 的 插 件 中 , 因 为 这 样 可 以 方 便 地 进 行 替 换 , 例 如 , 如果 模 拟 从 基 于 惩 罚 的 切 换 到 基 于 脉 冲 的 。

插 件 列 表 已 经 表 明 , 通 信 在 插 件 系 统 的 设 计 中 起 着 重 要 作 用 。 因 此 ,在 详 细 介 绍 各 个 插 件 的 实 现 之 前 , 我 们 将 先 对 这 个 主 题 进 行 简 短 的 描述 。3.1 虚 幻 引 擎 概 述UE4 是 一 个 游 戏 引 擎 , 它 包 括 引 擎 本 身 以 及 使 用 该 引 擎 创 建 应 用 程 序的 3D 编 辑 器 。 我 们 将 首 先 简 要 回 顾 UE4 的 基 本 概 念 。

UE4 遵 循 基 于 组 件 的 实 体 系 统 设 计 。 场 景 中 的 每 个 对 象 ( 3D 对 象 、灯 光 、 相 机 等 ) 的 核 心 都 是 一 个 无 数 据 、 无 逻 辑 的 实 体 ( 在 UE4 中称 为 演 员 ) 。 对 象 之 间 的 不 同 行 为 源 于 可 以 连 接 到 这 些 参 与 者 的 组 件 。

例 如 , StaticMeshActor( 表 示 3D 对 象 ) 附 着 了 网 格 组 件 , 而 光 源 将附 着 不 同 的 组 件 。 这 些 组 件 包 含 UE4 的 内 部 系 统 用 于 实 现 合 成 对 象行 为 的 数 据 ( 例 如 , 渲 染 系 统 将 使 用 网 格 组 件 , 物 理 系 统 将 使 用 物 理组 件 等 ) 。UE4 允 许 其 用 户 将 新 组 件 附 加 到 场 景 图 中 的 参 与 者 , 这 允 许 使 用 新 行为 扩 展 对 象 。 此 外 , 如 果 使 用 UE4 的 C++方 言 创 建 了 一 个 新 类 , 则该 类 的 变 量 可 以 暴 露 给 编 辑 器 。 通 过 这 样 做 , 用 户 可 以 在 编 辑 器 内 部轻 松 地 更 改 类 实 例 的 值 , 从 而 最 大 限 度 地 减 少 编 程 难 度 。

UE4 不 仅 提 供 了 C++接 口 , 还 提 供 了 一 种 称 为 Blueprints 的 可 视 化 编程 语 言 。 蓝 图 从 C++接 口 中 抽 象 出 函 数 和 类 , 并 将 它 们 表 示 为 可 以通 过 执 行 线 连 接 的 “ 构 建 块 ” 。 它 是 一 种 直 接 的 方 式 , 可 以 最 大 限 度地 减 少 编 程 难 度 , 甚 至 可 以 让 没 有 编 程 经 验 的 人 为 他 们 的 项 目 创 建 游戏 逻 辑 。当 用 定 制 类 扩 展 UE4 时 , 指 出 了 一 般 思 想 : 程 序 员 通 过 蓝 图 公 开 更改 来 扩 展 现 有 系 统 。 其 他 用 户 可 以 使 用 这 些 来 创 建 游 戏 行 为 。 我 们 的插 件 系 统 遵 循 这 一 理 念 。

此 外 , UE4 允 许 开 发 人 员 将 其 代 码 捆 绑 为 插 件 , 以 使 代 码 更 易 于 重 用和 分 发 。 插 件 可 以 在 编 辑 器 中 轻 松 管 理 。 所 有 的 类 和 蓝 图 都 可 以 在 编

辑 器 中 直 接 访 问 ( 图 2) 。 我 们 将 我 们 的 系 统 实 现 为 一 组 三 个 插 件 ,以 使 分 发 更 加 轻 松 , 并 允 许 用 户 选 择 他 们 的 项 目 所 需 的 功 能 。最 后 , UE4 程 序 可 以 在 编 译 时 与 外 部 库 链 接 , 或 在 运 行 时 动 态 加 载 ,类 似 于 常 规 C++应 用 程 序 。 我 们 正 在 使 用 这 种 技 术 将 我 们 的 插 件 建立 在 现 有 库 的 基 础 上 。 这 确 保 了 我 们 的 插 件 有 一 个 经 过 时 间 测 试 和 积极 维 护 的 基 础 。3.2 插 件 通 信 设 计

如 上 所 述 , 我 们 的 系 统 由 三 个 单 独 的 插 件 组 成 , 用 于 交 换 数 据 。 因 此 ,插 件 之 间 的 通 信 起 着 重 要 作 用 。 根 据 我 们 的 灵 活 性 目 标 , 这 种 沟 通 必须 满 足 两 个 主 要 要 求 。– 插 件 需 要 在 不 了 解 其 他 插 件 实 现 的 情 况 下 相 互 通 信 , 因 为 我 们 的 插件 的 用 户 应 该 能 够 单 独 或 组 合 使 用 它 们 。 它 们 甚 至 可 以 被 用 户 自 己 的实 现 所 取 代 。 因 此 , 通 信 必 须 在 独 立 的 层 上 运 行 。– 插 件 用 户 应 能 够 访 问 插 件 生 成 的 数 据 , 以 满 足 其 个 人 需 求 。 这 意 味

着 必 须 能 够 在 插 件 外 部 传 递 数 据 。为 了 满 足 这 两 个 要 求 , 我 们 实 施 了 基 于 学 员 的 消 息 传 递 方 法 。 委 托 者

是 表 示 系 统 中 事 件 的 对 象 。 委 托 人 可 以 通 过 指 定 参 数 类 型 来 定 义 某 个函 数 签 名 。 委 托 是 绑 定 到 委 托 者 的 所 述 签 名 的 函 数 。 委 托 人 可 以 发 出广 播 , 呼 叫 所 有 绑 定 的 委 托 人 。 实 际 上 , 代 表 是 对 代 表 所 代 表 的 事 件做 出 反 应 的 职 能 。 委 托 人 可 以 在 广 播 时 向 其 委 托 人 传 递 数 据 , 从 而 完成 消 息 传 递 系 统 。

插 件 之 间 的 委 托 设 置 可 以 在 用 户 项 目 中 的 自 定 义 控 制 器 类 中 处 理 。我 们 的 轻 型 代 表 系 统 。 UE4 提 供 了 宣 布 不 同 类 型 代 表 的 可 能 性 。 然 而 ,这 些 代 表 有 一 些 缺 点 。 只 有 Unreal 对 象 ( 用 UOBJECT 宏 等 声 明 ) 可以 与 此 类 委 托 一 起 传 递 , 从 而 限 制 了 它 们 在 更 一 般 的 C++应 用 程 序

中 的 使 用 。 它 们 还 引 入 了 调 用 堆 栈 中 的 几 层 调 用 , 因 为 它 们 是 围 绕UE4 的 反 射 系 统 实 现 的 。 当 使 用 许 多 代 理 时 , 这 可 能 会 影 响 性 能 。 最后 , 我 们 在 运 行 时 遇 到 了 问 题 : UE4 委 托 者 暂 时 忘 记 了 它 们 的 绑 定 函数 , 这 导 致 了 在 尝 试 访 问 这 些 函 数 的 地 址 时 发 生 崩 溃 。为 了 克 服 这 些 问 题 , 我 们 实 现 了 自 己 的 轻 量 级 Delegator 类 。 它 是 一个 纯 C++类 , 可 以 接 受 表 示 其 委 托 的 参 数 类 型 的 可 变 数 量 的 模 板 参数 。 所 谓 的 可 调 用 对 象 可 以 与 addDelegate( … ) 函 数 绑 定 。 我 们 的 解决 方 案 支 持 所 有 常 见 的 C++调 用 ( 自 由 函 数 、 成 员 函 数 、 lambda 等 ) 。

可 以 使 用 broadcast( ) 函 数 执 行 委 托 , 该 函 数 只 需 在 调 用 堆 栈 中 执 行一 个 又 一 个 委 托 。 数 据 始 终 作 为 内 部 引 用 传 递 , 防 止 任 何 额 外 的 副 本 。3.3 HAPTICO 插 件 – 触 觉 设 备 接 口Haptico 使 游 戏 开 发 者 能 够 直 接 从 UE4 使 用 触 觉 设 备 , 而 无 需 手 动 实现 与 设 备 的 连 接 。 它 自 动 检 测 连 接 的 触 觉 设 备 , 并 允 许 通 过 Blueprints或 C++代 码 进 行 完 全 控 制 。 这 包 括 从 设 备 检 索 位 置 和 方 向 , 以 及 向设 备 发 送 力 和 扭 矩 , 这 得 益 于 基 础 CHAI3D 库 。

触 觉 主 要 由 三 部 分 组 成 : 触 觉 管 理 器 、 触 觉 线 程 和 触 觉 设 备 接 口 。 触觉 管 理 器 是 唯 一 的 用 户 界 面 , 并 表 示 为 场 景 中 的 UE4 演 员 。 它 提 供向 设 备 施 加 力 和 扭 矩 的 功 能 , 并 获 取 端 部 挡 板 的 位 置 和 旋 转 等 信 息 。

为 了 用 于 触 觉 渲 染 , 插 件 的 执 行 循 环 必 须 与 以 低 频 率 运 行 的 UE4 的游 戏 线 程 分 离 。 该 插 件 在 内 部 使 用 自 己 的 触 觉 线 程 。 触 觉 线 程 从 设 备读 取 位 置 和 旋 转 数 据 , 将 其 提 供 给 触 觉 管 理 器 , 并 在 每 次 滴 答 声 中 将从 触 觉 管 理 器 检 索 到 的 新 力 和 扭 矩 应 用 到 设 备 。 当 新 的 触 觉 数 据 可 用时 , 将 广 播 一 个 委 托 者 事 件 OnTransform, 该 事 件 在 每 个 时 间 点 将 设备 数 据 传 递 给 触 觉 管 理 器 。 插 件 的 用 户 可 以 轻 松 地 将 自 己 的 功 能 与 此事 件 挂 钩 , 从 而 对 移 动 的 设 备 做 出 反 应 。 广 播 第 二 个 委 托 者 事 件ForceOnHapticTick, 这 允 许 用 户 将 力 计 算 函 数 挂 接 到 触 觉 线 程 中 。 我们 自 己 的 ForceComp 插 件 使 用 这 种 机 制 。

3.4 COLLETTE– 碰 撞 检 测 插 件UE4 中 包 括 的 物 理 模 块 具 有 两 个 缺 点 , 这 使 得 其 不 适 合 触 觉 渲 染 :? 它 在 主 游 戏 线 程 上 运 行 , 这 意 味 着 它 的 速 度 上 限 为 120 FPS。? 对 象 由 简 单 的 边 界 体 积 近 似 , 这 对 于 游 戏 场 景 非 常 有 效 , 但 对 于计 算 触 觉 渲 染 所 需 的 碰 撞 数 据 来 说 太 不 精 确 。

这 导 致 意 识 到 , 对 于 触 觉 渲 染 , 必 须 绕 过 UE4 的 物 理 模 块 。

我 们 的 Collette 插 件 就 是 这 么 做 的 。 我 们 没 有 在 这 个 插 件 中 实 现 冲 突检 测 , 但 提 供 了 一 个 灵 活 的 包 装 器 来 绑 定 外 部 库 。 在 我 们 的 用 例 中 ,我 们 展 示 了 如 何 集 成 CollDet 库 的 示 例 。 与 Haptico 一 样 , Collette 可以 在 自 己 的 线 程 中 运 行 。 因 此 , 可 以 实 现 触 觉 渲 染 所 需 的 频 率 。该 插 件 使 用 ColletteStaticMeshActor 来 表 示 可 对 象 。 这 是 UE4 的StaticMeshActor 的 扩 展 。 它 支 持 在 加 载 3D 资 源 时 将 额 外 的 预 先 计 算的 加 速 度 数 据 结 构 加 载 到 演 员 的 网 格 组 件 。 例 如 , 在 我 们 的 用 例 中 ,我 们 从 硬 盘 加 载 一 个 预 生 成 的 球 体 树 资 源 , 该 资 源 用 于 底 层 算 法 的 内

部 表 示 。冲 突 管 道 由 ColletteVolume 表 示 , 它 扩 展 了 UE4 VolumeActor。 我 们决 定 使 用 音 量 调 节 器 , 因 为 它 允 许 将 碰 撞 检 测 检 查 限 制 在 级 别 中 的 限定 区 域 。要 在 管 道 中 注 册 可 缓 存 对 象 , 可 以 使 用 AddCollisionWatcher( … ) 蓝图 函 数 将 它 们 注 册 到 冲 突 检 测 管 道 中 。 该 函 数 引 用 ColletteVolume 以及 两 个 ColletteStaticMeshActor。

在 运 行 时 , 冲 突 线 程 检 查 已 注 册 的 对 及 其 当 前 位 置 和 方 向 。 如 果 确 定了 冲 突 , ColletteCallback 类 将 广 播 OnCollision 委 托 器 事 件 。 插 件 的 用户 可 以 很 容 易 地 将 自 己 的 函 数 与 此 事 件 挂 钩 , 从 而 对 冲 突 做 出 反 应 。此 处 不 能 使 用 蓝 图 事 件 , 因 为 它 们 也 在 游 戏 线 程 上 执 行 , 因 此 运 行 频率 较 低 。 该 事 件 还 传 输 对 冲 突 中 涉 及 的 ColletteStaticMeshActor 对 的 引

用 , 以 及 底 层 算 法 生 成 的 冲 突 数 据 。 然 后 , 该 数 据 可 用 于 例 如 计 算 碰撞 响 应 力 。3.5 FORECOMP 插 件力 计 算 被 实 现 为 一 个 独 立 的 函 数 , 它 接 受 来 自 两 个 力 组 件 的 数 据 , 这些 力 组 件 可 以 特 别 连 接 到 ColletteStaticMeshActor, 并 且 取 决 于ColletteStatic MeshActors 的 当 前 转 换 。 ForceComponent 提 供 了 物 理 模拟 力 所 需 的 UE4 编 辑 器 属 性 : 例 如 , 物 体 的 质 量 、 比 例 因 子 或 阻 尼

器 。 我 们 已 经 从 碰 撞 检 测 中 分 离 出 了 力 数 据 。 这 允 许 用 户 在 不 进 行 力计 算 的 情 况 下 使 用 Collette 插 件 。3.6 通 过 事 件 控 制 数 据 流我 们 已 经 提 到 , 我 们 使 用 基 于 代 理 的 事 件 系 统 来 组 织 三 个 插 件 之 间 的数 据 流 。 为 了 管 理 事 件 , 我 们 使 用 EventHandler 角 色 。 这 保 证 了 最 大的 灵 活 性 , 避 免 了 插 件 依 赖 于 特 定 的 实 现 。 基 本 上 , EventHandler 引用 了 所 有 涉 及 的 组 件 和 游 戏 对 象 , 如 演 员 和 事 件 。 我 们 的 EventHandler

支 持 在 Unreal 编 辑 器 窗 口 中 拖 放 , 因 此 , 建 立 这 些 引 用 不 需 要 编 码 。例 如 , 如 果 我 们 想 将 网 格 连 接 到 触 觉 设 备 , 以 将 其 用 作 虚 拟 工 具 。 在这 种 情 况 下 , 我 们 只 需 在 编 辑 器 窗 口 中 的 EventHandler 实 例 上 拖 动ColletteStaticMeshActor 实 例 。

此 外 , EventHandler实 现 了 在 初 始 化 期 间 绑 定 到 插 件 事 件 的 各 种 函 数 。例 如 , 它 为 两 个 最 重 要 的 事 件 提 供 函 数 : 触 觉 线 程 发 送 的 OnTransform事 件 和 ColletteVolume 参 与 者 的 OnCollision 事 件 。 OnTransform 事 件自 动 向 虚 拟 工 具 广 播 位 置 和 方 向 数 据 。 这 与 直 接 在 触 觉 线 程 中 更 新 虚拟 工 具 具 有 相 同 的 效 果 。 此 外 , OnTransform 事 件 还 从 ForceComp 调用 第 二 个 代 理 函 数 , 该 函 数 基 于 该 数 据 计 算 碰 撞 力 。 完 成 后 , 它 将 力传 递 回 HapticManager, 后 者 将 力 应 用 到 相 关 的 触 觉 设 备 。ColletteVolume 参 与 者 的 OnCollision 委 托 器 事 件 将 冲 突 数 据 发 送 到

EventHandler 的 附 加 函 数 , 并 最 终 将 其 存 储 在 共 享 变 量 中 。 通 过 这 样做 , 触 觉 线 程 将 在 更 新 虚 拟 工 具 的 变 换 后 执 行 代 理 。 委 托 本 身 从 共 享变 量 读 取 数 据 , 然 而 , 使 用 这 个 解 决 方 案 , 我 们 将 插 件 的 具 体 实 现 彼此 分 开 。 图 5 显 示 了 ForceComp 和 Haptico 之 间 的 事 件 处 理 示 例 。总 体 而 言 , 我 们 的 插 件 系 统 的 典 型 设 置 由 三 个 线 程 组 成 : 一 个 用 于 主游 戏 循 环 , 包 括 虚 幻 中 的 视 觉 渲 染 , 一 个 用 于 触 觉 渲 染 , 包 括 Haptico和 ForceComp, 另 一 个 用 于 冲 突 检 测 。 我 们 决 定 在 它 自 己 的 线 程 中 独立 运 行 冲 突 检 测 , 以 便 即 使 在 冲 突 检 测 可 能 超 过 1ms 时 间 帧 的 深 度 互

穿 情 况 下 , 也 能 保 证 稳 定 的 触 觉 渲 染 率 。 图 3 显 示 了 这 个 三 线 程 场 景 。然 而 , 通 过 简 单 地 调 整 EventHandler 中 的 配 置 , 也 可 以 在 触 觉 渲 染 线程 中 使 用 Collette( 甚 至 可 以 在 ForceComp 中 使 用 第 四 个 线 程 ) 。

这 种 模 块 化 和 可 定 制 的 方 法 保 证 了 不 同 插 件 之 间 的 数 据 流 动 非 常 灵活 , 用 户 可 以 在 编 辑 器 中 轻 松 定 义 。4 用 例我 们 将 虚 幻 触 觉 应 用 于 支 持 触 觉 渲 染 的 真 实 世 界 应 用 程 序 。 这 个 例 子展 示 了 如 何 将 实 际 的 冲 突 检 测 库 、 强 制 渲 染 和 通 信 库 集 成 到 我 们 的 插件 系 统 中 。 我 们 的 用 例 是 一 个 不 对 称 的 虚 拟 现 实 多 人 游 戏 , 其 中 视 力受 损 的 玩 家 和 视 力 正 常 的 玩 家 可 以 在 同 一 虚 拟 环 境 中 进 行 协 作 。 当 盲

人 使 用 头 戴 式 显 示 器 ( HMD) 和 跟 踪 控 制 器 ( 如 HTC Vive 手 控 制 器 )时 , 盲 人 操 作 触 觉 力 反 馈 设 备 , 如 PHANToM Omni。

4.1 游 戏 理 念在 进 入 开 发 阶 段 之 前 , 我 们 进 行 了 一 项 广 泛 的 研 究 , 包 括 对 视 障 人 士的 采 访 , 以 了 解 他 们 对 一 款 好 游 戏 的 看 法 。 事 实 证 明 , 我 们 采 访 的 大多 数 人 都 非 常 重 视 引 人 入 胜 的 故 事 情 节 和 氛 围 。 因 此 , 我 们 包 括 了 可信 的 录 音 和 真 实 的 音 效 , 以 获 得 令 人 兴 奋 的 体 验 。游 戏 发 生 在 一 个 可 疑 文 物 收 藏 家 拥 有 的 博 物 馆 里 。 一 支 由 两 名 职 业 窃贼 组 成 的 队 伍 , 幽 灵 和 维 维 , 试 图 闯 入 博 物 馆 , 以 盗 窃 各 种 珍 贵 的 文

物 。 盲 人 玩 家 控 制 着 Phantom, Phantom 是 一 名 技 术 人 员 , 特 别 擅 长破 坏 安 全 系 统 , 也 是 伪 造 品 专 家 。 Vive 由 视 力 正 常 的 玩 家 使 用 HMD播 放 。 他 是 一 个 职 业 扒 手 , 也 是 一 个 骗 人 的 高 手 。

博 物 馆 里 的 每 一 件 展 品 都 有 几 件 赝 品 , 看 起 来 和 真 品 一 模 一 样 。 由 于Vive 无 法 区 分 真 假 文 物 , 因 此 Phantom 的 工 作 就 是 在 这 里 运 用 他 的 技能 。 此 外 , 几 名 警 卫 在 房 屋 内 巡 逻 , 寻 找 可 能 的 入 侵 者 ( 见 图 7) 。Vive 必 须 小 心 , 不 要 被 发 现 或 发 出 太 多 噪 音 , 因 为 这 些 警 卫 对 声 音 非常 敏 感 。 Vive 的 工 作 是 打 破 显 示 器 , 收 集 文 物 , 同 时 分 散 警 卫 的 注 意力 , 并 将 其 带 到 Phantom。 另 一 方 面 , Phantom 的 工 作 是 利 用 其 形 状识 别 专 业 知 识 识 别 正 确 的 工 件 。 游 戏 的 目 标 是 在 时 间 用 完 之 前 窃 取 并识 别 所 有 特 定 的 文 物 。

为 了 识 别 游 戏 中 的 物 体 以 及 真 假 物 体 之 间 的 差 异 , 幻 影 玩 家 使 用 触 觉力 反 馈 装 置 来 扫 描 虚 拟 收 集 的 物 体 。 一 旦 触 觉 设 备 的 虚 拟 表 示 与 对 象发 生 碰 撞 , 虚 幻 触 觉 就 会 检 测 到 这 些 碰 撞 , 并 将 产 生 的 力 渲 染 回 触 觉设 备 。 因 此 , 视 力 受 损 的 人 有 可 能 像 他 们 在 现 实 生 活 中 那 样 感 知 物 体 。在 采 样 中 添 加 真 实 的 声 音 可 以 进 一 步 改 善 这 种 体 验 。即 使 游 戏 在 我 们 当 前 的 用 例 中 处 于 前 台 , 很 明 显 , 几 乎 相 同 的 设 置 可以 很 容 易 地 扩 展 到 执 行 复 杂 的 对 象 识 别 任 务 , 或 者 为 有 视 力 的 玩 家 组合 HMD 和 触 觉 交 互 。

4.2 实 施 细 节通 过 CHAI3D 进 行 设 备 通 信 。 Haptico 的 基 础 是 CHAI3D 库 。 如 第 节所 述 。 该 库 支 持 多 种 触 觉 设 备 , 包 括 我 们 用 于 测 试 的 PHANToM 和Haption Virtuose。 CHAI3D 在 编 译 时 被 Haptico 链 接 为 第 三 方 库 。 我们 主 要 使 用 CHAI3D 的 设 备 模 块 作 为 硬 件 设 备 的 接 口 , 尤 其 是 设 置 和检 索 位 置 和 旋 转 。 我 们 没 有 使 用 CHAI3D 的 力 绘 制 算 法 , 因 为 它 们 不支 持 6 自 由 度 力 计 算 。

使 用 CollDet 进 行 碰 撞 检 测 。 CollDet 是 一 个 冲 突 检 测 库 用 C++编 写 ,实 现 了 一 个 具 有 多 层 过 滤 的 完 整 冲 突 检 测 流 水 线 。 这 包 括 宽 相 位 碰 撞

检 测 算 法 , 如 均 匀 网 格 或 凸 包 预 滤 波 , 以 及 若 干 窄 相 位 算 法 , 如 AABB树 ( 称 为 Boxtree) 和 DOP 树 的 内 存 优 化 版 本 。 对 于 触 觉 渲 染 , 内 球树 数 据 结 构 效 果 最 佳 。 与 其 他 方 法 不 同 , IST 基 于 多 分 散 球 体 填 充 定义 对 象 内 部 球 体 的 分 层 边 界 体 积 ( 见 图 6) 。 该 方 法 与 对 象 的 三 角 形计 数 无 关 , 并 已 证 明 适 用 于 触 觉 渲 染 。 除 了 性 能 之 外 , IST 提 供 的 主要 优 势 是 碰 撞 信 息 : 它 们 不 只 是 提 供 重 叠 三 角 形 的 列 表 , 而 是 提 供 对象 重 叠 体 积 的 近 似 值 。 这 保 证 了 稳 定 和 连 续 的 力 和 扭 矩 。 源 代 码 可 在学 术 免 费 许 可 下 获 得 。

Collette 的 ColletteVolume 的 核 心 是 CollDet 管 道 类 的 包 装 。 插 件 没 有向 管 道 中 添 加 CollDet 对 象 , 而 是 通 过 向 卷 注 册ColletteStaticMeshActors 来 抽 象 这 个 过 程 。 在 内 部 ,ColletteStaticMeshActor 通 过 其 ColletteStatic MeshComponent 从 CollDet管 道 中 分 配 了 一 个 ColID, 以 便 每 个 参 与 者 代 表 管 道 中 的 唯 一 对 象 。当 卷 移 动 对 象 并 检 查 管 道 中 的 冲 突 时 , 它 会 将 各 个 参 与 者 的 ID 传 递给 实 现 冲 突 检 查 的 CollDet 函 数 。 与 CHAI3D 一 样 , Collette 在 编 译 时链 接 到 CollDet 库 。

力 计 算 。 由 于 其 性 能 , 触 觉 的 力 和 力 矩 计 算 通 常 依 赖 于 基 于 惩 罚 的 方法 。 实 际 力 计 算 方 法 与 Collette 提 供 的 碰 撞 信 息 密 切 相 关 。 对 于 IST,这 是 一 对 对 象 的 重 叠 内 部 球 体 列 表 。 在 我 们 的 实 施 中 , 我 们 采 用 了 报告 的 稍 微 修 改 的 体 积 碰 撞 响 应 方 案 :

4.3 性 能我 们 已 经 评 估 了 我 们 在 游 戏 中 实 现 的 性 能 , 该 游 戏 采 用 Intel Corei7-6700K( 4 核 ) , 具 有 64 GB 主 内 存 和 运 行 Microsoft Windows 10Enterprise 的 NVIDIA GeForce GTX 1080 Ti。我 们 使 用 了 游 戏 中 的 一 个 典 型 测 试 场 景 : 用 户 使 用 幻 影 设 备 探 索 物 体的 表 面 ( 在 我 们 的 示 例 中 , 是 斯 坦 福 兔 子 ) 。 在 我 们 的 示 例 中 , 我 们用 一 颗 宝 石 来 表 示 末 端 挡 板 ( 见 图 8) 。

对 于 力 渲 染 和 触 觉 通 信 线 程 , 我 们 几 乎 总 是 实 现 500-1KHz 的 频 率 。只 有 在 有 许 多 相 交 的 球 体 对 的 情 况 下 , 它 才 会 稍 微 下 降 。 在 严 重 互 穿的 情 况 下 , 碰 撞 检 测 稍 微 下 降 到 500Hz。 这 与 报 告 的 结 果 相 似 , 其 中使 用 了 一 个 简 单 的 OpenGL 测 试 场 景 , 表 明 我 们 的 架 构 不 会 增 加 显 著的 处 理 开 销 ( 见 图 9) 。

5 结 论 和 未 来 工 作我 们 提 出 了 一 种 新 的 插 件 系 统 , 用 于 将 触 觉 集 成 到 现 代 面 向 插 件 的 游戏 引 擎 。 我 们 的 系 统 由 三 个 单 独 的 插 件 组 成 , 涵 盖 了 触 觉 渲 染 的 完 整要 求 : 与 不 同 硬 件 设 备 的 通 信 、 碰 撞 检 测 和 力 渲 染 。 我 们 有 意 使 用 插件 的 抽 象 设 计 。 这 种 抽 象 和 模 块 化 的 设 置 使 其 他 开 发 人 员 可 以 轻 松 地交 换 我 们 系 统 的 部 分 , 以 根 据 他 们 的 个 人 需 求 进 行 调 整 。 在 我 们 的 用例 中 , 一 款 针 对 盲 人 和 盲 人 的 协 作 多 人 VR 游 戏 , 我 们 展 示 了 将 外 部C++库 与 我 们 的 插 件 集 成 的 简 单 性 , 即 用 于 与 硬 件 通 信 的 CHAI3D 和

碰 撞 检 测 库 CollDet。 我 们 的 结 果 表 明 , 我 们 的 插 件 系 统 工 作 稳 定 ,

即 使 对 于 复 杂 的 非 凸 对 象 , 其 性 能 也 非 常 适 合 触 觉 渲 染 。通 过 我 们 的 插 件 系 统 , 未 来 的 项 目 可 以 轻 松 地 在 支 持 触 觉 的 游 戏 、 严肃 游 戏 和 商 业 相 关 应 用 程 序 中 提 供 触 觉 力 反 馈 。 尽 管 其 他 开 发 人 员 可能 决 定 使 用 不 同 的 库 进 行 工 作 , 但 我 们 相 信 , 我 们 在 此 报 告 的 经 验 与我 们 的 高 级 UE4 插 件 系 统 相 结 合 , 将 极 大 地 简 化 他 们 的 集 成 工 作 。此 外 , 我 们 的 系 统 不 限 于 触 觉 渲 染 , 但 它 也 可 以 用 于 集 成 一 般 的 基 于物 理 的 模 拟 。

然 而 , 我 们 的 系 统 , 以 及 当 前 基 于 CHAI3D 和 CollDet 的 实 现 也 有 一些 限 制 , 我 们 希 望 在 未 来 的 开 发 中 解 决 这 些 限 制 : 目 前 我 们 的 系 统 仅限 于 刚 体 交 互 。 进 一 步 的 工 作 可 能 需 要 包 含 可 变 形 物 体 。 在 这 种 情 况下 , 需 要 重 新 修 改 接 口 , 因 为 插 件 之 间 交 换 的 数 据 量 将 显 著 增 加 ; 我们 必 须 扩 充 完 整 的 网 格 , 而 不 是 传 递 表 示 对 象 平 移 和 方 向 的 简 单 矩 阵 。直 接 访 问 UE4s 网 格 内 存 可 能 有 助 于 解 决 这 一 挑 战 。此 外 , 我 们 的 用 例 为 未 来 的 工 作 提 供 了 有 趣 的 途 径 。 目 前 , 我 们 计 划对 盲 人 视 频 游 戏 玩 家 进 行 用 户 研 究 , 以 测 试 他 们 在 3D 多 人 环 境 中 对

触 觉 设 备 的 接 受 程 度 。 此 外 , 我 们 希 望 研 究 不 同 的 触 觉 对 象 识 别 任 务 ,例 如 , 关 于 触 觉 设 备 的 自 由 度 的 影 响 , 或 双 手 与 单 手 交 互 的 影 响 。 最后 , 其 他 触 觉 交 互 隐 喻 也 可 能 很 有 趣 , 例 如 , 将 触 觉 设 备 用 作 虚 拟 手杖 , 以 实 现 盲 人 在 3D 环 境 中 的 定 向 。

献花(0)
+1
(本文系方建勇首藏)