游戏设计师如何创建振动模式?


13

我对为控制台控制器创建和实现振动模式感到好奇(对于PS4控制器,如果有所不同的话)。

有延迟和电动机速度参数吗?但是我们也可以从左电机向右淡入淡出,或者使它们一起工作...。

是否有创建这些模式的标准化方法?

例如,我考虑过在音频编辑器中使用立体声wav音频创建它们,并读取代码中的wav文件以将它们转换为延迟和速度。

在游戏行业如何做到这一点?


我已经看到隆隆的系统通过游戏的音频管道驱动,因此您可能会步入正轨。我无法从个人经验谈细节,无论是特定的隆隆声轨道还是从声音效果音量推断隆隆声,或者连接纯粹是通过一致的界面触发声音和隆隆声,而他们完全分开使用源数据格式。
DMGregory

您没有对隆隆声的精确控制。此外,在DualShock中,左隆隆声很重,右隆隆声很轻,因此您可以从左侧的隆隆声获得低频。(我可能向左/向后移动,但您知道了)。
Almo

@Almo任天堂的高清隆隆声系统怎么样。你肯定有某种形式的控制权是
巴林特

这将揭露这个问题过于广泛。我实际上不了解他们的系统。
Almo

1
@DMGregory我知道,处理隆隆声/触觉的音频引擎仅使用相同的触发器,包络等-而不是音频波形。就像Almo所说的那样,您实际上在API级别上没有那种控制级别。我无法想象任天堂的系统有很大不同-您不会想要在如此高的频率下更新任何隆隆声系统,而实际音频数据是一个不错的选择。
理查德·拜伦

Answers:


8

PS4 Dualshock控制器的左右隆隆声包具有1个字节的值,因此基本上像8位音乐一样工作。

其中大多数都位于NDA的支持下,因此很难获得任何相关信息(即使上面的信息也很难获得,我只是从用于node.js的第三方SDK中弄清楚了)。这些是我整理的信息:

从字面上看,该过程就像制作1字节的立体声音乐(据推测是由音乐艺术家制作的)。它涉及将PS4控制器连接到计算机,并使用程序创建隆隆声模式。他们根据猜测做出一个,然后运行它,然后对其进行调整,然后重复这些步骤,直到感觉良好为止。

某些隆隆声是通过编程方式生成的(例如,汽车驶出道路时),但是这些隆隆声通常是简单的功能(例如窦性)或类似于手机操作方式的恒定值。即使是最复杂的效果,也包括将标准化的隆隆声图案乘以所需强度。

PS4 SDK还带有一些预定义的模式。例如:锯齿形(不断增加,然后从255变为0),正弦波和三角形(线性增加到255,然后线性减少到0)。

我找不到其他控制器的任何细节(尤其是Switch的HD隆隆声,甚至专利都没有说明它是如何工作的)。但是他们可能正在使用类似的方法以及更精确的隆隆声包。

资料来源:


我发现这篇文章很久以前,其中提出了用于与控制器进行来回通信的报告结构,包括隆隆声通道的字节偏移和控制它们的标志。它可能是公共Internet上可用的最全面的功能,而无需访问Sony自己的文档和API。
DMGregory

@DMGregory您介意我将其添加到源代码部分吗?
巴林特

拜托 :)我分享了它,希望能有用。
DMGregory

4

没有标准化的方法。

不同的设备具有不同的隆隆声功能和限制。

绝大多数设备不支持实际的“力反馈”(例如:方向盘在碰到路缘/坑洼时将允许程序员将其推回特定角度),而只是在一些不受控制/任意的方向上晃动。

因此,在MSDN / DirectX和其他API上提到的大多数“强制反馈”功能在用户市场上实际上从未真正实现过,或者“智能”控件(信封,重复等)的这种较差和/或不可移植的实现如下:由于无法使用,以至于实际上开发人员经常被迫直接在其自己的效果实现中使用ON / OFF控件。

允许伺服控制的力反馈的更高级的设备需要自定义API,因为通用输入API不支持必要的参数(精确角度,精确力,限制等)。

将诸如VR感觉手套之类的新兴技术添加进来,使得这些通用API更加缺乏。


最常见的实现方式是使用两台直流电动机,每台电动机的负载不平衡,其中一台的重量要重于另一台,并且没有精确的速度控制。

至少您可以对其进行开/关控制,并且可以执行一些有限的PWM功率控制,但不能进行精确的速度控制。您不知道速度和产生的振动实际上是多少。不同的控制器具有不同的电动机和重量,对于相同的设置,它们将以不同的速度运行。

电动机必须先旋转,并需要一点时间的全功率,然后才能将PWM调至较低的设置。加速延迟极大地限制了响应能力。

控制器通常每帧更新一次,为您提供大约20Hz至100Hz的更新频率。由于您不希望电动机停在最低设置,因此这限制了PWM控制的分辨率。而且您不知道最终用户控制器的电动机在失速(停止)之前能走多低,因此您需要一个良好的安全裕度。

一些系统要求进一步限制了您可以使用它们的能力。

移动设备通常仅具有1个振动电机,并且由于重量尺寸的惯性小和更新速度慢,因此可能无法使用PWM。系统可能会对其进行进一步过滤,以防止滥用或什至损坏(功率驱动器晶体管限制和感应尖峰),或者只是一个非常慢的GPIO子系统。

在移动设备上,您可能会受到限制,或者想限制自己在没有PWM的情况下“振动大约X * 50毫秒”。

一些较新的设备和控制器具有螺线管,其通过低采样率音频波像扬声器一样驱动。这些为您提供更多控制权,但与更常见的控制器完全不同。


因为所有这些差异可能要抽象的振动系统的通过名称在拍摄和忘记时尚发挥高层次的宏观效应数量有限:PlayVibration(player, "Got Loot");PlayVibration(player, "Heavy Fall");StopAllVibrationFor(player);,...

然后,您将必须创建适用于每个平台的低级振动效果和振动控制代码。

即使是对于音乐游戏PlayVibration,在考虑暂停游戏以及重新同步可能更智能的周期性效果发生器的问题时,也可以更轻松地管理和控制每个节拍一次。

由于电池的问题,可以将具有实际螺线管驱动的隆隆声的设备视为音频设备,并使用音频API,如果螺线管持续通电/处于活动状态,则可能会违反系统规定。“功率等级0”可能与“电磁阀关闭”不同,因此即使这样也需要特别注意。


3

来自Windows游戏编程大师的技巧中的AndréLaMothe:

对这些设备进行编程非常复杂。不仅需要对力,弹簧和运动有很好的了解,而且设备和力的事件或效果与音符也有非常密切的关系。也就是说,它们可以具有一个外壳,该外壳可以在将力施加到操纵杆上的各种电动机和执行器时调节力。因此,诸如速率,频率,时序等值都在使用和编程力反馈中起作用。

尽管该文本太旧了,但通过MSDN快速搜索强制反馈后,发现上述概念并没有太大变化。以下是其“力反馈基本概念”中涵盖的主题的摘要:

  • 恒力:单向稳定力
  • 斜坡力:大小不断增加或减小的力。
  • 周期性效应:根据定义的波形波动的力。
  • 条件:对沿轴的运动或位置的反应。
  • 包络:包络定义起音值和淡入值,它们会改变效果的开始和结束幅度。
  • 偏移量:定义从基准水平上移或下移波形的量。
  • 比例:单个增益值可以应用于设备的所有效果。

关于PS4,我出现的唯一一件事是一些Unreal Engine 4文档,其中指出:

这些(标识符)将根据特定于平台的实现进行映射。例如,PS4仅侦听XXX_LARGE通道,而忽略其余通道,而XBox One可以将XXX_LARGE映射到手柄电机,而将XXX_SMALL映射到触发电机。iOS可以将LEFT_SMALL映射到其单个马达。

正如Stephane Hockenhull的回答所表明的,每个平台都是不同的。就像GDSE聊天中建议的那样,PS4强制反馈API的详细信息可能受NDA限制。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.