ゲームデザイナーはどのように振動パターンを作成しますか?


13

コンソールコントローラーの振動パターンを作成して実装することに興味があります(PS4コントローラーの場合、違いがある場合)。

遅延とモーター速度のパラメーターは正しいですか?しかし、左のモーターから右にフェードすることも、一緒に機能させることもできます。

これらのパターンを作成する標準化された方法はありますか?

たとえば、オーディオエディターでステレオwavオーディオを使用してそれらを作成し、コード内のwavファイルを読み取って遅延と速度に変換することを考えました。

これはゲーム業界でどのように行われていますか?


ゲームのオーディオパイプラインを介して駆動されるランブルシステムを見てきました。ただし、特定のランブルトラックがあったのか、サウンドエフェクトボリュームからランブルが推測されたのか、または完全に独立したインターフェースを使用してサウンドとランブルをトリガーする接続だけだったのか、詳細については個人的な経験から話せませんソースデータ形式。
DMGregory

ランブルを正確に制御することはできません。また、DualShockでは、左のランブラーが重く、右のランブラーが軽いので、左側のランブラーから低い周波数が得られます。(私は左/右を後ろに持っているかもしれませんが、あなたはアイデアを得る)。
アルモ

@Almo任天堂のHDランブルシステムについてはどうですか。あなたは確かに支配のいくつかのフォームを持っている
バリント

質問が広すぎることが明らかになります。私は実際に彼らのシステムについて知りません。
アルモ

1
@DMGregory私が知っているオーディオエンジンは、ランブル/ハプティクスを処理するのに、オーディオ波形ではなく、同じトリガー、エンベロープなどを使用するだけです。Almoが言うように、APIレベルでそのレベルの制御を実際に持っているわけではありません。任天堂のシステムが大きく異なるとは想像できません。実際のオーディオデータが適切な選択であるような高い周波数でランブルシステムを更新する必要はありません。
リチャードバイロン

回答:


8

PS4デュアルショックコントローラーには、左右のランブルパック用に1バイトの値があるため、基本的に8ビットの音楽のように機能します。

これらのほとんどはNDAの背後にあるため、これに関する情報を取得するのは非常に困難です(上記の情報を取得するのは困難でしたが、node.jsのサードパーティSDKからしか把握できませんでした)。これらは私がつなぎ合わせた情報です:

このプロセスは文字通り1バイトのステレオ音楽を作成するようなものです(そして、それはおそらく音楽アーティストによって作成されます)。PS4コントローラーをコンピューターに接続し、プログラムを使用してランブルパターンを作成します。推測に基づいて1つを作成し、実行してから微調整し、パターンが心地よくなるまでこれらの手順を繰り返します。

いくつかのランブルはプログラムで生成されます(車が道路を離れるときなど)が、これらは通常、単純な関数(洞など)または電話が行う方法と同様の一定値です。最も複雑な効果でさえ、正規化されたランブルパターンに必要な強度を掛けることで構成されます。

PS4 SDKには、定義済みのパターンもいくつか付属しています。いくつかの例は次のとおりです:のこぎり歯パターン(絶えず増加し、そして255から0に行く)、正弦波および三角形(それは直線的に255に増加し、次に直線的に0に戻ります)。

他のコントローラーの詳細は見つかりませんでした(特にSwitchのHDランブル、特許でさえその仕組みについては説明されていません)。しかし、彼らはおそらくより正確なランブルパックで同様のアプローチを使用しているでしょう。

ソース:


しばらく前にこの記事を見つけました。この記事では、ランブルチャネルのバイトオフセットやそれらを制御するフラグなど、コントローラーとやり取りするためのレポート構造を示しています。これは、Sony独自のドキュメントとAPIにアクセスせずに、パブリックインターネットで利用できる最も包括的なものになる可能性があります。
DMGregory

@DMGregoryソースセクションに追加してもよろしいですか?
バリント

してください。:)私はそれが役に立つことを期待して共有しました。
DMGregory

4

標準化された方法はありません。

異なるデバイスには異なるランブル機能と制限があります。

大部分のデバイスは、実際の「フォースフィードバック」をサポートしていません(例:縁石/穴にぶつかったときにプログラマーが特定の角度に押し戻すことができるハンドル)。

だから、ほとんどのフォースフィードバックのは、MSDN / DirectXと他のAPIに言及したフィーチャ本当にユーザー市場に実際にマテリアライズしないか、そのような貧しいおよび/または持っていたことがない非ポータブルとして「スマート」のコントロール(封筒、繰り返し、など)の実装を使用できないため、実際には、開発者は独自のエフェクトの実装でON / OFFコントロールを直接使用することを余儀なくされることがよくあります。

汎用の入力APIは必要なパラメーター(正確な角度、正確な力、制限など)をサポートしていないため、サーボ制御の力フィードバックを可能にするより高度なデバイスにはカスタムAPIが必要です。

VRフィーリンググローブなどの新しいテクノロジーをミックスに追加すると、これらの汎用APIはさらに不足します。


最も一般的な実装は、それぞれが不均衡な負荷を持つ2つのDCモーターを使用するもので、一方は他方よりも重く、正確な速度制御はありません。

少なくともそれらをオン/オフ制御し、いくつかの制限されたPWMを実行できます電力制御をが、正確な速度制御はできません。あなたは実際に速度と結果として生じる振動が何であるかを知りません。異なるコントローラには、同じ設定に対して異なる速度で実行される異なるモーターと重量があります。

モーターは最初にスピンアップする必要があり、少しの間フルパワーを必要とします。その後、PWMを低く設定することができます。スピンアップ遅延により、応答性が大幅に制限されます。

コントローラーは多くの場合、フレームごとに1回更新され、おおよそ20Hz〜100Hzの更新頻度が得られます。これにより、モーターを最低設定で停止させたくないため、PWM制御の分解能が制限されます。そして、エンスト(停止)する前にエンドユーザーコントローラーのモーターがどれだけ低くなるか分からないため、十分な安全マージンが必要です。

一部のシステム要件では、それらを使用して実行できることをさらに制限しています。

通常、モバイルデバイスには振動モーターが1つしかなく、重量の大きさによる慣性が小さく更新速度が遅いため、PWMが使用できない場合があります。システムはそれをさらにフィルタリングして、悪用または損傷(パワードライバートランジスタの制限と誘導スパイク)を防ぐか、または非常に遅いGPIOサブシステムにすらします。

モバイルでは、PWMなしで「およそX * 50ミリ秒間振動する」ように制限されているか、制限したい場合があります。

一部の新しいデバイスとコントローラーには、低サンプルレートのオーディオ波によってスピーカーのように駆動されるソレノイドがあります。これらはより多くの制御を提供しますが、より一般的なコントローラーとは完全に異なります。


あなたはシュートと-忘れ形式で名前によって高レベルのマクロ効果の限られた数を再生するには、抽象振動系にしたいことがあり、すべてのこれらの違いのため:PlayVibration(player, "Got Loot");PlayVibration(player, "Heavy Fall");StopAllVibrationFor(player);、...

次に、各プラットフォームに個別に適応した低レベルの振動効果と振動制御コードを作成する必要があります

音楽ゲームの場合でも、ゲームの一時停止やスマートになる予定の周期的エフェクトジェネレーターの再同期の問題をPlayVibration考慮すると、ビートごとにワンショットを呼び出す方が管理と制御が簡単です。

実際のソレノイド駆動のランブルを備えたデバイスは、オーディオデバイスのように扱うことができ、バッテリーの懸念によりオーディオAPIを使用できますが、ソレノイドの電源が常にオン/アクティブの場合、システムの規制に違反する可能性があります。「電力レベル0」は「ソレノイドオフ」と同じでない場合があるため、その場合でも特別な注意が必要です。


3

Windows Game Programming Gurusの秘inのAndréLaMotheから:

これらのデバイスのプログラミングは非常に複雑です。フォース、スプリング、モーションを十分に理解する必要があるだけでなく、デバイスとフォースのイベント、またはエフェクトは、音符と非常に密接な関係があります。つまり、ジョイスティックのさまざまなモーターやアクチュエーターに力が加えられると、それらが力を変調するエンベロープを持つことができます。したがって、レート、頻度、タイミングなどの値はすべて、フォースフィードバックの使用とプログラミングに重要な役割を果たします。

そのテキストはかなり古いものですが、フォースフィードバックのためにMSDNで簡単に検索すると、言及されている概念はそれほど変わっていません。以下は、フォースフィードバックの基本概念で説明されているトピックの概要です。

  • 一定の力:単一方向の安定した力
  • ランプ力:大きさが着実に増加または減少する力。
  • 周期的効果:定義された波形パターンに従って脈動する力。
  • 条件:軸に沿った動きまたは位置に対する反応。
  • エンベロープ:エンベロープはアタック値とフェード値を定義し、効果の開始と終了の大きさを変更します。
  • オフセット:波形がベースレベルから上下にシフトされる量を定義します。
  • スケール:単一のゲイン値をデバイスのすべてのエフェクトに適用できます。

PS4に関して、私が見つけた唯一の事柄は、次のようなUnreal Engine 4のドキュメントでした。

これら(識別子)は、プラットフォーム固有の実装に従ってマッピングされます。たとえば、PS4はXXX_LARGEチャンネルのみをリッスンし、残りは無視しますが、XBox OneはXXX_LARGEをハンドルモーターに、XXX_SMALLをトリガーモーターにマップできます。また、iOSはLEFT_SMALLを単一のモーターにマッピングできます。

ステファンホッケンハルの答えが示すように、各プラットフォームは異なります。GDSEチャット示唆されているように、 PS4フォースフィードバックAPIの詳細はNDAで制限されている可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.