Oculus在其开发者知识库中新增了有关Oculus SDK的“缓冲触觉”功能的文档,这是一种从公司的Touch控制器中编程更先进的触觉反馈方法。
Oculus Touch使用线性驱动器提供反馈,这是一种触觉技术,它越来越多地取代了常见的游戏手柄中简单的“震动”反馈。与过去的旋转质量电机相比,线性驱动器的运动速度非常快,这使得可以实现更广泛的触觉效果、更快的响应时间和更好的控制。新文档中的“缓冲触觉”功能使开发者可以对控制器的触觉反馈进行细粒度控制。
SDK支持两种控制器触觉的方法,即缓冲和非缓冲。Oculus建议不要同时使用这两种方法,以避免不可预测的触觉行为。
非缓冲触觉的概念和控制更简单,简单地使用特定的频率(160Hz或320Hz)和振幅(0到255)来开关振动。 Oculus写道,非缓冲触觉“设计用于简单的效果,不需要紧密的延迟要求,因为控制器需要33毫秒来响应修改触觉设置的API调用。”
缓冲触觉不仅响应更快(10毫秒),而且可以实现更广泛、更复杂的触觉效果,如在正弦波或正切函数的振幅附近模式化振动、振动在控制器之间的平移、生成各种低频载波等。Oculus写道,该功能允许开发者将代表所需振幅的字节队列起来,然后以320Hz的速度按顺序播放,使开发者可以在每隔3.125毫秒调整振幅的范围在0(最小)和255(最大)之间。
Oculus SDK提供了一个触觉示例应用程序,展示了使用缓冲触觉可以实现的一些触觉效果:
– 平滑正弦波振动,每个波周期末尾带有“嗡嗡声”效果
– 在左右控制器之间的振动平移,同样在平移周期末尾带有“嗡嗡声”效果
– 超低频嗡嗡声,实际上是以64Hz的频率发生的一系列跳动
– 基于混沌公式的“搞砸了”的低频振动,其中使用了三角切线波函数。
该文档进一步详细介绍了该功能的工作原理,其中涉及在将缓冲区填充满所需触觉指令之前,将其发送到控制器的操作:
缓冲区由一系列字节组成,其值从0到255,其中0表示无幅度(即无振动),255表示SDK允许的振动的最大幅度(或强度)。在代码填充缓冲区的值后,通过ovr_SubmitControllerVibration将缓冲区发送到一个或两个Touch控制器。然后,缓冲区中的每个字节按照320Hz的速度顺序“播放”。缓冲区的最大大小(即可以一次发送给控制器的字节的最大数量,也是控制器内部缓冲区的最大大小)为256字节。单个256字节缓冲区“播放”的时间为0.8秒(以320Hz的速度播放256字节)。因此,您可以完全控制振动效果的振幅,分辨率为3.125毫秒(相当于320Hz)。但是,频率只能是320Hz或320Hz的某个整数商,例如320/2=160Hz,320/3=106.7Hz,320/4=80Hz,320/5=64Hz等。您可以通过发送填充为零的字节,与振幅值大于零的字节交替,来实现这些较低的频率。以下是一些示例:
– 320Hz,最大振幅 – [255, 255, 255, 255, …]
– 160Hz,最大振幅 – [255, 0, 255, 0, 255, 0, 255, 0, …]
– 320Hz,一半振幅 – [127, 127, 127, …, 127, …]
– 160Hz,一半振幅 – [127, 0, 127, 0, 127, 0, …, 127, 0, …]
– 单个清脆的击键(320Hz)- [0, 0, 255, 255, 255, 0, 0] [延迟x…]单一钝性的震动(160Hz)- [0, 255, 0, 255, 0, 255, 0] [延迟 x 毫秒] [0, 255, 0, 255, 0, 255, 0]
通常情况下,轻巧而锐利的动作可以使用320Hz的共振模式,而沉重且钝性的动作可以使用160Hz的模式。
Oculus还指出,开发者可以根据输入流(例如控制器的移动或位置)来调整震动效果,并且可以在将信息传递给缓冲区之前预先混合多个输入流,这可能使得依赖于玩家在虚拟世界中的行为的一些有趣的动态触觉效果成为可能。
正如您所看到的,要实现所需的触觉效果,填充指令缓冲区可能会非常具有挑战性,特别是如果用于实现的接口仅仅是一串数字。这是Immersion Corp的开发人员希望修复的问题,以帮助开发者更轻松地创建更好的触觉效果。
参考:Microsoft Research展示了具有独特触觉技术的VR控制器原型
0