对于“Channeler”游戏,我们的重点是通过使用眼动追踪技术实现创新的游戏机制。这种独特的外设为设计人员和程序员提供了挑战。在这篇文章中,我们主要介绍编程方面的解决方案。

为了向读者介绍这篇文章的方向,让我展示一个场景。在早期原型之一的代号“Focal Distraction”中,设计师试图分散玩家的注意力,使其无法在一群长相相似的人物中发现并专注于独特的实体。理论上很简单的机制,但要做到正确,执行的方式必须让设计师预测玩家的行为,使其对他或她不利。它最终成为设计师和玩家之间的某种心理游戏。在设计这样的关卡时,必须收集有关玩家在特定脚本事件期间可能看到的位置的信息。举例来说,我们希望玩家能被屏幕左侧的颜色爆炸分心。作为设计师,我想问的问题是“普通玩家是否会因为这个事件而分心?” 以及“一般玩家会被上述事件分心多久?”。这种机制和其他游戏功能提出了无法通过简单观察来回答的问题,因此需要一种工具来帮助设计师回答这些困难的问题。这就是导致我们开发 3D 热图分析工具的原因。

2、什么是 3D 热图?

在谈论 3D 热图之前,让我们先介绍下热图是什么。热图是一种通过颜色差异在坐标平面上表示数据集合的方法。大多数人都熟悉地理热图,其中红色通常表示热量更集中,例如,在地图上的某个位置。这种表示数据的风格在眼球追踪的情况下变得非常有效,因为屏幕成为我们的坐标平面,用户注视的位置将作为我们有兴趣分析的数据集合。这是正在开发的热图分析工具的一个版本,但它本身并不是本文的重点。

热图通常与二维数据相关联,但我们感兴趣的数据无法从二维坐标中收集。让我们回到之前讨论的场景:假设有一个爆炸出现了很短的时间,旨在分散玩家的注意力。我们怎么知道用户正在盯着爆炸而不是附近的另一个物体?如果允许玩家移动怎么办?当屏幕继续改变视角时,用户在屏幕上注视的位置的信息将与用户注视的对象没有很好的关联。使用简单的热图方法回答问题是行不通的。需要收集的数据需要了解游戏中的 3D 空间,包括玩家的位置和/或玩家正在注视的特定对象。

使热图三维化的方法各异。在我们的例子中,通过颜色表示数据集合的想法仍然保持不变,但由于数据集合只涉及焦点对象,颜色标记游戏中的对象而不是屏幕上的像素。这有效地向设计者传达了哪个对象获得了最多的数据点,在这种情况下,数据点是正在查看对象的帧数。

2、3D热图的特征

如前所述,3D 热图旨在记录玩家在游戏过程中或整个游戏过程中注视的对象的状态。实现这一点的方法是公开一个蓝图函数,该函数在分析工具中存储有关什么对象以及一个对象被注视多长时间的信息。

此函数不需要每帧都调,将其放在每帧所需数据的代码部分中,例如焦点对象(Actor Hit)和持续时间等数据焦点(增量时间)。

虽然 Tobii Eye X 提供了检测物体是否被聚焦的功能,但我决定实现自己的眼睛注视焦点检测以允许额外的功能。Tobii 在actor端提供功能(actor响应获得/失去焦点的事件),我需要该功能来自用户端(访问用户当前注视的任何actor)。选择此方法是为了可以以相同的方式处理用户聚焦的任何对象,例如,在聚焦对象上应用景深聚焦效果,或者在这种情况下将对象的聚焦持续时间和其他注视信息存储到 3D 中热图分析。

在后台(或在代码实现上),对象既存储在数据结构中以记录与对象相关的任何数据(主要只是对象聚焦的累积时间),并存储该帧上对象的快照通过 Unreal 提供的可视化日志功能。当设计师想要查看平均播放会话时,他/她可以通过 Excel 电子表格或 3D 热图可视化查看录音。在特定的播放会话中。设计师可以查看特定的播放会话,并使用 Unreal 的 Visual Logger Window 逐帧浏览。

为了进一步利用 Visual Logger 功能,添加了额外的蓝图以进一步帮助开发人员。添加的蓝图功能允许在每一帧或单帧期间将对象记录在 Visual Logger 上。这允许关卡设计师控制他们想要在游戏过程中看到的信息。

下面是正在使用的热图分析工具的现场演示。请注意在游戏屏幕周围拖曳的白色球体。该球体是玩家在屏幕上的焦点。热图收集玩家在游戏中注视的对象的数据并将其突出显示为绿色。

请注意,Visual Logger 仅提供视频擦除器,因此将这个工具与游戏玩法并排展示是不准确的。

3、结语

这是在 Unreal 中为“Channeler”游戏开发的 3D Heat Map 分析工具的快速演示。关于这个主题的后续文章将更深入地探讨创建此编辑器内 3D 热图工具所带来的开发和问题。


原文链接:In-Editor 3D Heat Map in UE 4.10

BimAnt翻译整理,转载请标明出处