こんにちは、企画制作の後藤です。今回はVRにおける物理エンジンとモーションキャプチャーのお話をしたいと思います。
まずはこちらの動画をご覧ください。
この動画はUnreal Engine 4 (ゲームエンジン)にPhysX : FleX (物理エンジン)を導入し、Leap Motion (モーショントラッキング)を使ってインタラクトできるようにしたテストプロジェクトを、HTC vive (VRヘッドマウントディスプレイ)上で動作させたものです。
動画の中で動いている白い手は、私が動かしている手の動きに連動しています。ヘッドマウントディスプレイの正面に取り付けた、特殊なセンサーで手の動きをトラッキングしているので、コントローラーも必要ありません。 Leap Motion については以前このBlogでも紹介しています。
【速報】シリコンバレーより現地レポート/SVVR2017 3日目
https://www.daishinsha-cd.jp/blog/svvr2017_5
動画の中でフニャフニャしているモノは、物理エンジンを使って、岩のオブジェクトに軟体の特徴を持たせたものになります。物理エンジンとは、モノの重さや落ち方、接触した時の反発、摩擦を計算してCG上でシミュレートするシステムです。物理エンジンによっては流体や煙、破壊をシミュレートできるものもあります。水や炎などの表現は、昔からゲームでも見てきたよと思われるかもしれませんが、それらは、ほとんどの場合、あらかじめ作成したアニメーションを再生するか、イフェクトなどでそれっぽく見せているだけのものです。よく見ると同じアニメーションを繰り返していたり、平面的だったりします。一方、物理エンジンは、実際に衝撃があった位置や、その強さを元に毎回その結果を演算します。ですから、発生した力の位置や強さが少しでも違えばその結果が変わります。その時その時で同じ結果になることがほとんどなく、リアルな挙動を作り出すのです。
こちらは木製のイスのオブジェクトに軟体を適用した例です。
ここで使っている物理エンジン「FleX」は、GPUメーカーとして有名なNVIDIAが開発している物理エンジン「PhysX」の一種で、リアルタイムで粒の動きを演算できる物理エンジンです。粒のシミュレーションといっても、その対象は粒だけに限りません。液体や柔らかいもの、煙や布の動きまでシミュレートできてしまいます。なんでも、水の動きや軟体の動き、布の動きはすべて粒の動きで再現できるらしいのです。わけがわかりません。FleXの大きな特徴は、様々な素材の動きを同じ粒の物理エンジンを使って演算しているので、違う素材の相互干渉を表現することができるところにあります。例えば、水に浮かぶ浮輪や、水を包んだ風船、なんてものもリアルタイムでシミュレートできてしまいます。
NVIDIA FleX | NVIDIA Developer
https://developer.nvidia.com/flex
古くからVFX(映画の特殊効果)の世界では、崩れる建物や、水しぶきの表現など、様々な場面で物理エンジンが使われてきました。一方、ゲーム分野では服の揺れや、倒れたキャラクターのボディなど、ゲームデザインに影響を与えない範囲での部分的な採用にとどまってきました。その理由としては、処理の重さや、リアリティの不足、業界事情など様々ありますが、それらは現在ではだいぶ改善しています。それにもかかわらず、ゲームでの採用が進まない一番大きな理由としては、見た目や結果の制御の難しさがあります。ゲームでは、あらかじめアーティストが作成したアニメーションやイフェクトを使うことが好まれます。そのほうが見た目をかっこよくしやすく、判定などのプログラムも組みやすいからです。実行するたびに毎回結果の変わる物理エンジンはゲームデザイナーには好まれませんでした。
布の破れまでシミュレートすることができます。布の接触判定や揺れ方も、破れた後の形に沿ってシミュレートされているところに注目です。
水をシミュレートしたものです。わかりやすいように重力を無くしていますが、重力を有りにすることもできますし、ジェスチャーで有無を切り替えられるようにもできます。
物理エンジンがゲームの中核に据えられているゲームで、メジャーなものは『Angry Birds』くらいだと思います。
このゲームでは、物理演算の予期しない動きがゲーム性に寄与しています。トリをフリック操作で放って、様々な物理オブジェクトで囲まれたブタを倒すゲームですが、それで失敗したとしても、崩れる木や岩が、面白い動きをするのでまぁいいかという気持ちになりますし、狙っていたのと違った形で思わずクリアできることがあったとしても、その偶然性を織り込んだゲームデザインになっています。物理エンジンの不確定性という本来は欠点となる部分を、そのまま裏返してゲーム性に取り込んでしまっています。(このシステム自体は『Crush the Castle』というゲームが先行していたのですが……)ただ、このゲームはスマホゲームでもあり、かなり例外的な存在であることに変わりはないです。
ところが最近びっくりしたのですが、先日発売された任天堂ゼルダシリーズの新作『ゼルダの伝説 ブレス オブ ザ ワイルド』は、物理エンジンをゲーム性にかかわる部分に大胆に取り入れているらしいのです。(私はまだプレイしていないのですが……)さらに、火や水、風などの科学的な特徴もゲームに取り入れているそうです。物理エンジンをゲームバランスや見た目を崩さずに取り入れることは相当難しいはずですが、任天堂のことですから、よほどうまくやっているのでしょう。
まず2Dゲームで開発、社員300人で1週間遊ぶ!? 新作ゼルダ、任天堂の驚愕の開発手法に迫る。
http://news.denfaminicogamer.jp/projectbook/zelda
現在、3DCGでは物理ベースレンダリングと呼ばれるレンダリング方法が一般的になってきています。拡散反射光、反射率、金属非金属など、現実に存在する値を、オブジェクトの表面に適用、計算することで、様々なライティング環境下であっても、現実の見え方を再現できるようにするという考え方です。今後は、レンダリングだけでなく、オブジェクトの質量や硬さ、摩擦係数、温度などの情報も、現実の値に沿ってシミュレーションされる方向に向かっていくと思います。現実世界のパラメーターをコンピューター内にそのまま引き継げるようになった時、本物の仮想現実が出来するでしょう。
一方、モーションキャプチャーとして紹介したLeap Motion は、もともとVR用として開発されたものではなく、PC用のジェスチャーコントローラーとして発売されたものです。発売された当初はギークの間で話題になり、結構な数が売れたようなのですが、対応アプリはあまり登場しませんでした。ジェスチャーで操作するなんて、なんか未来っぽくてかっこいいからと導入したはいいけど、腕を持ち上げて小さな画面の中を操作するというのは、意外と便利な未来ではないことにみんな気づいたのです。マウスやキーボードで操作したほうが早いじゃんということになり、みんな抽斗の奥にしまってしまったのです。ところがその後、VRが開発者向けに販売されるようになると、Leap Motion をVR用のコントローラーとして使うということが、開発者の間でにわかに流行りだしました。その流れを受けて、メーカーも公式に対応したのです。今ではVR用に認識アルゴリズムが調整され、発売当初と同じハードウェアであるにもかかわらず、その精度は劇的に向上しています。
リアルタイム用の物理エンジン、モーションキャプチャーは、それぞれ技術的に可能だということで開発されましたが、いざ作ってみると意外と使いどころがないことがわかり、持て余されてきたという点で共通していました。Microsoftのゲーム向けモーションキャプチャーデバイスであるKinectも同様です。ところが、最近VRが注目されたことによって、それらに新しい息吹が吹き込まれたのです。ドラマチックですね。(誤解のないように改めて書いておきますが、映画などのプリレンダの世界では、これらの技術は広く使われてきました)
これからVRが発展するにつれて、物理エンジンやモーションキャプチャーの再評価が進むと思います。ゲーム分野だけでなく、シミュレーションやトレーニングで活用されることが期待できるからです。ゲームでは持て余されてきた技術が、これらの分野では活きてくるでしょう。VR内で「そこにいるような感覚」があるのに、モノに触れられず、ボタンでしか動かせないなんて不自然ですからね。