2020年4月24日
The Walking Dead: Saints & Sinners で Skydance Interactive が視覚的触覚と VR の身体性を追求
Skydance Interactive の共同創業者兼チーフ テクノロジスト、Peter T. Akemann です。このテック ブログでは、先日リリースした VR ゲーム、The Walking Dead: Saints and Sinners を紹介します。
VR ゲームでは、従来のゲーミング プラットフォームでは実現できなかったレベルのエクスペリエンスをプレイヤーに提供できることから、これまで長い間、身体性こそが VR ゲームの究極の目標であると考えられてきました。しかし、実際には、VR における物理は良いところばかりではなく、優れた瞬間がある一方で、ひどい場面や予想外の結果が生じることも多々ありました。サンドボックス化された環境における物理の目新しさがゲームの本質であるという場合はうまく機能していましたが、そういった事情から、物理を扱う VR ゲームのオーディエンスは限定的になっていました。
The Walking Dead: Saints and Sinners は、物理ベースの VR ゲームの先頭に立っている作品の 1 つです。「物理エクスペリエンス」を磨き上げて直感的で信頼性の高いコントロールの仕組みを作り出し、プレイヤーが大規模なゲームに集中できるようにしました。特に近接先頭のイマーシブさの点では、これまでにないレベルの VR ゲームが現実のものになり始めていると考えています。
この記事では、プレイヤー対ウォーカー (ゾンビ) の戦闘システムの概要を紹介します。コツやテクニックをいくつか重点的に取り上げるほか、どのような理解がシステム全体をまとめるうえで役立ったかを説明します。
基礎
“視覚的触覚”:百聞は一見に如かず
モーション コントローラは、標準的なゲーム用コントローラと比べると高次元で直感的な入力装置ですが、それでも抽象化が行われるものであり、ゲームの物理的な「現実」そのものからは離れます。プレイヤーの手の位置を入力として受け取ってそのまま使えば、物理的な表面を突き抜けることになり、手に持った物体の重さや慣性を感じることもありません。それでは、仮想的な環境と本当にインタラクションしているような感覚は得られません。
ここで欠けているのはハプティクス (触覚) です。辞書によるハプティクス技術の定義は、「ユーザーが実際の物体と直接インタラクションする場合に知覚するであろう感覚を、遠隔操作またはコンピューター シミュレーション内で再現すること」です。もちろん、そのようなテクノロジーは商用技術としてはまだまだ実現にはほど遠いものですが、
幸いなことに、私たちの意識は、目で見ているものがほかの感覚と食い違っていたとしても辻褄を合わせることに長けています。たとえば、障害物に出くわしたことが目に見えると、仮想的な手と現実の手の位置のずれをうまく調整できます。また、仮想的な物体からの重さや衝撃、物体による手への反応にも対応できます。期待される自然なフィードバックのループが説得力のある形で再現されると、フィードバックのループを「知覚」して、直感的に受け入れることができます。
そこで、私たちは、物理とアニメーションの一連の技術を表すために、「視覚的触覚」という用語を採り入れました。これらの技術によって、VR のプレイヤーによる手の動きが予測できるようになり、リアルになり、満足感を得られるものになり、効果的になります。
図 1:質量の異なる物体
物理的な手
まず、ゲームの手とプレイヤーの手を区別しました。ゲームの手はビジュアルとしては 1 つのスケルタル メッシュですが、物理的には 1 つの PhysX 剛体です。手のポーズのロジックにより、サーフェスと接触した場合にも外見上の指の位置は妥当なものになります。これによって、コリジョンを考慮してゲームの手をワールド内に留めることができます。
プレイヤーの手は、ゲームの手を操り人形のように操作します。プレイヤーの手が、線形コントローラとクォータニオン コントローラ、2 つの PID コントローラの設定値を決めます。これらのコントローラがゲームの手に復原力を適用します。ターゲットの位置と方向は常に動くので、積分コンポーネントは 0 であり、比例コンポーネントと微分コンポーネントが残り、実質的に振動は臨界減衰します。
PID のゲイン係数はスケールされて、ゲーム内でのプレイヤーの力とエネルギーのレベルをモデル化します。こうすることで、リアルな表現が可能になり、ゲームプレイに影響するゲーム内の有効な統計情報が提供されます。
グリップは物理的な手とワールド内の物理オブジェクトの間の物理コンストレイントとしてモデル化されます。プレイヤーの手のビジュアルによって、オブジェクトをしっかりつかんでいることが示されます。
その結果、重さ、線形運動量と角運動量、つかんだオブジェクトのコリジョンをリアルに知覚できます。
この身体性により、プレイヤーはつかんでいる物体の物理的な性質に応じたふるまいをすることができます。小さな物体はすばやく動かし、大きな物体はゆっくりと動かすことで、物理的なエクスペリエンスが強化されます。
ごまかしが必要だった点
PID の数値のセットに普遍的なものはなかったので、つかめるものすべてに対して手が反応していました。長い物体、たとえば斧や剣を扱うためにはより大きな力が必要でしたが、手に何も持っていない状態のシミュレーションを調整し過ぎないようにする必要がありました。そこで、つかんだ物体の慣性モーメントに比例する曲線で PID コントローラの強さをスケールすることにしました。
また、銃などの特定の物体については質量をごまかすことにしました。一部の物体については、プレイヤーは高度 (かつ非現実的) な操作をすることに慣れているからです。こうした工夫のおかげで、プレイヤーのエクスペリエンスは「リアリズム」を超えるものになりました。
図 2:両手で武器を持つ様子
グリップとオブジェクトの操作の詳細
オブジェクトの物理的な性質を楽しむうえでは、どのようにつかむかということが非常に重要です。片手で持つものも両手で持つものもすべて、プレイヤーが不自然な格好にならずに楽しめるようにする必要がありました。
そこで、それぞれのオブジェクトについて、複数のグリップ ポイントとグリップ スプラインを設定しました。あわせて、グリップ ポイントごとに動きと角度の許容範囲も指定しました。
オブジェクトを右手と左手の間で持ち替えたり、片手持ちと両手持ちを切り替えたりすることも簡単にできます。同じグリップ ポイントでも、方向によって持ち方を変える特別なアクションをいくつか追加しました (上の図 1 におけるナイフを参照)。
両手でのインタラクションにより、驚くほど幅広く自然な結果が得られ、直感的で物理的に感じられるようになりました。長いオブジェクトも、離れたグリップ ポイントを使うことで扱いやすくなりました。持ち手の距離を変えることで、重量の扱いと操作のバランスを管理できます。物理がその基盤となります。持ち方を変えると、それに応じて自然なアクションも変わります。
武器を派手に扱うことができるようになり、これによって、演出面でいい効果を生み出すとともに、プレイヤーが武器の達人となるスリルを味わうことができるようになりました。
近接戦闘
とがっていないオブジェクトは、近接攻撃でダメージを与えたり、ノックバックを発生させたりすることができます。そのために、ダメージを発生させる可能性があるイベントとして物理的な衝撃を解釈します。これは手に持ったオブジェクトと投げたオブジェクトの両方に該当します。
近接武器には特別なコライダー ジオメトリがあり、これによって武器のどの部分が (どの角度から) ダメージを与えるかを指定します。刃や棘がある武器のダメージ特性にこれが影響を与えます。
ヒットへの良い反応と、驚くほどリアルな傷のシェーダー (および傷口から見える肉の層、デカールの周辺の飛び散り、頂点の変形による傷口の深さと角度の表現) により、あらゆる形状やサイズの武器による各種のダメージを適切に表現します。
それは標準的なものですが、このゲームのシステムのなかで特に優れているのは、突き刺しのシステムと格闘のシステムです。
図 3:突き刺すアクション
近接攻撃と突き刺さる武器:突き刺しのシステム
突き刺しのシステムは The Walking Dead: Saints & Sinners の戦闘における特徴的な機能です。このシステムによって、武器が敵に突き刺さるようになります。刺さった武器は、十分な力を加えて引き抜く必要があります。
突き刺す過程には次のような段階があります。
1. 最初の検出
刺さる武器の先端の周辺にある、大幅に拡大したコリジョン ボリュームを使って、突き刺さってくるアクションを検出します。突き刺しのボリュームが、刺すことのできるサーフェスと接して、そのサーフェスにとって順当な速度があると、突き刺しが開始されます。
2.突き刺しの開始
必要に応じて、プレイヤー キャラクターを急速に少し前進させて間合いを詰め、プレイヤーの腕が突き刺すポイントに届くようにします。これは気分の良いもので、プレイヤーは多くの場合、自分が移動したことに気付きません。
それとあわせて、突き刺し可能なコリジョン サーフェスへの有効な突き刺しになるように、手に持った武器とプレイヤーの手が、許可される最短の位置と方向にスナップします。刃の先端は突き刺し可能なサーフェスに少し刺さった位置にきて、直交する適切な向きになります。衝突点にコンストレイントが作成され、武器の軸に沿った移動のみが許可されます。最初の衝突から、小さなダメージ イベントが発生します。
3.刺し込みと引き抜き
プレイヤーの手が刺し込みの方向に沿って変位すると、力を加えたものとして解釈され、突き刺し可能なサーフェスに刃が深く刺さっていきます。刃はその全長まで刺さることができます。全長を突き刺したところで最大のダメージ ペイロードが送られます。刃を引き抜くときには逆の曲線が使われます。
これらの曲線によってサーフェスの下での刃への抵抗を感じることができます。この感覚はとてもはっきりとしたものになることがわかっています。また、この変位モデルによって、必要な物理的アクションを身に付けやすくなります。
図 4:刺し込みと引き抜きの曲線
刺される側にも重要な役割があります。硬直した状態になったり、格闘に応じたりすることで、十分な抵抗を提供し、突き刺しが見事に行われるようにします。この点については後述します。
近接戦闘での NPC の挙動
根本的には、ウォーカーと NPC は、従来通りにモーション キャプチャと手作業によるアニメーション データを組み合わせて、アニメーション ブループリントで制御することでアニメーションしています。これには、頭部の動きの制御、エイミング、足の配置、体の一部または全体への攻撃に対するヒット リアクションの IK や、死亡時のラグドール状態を含んでいます。
ただし、Saints & Sinners での身体性を実現するには、物理的なエクスペリエンスを強化するために、いくつか追加のシステムが必要となりました。
図 5:刃物が少し刺さったアクティブ ラグドール
アクティブ ラグドール
NPC とウォーカーのアクティブ ラグドール システムの実装には、UPhysicalAnimationComponent を使用しました。UPhysicalAnimationComponent は、制約のない動き (プレイヤーと格闘しているときや、プレイヤーに刺されていてプレイヤーとつながっているとき以外) の最中に上半身で実行されます。プレイヤーの手、投げ付けられたオブジェクト、プレイヤーが手に持っているがヒット リアクションのアニメーションを引き出すほどの力は加えられていないオブジェクトなどによる小さな刺激に、キャラクターが反応できます。
このシステムによって、通常のヒット リアクションやノックダウン イベントを発生させるほどではない幅広い刺激に対して、自然かつ多様な形で反応できます。VR 環境では、プレイヤーはさまざまな形で自由に NPC の動きに干渉できるため、このようなシステムは必須です。このシステムがないと、キャラクターはロボットのようになり、非現実的に感じられます。
また、アクティブ ラグドールは、突き刺す処理における接触の感触も改善します。刺されたキャラクターが部分的に刺さった刃の存在に身体的に反応するので、リアルに感じられるようになるほか、刃を引き抜きづらくなります。
図 6:格闘の様子
格闘
Saints & Sinners はプレイヤーとウォーカーの間で双方向の格闘をサポートしています。
プレイヤーはウォーカーの頭をつかむことで格闘を挑むことができます (下の GIF を参照)。このとき、ウォーカーとプレイヤーのアニメーションを同期させる必要があります。そのために、アニメーション モデルを切り替えています。物理的な手のモーションを無効にして、IK によってウォーカーの頭にロックします。それから、ウォーカーは、つかんだ点を基準とする相対的なプレイヤーの手のモーションに基づく、オフセットの 3 次元のブレンドスペースを介してアニメーションします。こうすることで、物理的なインタラクションの感覚を保ちながら、結果を制御できます。プレイヤーがウォーカーから手を離すと、ウォーカーはよろめくアニメーションを始めます。これは、離される前の方向と動きのスピードに合わせたものになります。
ウォーカーがプレイヤーのどちらかの腕をつかむこともできます (2 体のウォーカーが同時につかんでくることもあります)。プレイヤーとウォーカーは共通のアニメーション ステートにロックされます。この場合もプレイヤーの手は物理から切り離されて、手の動きは 2 次元のアニメーション ブレンドスペースを動かし、逃れようともがく様子をシミュレートします。最終的には、ウォーカーが振りほどかれ、後ずさってよろめくか (プレイヤーが逃げた場合)、プレイヤーが噛みつかれます (おやすみ、プレイヤーさん!)。
この 2 つのモードは共存できます。たとえば、左手をウォーカーにつかまれながら、右手でそのウォーカーの頭をつかむことができます。
格闘のシステムは突き刺しのシステムと完璧に調和するものでもあります。ウォーカーの頭をつかんでおけば、ターゲットを固定しておけるので、ウォーカーを刺しやすくなります。さらに、両手を使うことができるので、ウォーカーの体から刃を引き抜くのもずっと簡単になります。
さらにチートが必要になった点
何者か (あるいは何か) の頭を刺して、ナイフを抜いていないと、その体を引きずることになります (図 3 を参照)。物理的に、引きずる物理チェーンの重さに加えて、プレイヤーの動きを引きずるオブジェクトに束縛することで、重さの感覚を強調します。
ここで安定性が問題になりました。質量が異なるオブジェクト間での長いコンストレイント チェーンは解決が難しいことが知られています。これはその点では本作中の最悪のケースと言えるでしょう。手→ナイフ→ウォーカーの頭部→ウォーカーの胴体 (そして残りの手足など) というチェーンでは、非常に重く不規則なオブジェクトがチェーンの一端にあり、反対側には強い復原力がかかるプレイヤーの手があります。そして中間にはとても軽いナイフがあります。その結果、手とナイフ、ナイフと頭のコンストレイント ポイントで絶え間なくジッターが発生しました。
この問題を解決するために、ナイフが刺さった状態ではオブジェクトの質量をごまかすことにしました。一時的にラグドールの全体的な質量を下げて、つかんでいるオブジェクト (この場合はナイフ) に下げた分の質量を加えます。プレイヤーの手がつかんでいる質量の合計はそのままですが、質量の分布が変わり、ずっとシミュレーションしやすくなります。 まとめ
Unreal Engine を使い慣れた少人数のチーム、VR のパワー、優れた戦闘のエクスペリエンスを作り出すという 1 点への注力によって、Skydance のチームは、ビデオ ゲームの直感的な物理戦闘の水準を引き上げることができたと考えています。
さらに、実現可能なことはまだまだあると考えています。VR の経済性が改善していくなかで、物理戦闘もさらに改善されていくでしょう。
後に続く人が大勢出てくることを願っています。
私たちのチームの一員となることに興味がおありでしたら、当社の採用情報をご覧ください。