ガジェット通信

見たことのないものを見に行こう

VRで没入感を深める”手を使った自然なインタラクション” SIEが語る技術的な知見

DATE:
  • ガジェット通信を≫

8月24日から3日間にわたって開催されたCEDEC2016では、VRに関するさまざまな講演が行われました。

ソニー・インタラクティブエンタテインメント(以下SIE)の松生裕史氏と吉田弘一氏が登壇し、VRにおける実在感の伴ったハンドインタラクション実現のための知見を発表しました。

講演の前半で語られた、ハンドインタラクションを物理エンジンで実現するための解説を中心にレポートします。なお、中級者向けの講演だったこともあり、本記事はかなり技術的な内容になっています。

VRインタラクションの実現

「昨今のVRコンテンツでは、手を持ちこむことが可能になり、ハンドインタラクションの重要性がますます重要になった」と松生氏。

その実装の話の前に、まず「既存のゲームのインタラクションがどのようなものであったか」という確認から始めます。キャラクターが物と衝突して、物が転がる。視界にアイテムが吸着(掴む)、それを投げる。画面中央にアイテムが表示され、それを観察できる……など。

例えばテレビゲームを考えると、現実のプレイヤーはテレビの前で座ってコントローラーを持ち、ゲーム世界でキャラクターを表すオブジェクトが、ゲーム内の物体とアクションを起こしていました。

VRでは、プレイヤー自身がゲームの世界に入り込むような状態になるため、「手」の役割を果たすものは、かつてのような「キャラクター」ではなく、「プレイヤー自身の実際の手」になることが考えられます。

VRで、コンテンツの世界の中にプレイヤー自身が存在できるようになると、人は手を使ったその中の物をを触りたくなります。そうなると、一人称視点で自然に手の届く範囲のインタラクション体験が中心となり、これまでのゲームで登場したものよりも小さい物体との精密なインタラクションが必要になってくると考えられるのです。

ハンドインタラクションにおける「掴み」の重要性

それでは、日常生活で手を使うケースにはどのようなものがあるでしょうか?

松生氏は、ペンで字を書く、持ち上げる、ページをめくる、鍵を回す・・・などを挙げ、これらを「手や指で物を掴み、それを動かすことで達成される動作」とまとめました。そしてここから、「ハンドインタラクションの実現には、”掴み”という動作が重要になってくる」という点を指摘します。

さらに松生氏は、「掴み」という動作を分類して見せました。

まず「掴み」を大きく「1.手全体を使った力の要る掴み(Power Grasp)」と「2.指を使った精密な掴み(Precision Grasp)」の2つに分けます。

1.「指で掴む動作」(いわゆる”つまみ”の動作)は「2本指タイプ」と「3本指タイプ」の動作へ細分化されます。

また2.「手全体で掴む動作」は、さらに「球体を包むタイプ」と「円筒を包むタイプ」に細かく分けられます。手全体を使って掴む行為は「指一つ一つを正確に表現する必要が無いため、比較的簡単に実装が可能」とのこと。

そして話題は「掴み操作をどのように実現するか」へ進んでいきます。

「幾何計算やアニメーションで掴ませる」という手法は、「あらかじめ決められた動作なら十分だが、VRで、様々なオブジェクトと自由なインタラクションを実現するには解決すべき問題が多い」と言います。

手や指の貫通、手に持った物体とは別の物体との相互干渉、両手で持った時の振る舞い・・・など、不自然になりやすいポイントが多く存在します。VRではこれらのちょっとした不自然さが強調され、没入感の阻害に繋がってしまいます。

その解決策として、物理エンジンンを活用して上記の不自然さを解決する方法が解説されました。

手全体を使う掴み操作

まずは指での掴みに対して、比較的簡単に実現が可能とされる「手全体を使う掴み」について。

PSMoveを使ったVRハンドの実現

PSVRで使用するコントローラー「PlayStation Move」は、棒の先端に球体が付いている形状をしています。

PSMoveを使ってVRハンドを実現する場合、トリガーを引くと判定領域内の物体を掴む仕組みになっています。ここで言う判定領域は、コントローラー先端についた球体の周りに球状
に広がる領域です。「掴み」が実行されると、VRハンドと掴んだオブジェクトが繋がることになります。

速度ベースでの処理


VRの中で物をつかむ時、手の不自然な貫通が起こりやすくなります。

物を掴もうと手を伸ばす際、「VR内の手があるべき位置」として「現実のコントローラーの位置」をそのまま採用してしまうと、手が物に貫通することが起きます。

そこで「VRハンドの位置は現実の手の速度を利用して決めると良い」と松生氏は指摘。掴もうと手を伸ばす速度を計算して、VR内の物体に至ったところで手が止まったように見せる方法です。

現実とVRで手の位置がずれが生じますが、脳は視覚を優先するのでVRハンドの位置を実際の手の位置だと錯覚し、本能的に手を止めるとのこと。

近距離インタラクションの精度を上げる方法

次に松生氏は、近距離の動作の精度を上げる方法に言及しました。ここでは「長さの単位を変える」(小さい物体を数字上の大きな数字で表す)やり方を挙げています。例えば、ゲーム内で1という長さを1mと扱いながら、物理計算の中では1を10cmだと扱うことにすれば良いということです。

逆に言えばゲーム内の1mが1、物理の10cmが1、ということになります。これにより、半径5cmの球体について、ゲーム内では半径0.05(100cmを1としている)、物理計算では半径0.5(10cmを1としている)と扱うことができ、計算の上では大きな数字として扱うことができ、見かけ上の精度が向上します。

ただし、これによって長さに関わる他の単位も合わせて変換する必要があることに注意が必要です。例えば重力加速度は9.8から98にするなど、物理法則の整合性を取らなければなりません。

また、オブジェクトが数値上で大きく動く(例えばゲーム内の1mが物理体系の10mになる)ことで挙動が不安定になる可能性があるので、タイムステップは120Hz相当にするなど小さく取る必要もあります。

手の位置のスケールを変える

物理スケールの話に続いて、手の届く範囲を拡張するという手法も紹介されました。

VRにおいては移動をすると酔いに繋がりやすいことから、「なるべく動かずに遠くのものを掴みたい」という要求が生じることがあります。しかし、手の移動スケールを遠くに合わせると、手元の近いところでの精度が悪くなってしまいがちです。

そこで、「手とヘッドマウントディスプレイの距離が小さいところでは曲線的に手の届く範囲を縮め、逆に手がHMDと遠い時はこの範囲を大きくする」という手法が効果的です。手の届く範囲は単純な比例ではなく、プレイヤーに近いところでは実際よりも移動距離が小さく、遠いところでは実際よりも大きく移動させるのがポイントです。

VR内で見えている手と自分の実際の手の位置は1対1に対応していなければ手の実在感が損なわれてしまうため、あくまでVRハンドの表示される位置は現実のものと同じにしたまま、「手が届く効果を得られる範囲」のみを変えるような処理になります。

こうすることで手元のインタラクション精度が向上します。遠くのものは、近くに寄せてから精度の良いインタラクションを行えば良いという考えに基づいたものです。

指を使う掴み操作

続いて松生氏は「指を使った掴み」(Precision Grasp)の説明に移りました。

VRハンドの拡張モデル

「指を使った掴み」実現の基本方針は、「手全体の掴みで用いたVRハンドを拡張する」というものです。

人間の指において、親指・人差し指に比べて、中指・薬指・小指は大抵の場合まとまって動くことが知られています。松生氏は「例えば、後者3本の指の第一関節を個別に動かそうとするのはなかなか難しい」と例を挙げています。

さらに、掴みという動作を分類した際に示した通り、「指での掴み操作は2本指タイプと3本指タイプでほぼ網羅される」として、「指の数は3本(親指、人差し指、中指・薬指・小指をまとめた1本)、関節の数は各指にそれぞれ2つ」という簡易的なモデルを考えることができると紹介しました。

重要な点として、各関節に最大拘束力を設定しておく必要があるということです。これは、強い力で物を握った時に、関節が自由に動きすぎると不自然に曲がってしまう恐れがあるためです。


ただPSMoveには各指を制御する機構がないため、Moveコントローラーでこのモデルを再現する場合は、「コントローラー背面のトリガをどれくらい握り込んだか」というアナログ値を利用して、全ての指は同じ速さで同時に回転させる方法を取った、と松生氏は言います。

摩擦の表現

掴み操作において重要になるのは「摩擦」と松生氏は強調します。

コントローラー入力から計算される「実現されるべき手の形」を”ターゲットポーズ”、「物理法則に従った上で、VR内で描かれる指の位置」を”物理ポーズ”と用語の紹介。

まず物を掴んでいる状態を考えます。摩擦有りで徐々に滑っていく時、現実の指の掴み力(PSMoveの握り)はそれを止めようと徐々に強くなっていきますが、これをそのまま表現するとVR内で指が物体を貫通してしまいます。なぜならVR内のオブジェクトは指を受け止める「物理表面」を持たないので、いくらでも深く握れてしまうからです。それゆえVR内でレンダリングされる指は、現実の指の位置と違い、物体表面で止める必要があります。

このことを踏まえて、VR内での摩擦力の計算手法のひとつとして、この「貫通の深さ」に応じて摩擦力を決めるという方法が紹介されました。貫通が深ければ深いほど強く握っているということなので、摩擦力も強くなる、というものです。つまり、物理ポーズ(VR内であるべき手の位置)とターゲットポーズ(コントローラーの入力的に実現されるべき手の位置)のずれの分だけ摩擦力を発生させれば良いということになります。

掴み操作の実現

松生氏は、実際に掴み操作自体を実装するために、各指ごとに以下のような拘束を設定すれば良いと述べました。

・まず、指が掴もうとする物体に触れる。
・すると現実の手とVR内であるべき手がずれる(貫通する)。
・この貫通の度合いで摩擦を発生させる。
・この時、拘束は手と物体を接続するように働く。
・指が設置点が多少ずれても拘束は解かない(拘束は指ではなく手に付与する)ようにし、逆に大きく離れたら解放する。

しかし摩擦だけでは、剣など振り回すものを固定しきれない場合があります。素早く振り回したときに剣がどこかに飛んでいってしまっては困ります。

そこで、普通の摩擦より大きな力で握りたい場合のために、指三本で掴んだときは手全体での掴み(Power Grasp)状態に移行することを提案しました。

この状態で、例えば腕を早く動かしたとき、物体に触れたときよりも指が開いていない場合、もしくは物体がPower Grasp判定領域内にある場合、プレイヤーはその物体をまだ握っていたい(離したくない)のだと判断し、拘束を解かないようにします。

ただし注意点として 、握りを放した時に「特定の指だけが不自然にくっついたまま」という状態を避けるべく、拘束解除に関しては全ての指を同時に行うようにするべきだ、と付け加えました。

それと関連して、握りの状態を指と物体の接点数に応じて更新する手法が紹介されました。指1本と指2本で触れる場合はそれぞれ互いに状態遷移を起こせる一方で、3本の指を使ってPower Grasp状態になった時は、プレイヤーの「まだ握っていたい」という意思を汲んで拘束が簡単には解けないように設定しているモデルです。

このような判定を指ごとに行い、前フレームの状態と比較して場合分けすることで状態を定義していきます。


以上3本指のモデルをずっと考えてきましたが、松生氏は「これを拡張すれば5本指のモデルも実装可能」と添えています。

安定性を改善するためのTips

松生氏は他にも、「指の角度をロックする」、「ターゲットまでの距離を制限する」など振る舞いを安定化させるための手法を紹介しました。


動画による復習

後半を担当するのは同じくSIEの吉田氏。まずは今回の講演のために制作されたハンドインタラクションデモのプレイ動画を用いて、これまでの講演内容を復習するところから始まりました。


実体の手は物理ポーズ(VR上で物理法則に反さないように実現される手)、そして半透明な手はターゲットポーズ(コントローラー入力値から実現された手)を表しています。これらの差異から物理ポーズに与える速度や摩擦を計算しています。


掴みの種類は1本指、2本指、Power Graspの3状態があると説明。3本指で掴んでも5本指で掴んでも、どちらもPower Grasp状態であり、Power Grasp状態と2本指状態で引き合うと、Power Grasp状態が勝つ、という様子も収められています。

今回の講演はかなり技術的な内容になりました。「VRに手が入ると没入感が一気に増す」というのは確かですが、その裏舞台である実装には、VRならではの状況に対応し、没入感を損なわないためにさまざまな試行錯誤が繰り返されていたことがよく分かります。

HTC Vive、Oculus Rift、PSVR全てのハイエンドデバイスで、今後VRでの手による操作が可能になります。手の動きに関する知見もさらにたまっていくことが予想されます。

CEDEC2016では、OculusもOculus Touchを使ったインタラクションのデザインについての講演を行っています。その講演のレポートは別記事にてお伝えします。

カテゴリー : デジタル・IT タグ :
Mogura VRの記事一覧をみる ▶
  • 誤字を発見した方はこちらからご連絡ください。
  • ガジェット通信編集部への情報提供はこちらから
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。

TOP