8月30日(水)から9月1日(金)の3日間にわたり、パシフィコ横浜で日本最大のコンピュータエンターテインメント開発者向けカンファレンス「CEDEC 2017」(コンピュータエンターテインメントデベロッパーズカンファレンス2017)が開催された。本稿ではビジュアル・アーツ系のセッション「壊れ物への取り組み いかにベイクを美しく魅せるか」の内容をレポートする。

※本記事内の画像および動画は、講演者様の許可を得て掲載しております

TEXT & PHOTO_小野憲史 / Kenji Ono
EDIT_小村仁美 / Hitomi Komura(CGWORLD) 、山田桃子 / Momoko Yamada

<1>アニメーションとリアルタイム、2つの破壊表現

前世代機から徐々に採用がはじまり、今世代機になって一般化した物理シミュレーション。近年ではDCCツール上で事前計算した内容をベイク処理し、アニメーション再生することで、よりリッチな破壊表現が可能になった。カプコンで『バイオハザード7 レジデント イービル』(以下『バイオハザード7』)の制作に携わったテクニカルアーティストの滝 崇海氏は、同作で行われた「魅せる破壊」のノウハウについて解説を行なった。

『バイオハザード7 レジデント イービル』での破壊表現の例

建物が爆発し、大量の破片が飛び散る......。現実では大惨事だが、ゲームではスカッとする瞬間だ。こうした表現をリアルに行うために、AAAゲームを中心に物理シミュレーションの活用が進んでいる。ゲーム中に岩やラグドールがリアルタイムで転がるといった単純な表現からはじまり、近年ではイベントシーンやカットシーンにおける演出の一環として、より複雑な表現も可能になった。これによって生まれてきたのが「魅せる破壊」という概念だ。

こうした状況の変化にともない、カプコンでは2013年に物体の大量破壊や衝突、髪や衣服などの揺れモノを担当する「物理班」が発足した。業務内容はシミュレーション全般にわたり、Mayaで揺れモノの物理シミュレーションやClothシミュレーションを行なったり、RE ENGINE上で直接物理やClothシミュレーション、ラグドールなどの挙動を設定したりといったことが中心だという。もっとも、慢性的に人手不足なのが玉に瑕だ。

業務内容からもわかるとおり、破壊表現には2種類の方法論がある。「DCCツール(ここではMaya)で事前計算した結果をアニメーションとしてベイクし、ゲームエンジン上で再生する」ものと、「ゲームエンジン上で直接、リアルタイムに演算して表現されるもの」だ。滝氏は、前者はド派手な表現ができる一方で、プレイヤーがインタラクションできない。後者はその反対だと整理した。『バイオハザード7』でも、この両者が状況に応じて使い分けられている。

アニメーション再生による破壊の例。インゲームのイベントとカットシーンにて使用された

物理シミュレーションによるリアルタイム破壊の例。プレイヤーの操作に合わせた破壊に用いられた

このうち前者では破壊プラグイン「Pull down it for Maya」が使用され、後者では物理ミドルウェアのHAVOKが活用された。ナイフで木箱を壊したり、敵キャラクターが攻撃を受け、手足が破損したりといった表現は、リアルタイムでの破壊表現ならではだ。これに対して事前計算では、何度もシミュレーションをやり直すことで、よりドラマチックな演出が可能になる。滝氏は「後者の使用は基本的な部分に留まっている」として、主に前者のワークフローについて解説した。

▶次ページ:
<2>Pull down itを使用した破壊表現のワークフロー①

[[SplitPage]]

<2>Pull down itを使用した破壊表現のワークフロー①

前述の通り、アニメーション再生されるような破壊は、主に演出の一環として、大量に破片が飛び散るような表現で多用される。そのため作成にはあらかじめ破壊される箇所と、その周辺の背景やキャラクターなどのデータが必要になる。

次に破壊されるパーツをPull down itで分割し、それ以外の部分をシミュレーションの負荷を下げるために簡易メッシュに置き換えたり、剛体を設定したり、キャラクターのボーンにカプセルなどをコンストレイントしたりする。

その後、Pull down itを使って何度もシミュレーションをくり返しながら、調整を加えていく。こうして完成したアニメーションデータをRE ENGINE上に配置し、ゲーム内のイベントとして再生する......というやり方で制作される。


大半の作業はMaya上で完結する

講演中で紹介されたのは、敵キャラクターが建物の外から窓を通って上半身を乗り出してくるシーンだ。窓は内側から木の板が打ち付けられており、敵キャラクターの突然の出現で打ち破られ、破片が周囲に飛び散る。この破片の散乱がPull down itを使ってシミュレーションされ、ベイクされた後に、RE ENGINE上でアニメーション再生されるというわけだ。以下にその内容を解説する。

①背景にキャラクターをインポート

キャラクターを動かして、手が届く範囲などを確認し、どこを破壊させるか確認する

②破壊する箇所を分割する

破壊する箇所が決まったら(ここでは木板)、Pull down itを使って分割していく。材質や分割点を調整しながら、木材らしく壊れるように破片を設定する。最終的に分割数は256個にのぼった。その後、いくつかの破片を統合するなどして、破片を整えていく

③破片の完成

完成した破片を並べる。下の2つは破壊されないため、ピンク色で区別されている

④キャラクターにカプセルを拘束

キャラクターのジョイントにカプセルを拘束していく。キャラクターのメッシュに合うようにカプセルの大きさを調整する。右手の拳については、最初に破壊したときのインパクトを出すために、実際より少し大きめに設定されている

⑤背景をスタティック剛体に設定する

破片が飛び散った際に、物理法則に則って散乱するように、背景にスタティック剛体を設定する。時にはシミュレーションの負荷を軽減するために、簡易メッシュに差し替えられることもある

⑥カプセルのキャラクターをキーフレーム剛体に設定する

同様にカプセルのキャラクターをキーフレーム剛体に設定する

⑦破壊される箇所をダイナミック剛体に設定する

同様に破壊される箇所をダイナミック剛体に設定する

⑧シミュレーション開始

Pull down itを使ってシミュレーションを開始する。キーフレーム剛体に設定されたカプセルが、ダイナミック剛体に設定された木枠にぶつかり、破片が周囲に飛び散る。飛び散った破片はスタティック剛体に設定された床や壁にぶつかって止まる

⑨アニメーションにベイク

シミュレーション結果をアニメーションにベイクする。その後、RE ENGINEにインポートされ、イベントシーンとして再生される

①~⑨のながれをまとめたのが下記の動画だ。

▶次ページ:
<3>Pull down itを使用した破壊表現のワークフロー②

[[SplitPage]]

<3>Pull down itを使用した破壊表現のワークフロー②

ポイントは求める結果になるまで、何度も調整をくり返すことだ。時にはゲーム内の仕様に合わせて、特殊なカプセルが用意されることもある。敵キャラクターがスコップでテーブルを破壊するシーンでは、ゲームの展開に合わせて敵キャラクターがあらゆる方向からテーブルを破壊するという仕様に対応する必要があった。そのため、敵キャラクターにカプセルを設定するのではなく、キャラクターのアクションに合わせて上空からボール上のカプセルを落下させ、テーブルを破壊する方法が採られた。


テーブル破壊シーンのカプセル設定の様子

上空からキーフレーム剛体に設定されたカプセルが、ダイナミック剛体に設定されたテーブルにぶつかり、破片が周囲に飛び散る設定がほどこされている。なお、ボールは大小2つが時間差をつけて落下することで、よりテーブルが複雑に破壊されるように工夫されている。また、テーブルの周囲には同様にダイナミック剛体に設定された枠がつけられている。なお、ボールや枠は実際には透明であることは言うまでもない。

当初は単純にテーブルを破壊してみたが、あまり面白い破壊表現にならなかった。そのためテーブルの周囲に前述した枠を設定することで、大きな破片が上空に飛び散るような動きが表現でき、よりダイナミックな印象を与えることに成功したという。なお、床や壁はシミュレーションの負荷を下げるため、簡易メッシュに置き換えられている。

単純にテーブルを破壊した場合のシミュレーション結果

テーブルの周囲にダイナミック剛体の枠を設定した場合

しかし、Pull down itを使うと断面の形状も自動的に作成してくれるが、元の形状が複雑な場合は、断面が入り組むなど、綺麗に表現されない場合がある。そのため断面を手作業で埋めることもあったという。断面のUV展開もスクリプトで自動化するように工夫する必要があったという。


木材の破片。緑の部分が断面にあたる

また、テーブルが破壊されることで、その前後でのポリゴン数が飛躍的に増加する。下図の例では3倍近くポリゴン数が増加している。そのため前述の通り、床や壁などは簡易メッシュに置き換えて、シミュレーションの負荷を軽減させる必要もあった。


破壊作成前後のポリゴン数比較

▶次ページ:
<4>リアルタイム破壊

[[SplitPage]]

<4>リアルタイム破壊

ゲーム中でプレイヤーのアクションなどに応じてリアルタイムに破壊されるものについては、前述の通りHAVOKが使用されている。Maya上でのHAVOKツールの使いやすさや、ゲームエンジン実装後の機能面の充実度などから選定されたという。Maya上で分割やPull down itで破片モデルを設定する点では同じだが、破片数を数十個程度に抑えることで、一度に大量に破壊されても処理負荷が増大しないように工夫しているとのこと。


できるだけ小さい分割数で、できるだけ見た目に派手な印象を与えるようにする点がポイント

HAVOKのビジュアルデバッガで破片の飛び散り方を確認。ビジュアルデバッガを使えば、HAVOKで設定している物体(ここでは黃色のパーツ)を強調して表示させられる

最後に滝氏は、改めてアニメーション再生とリアルタイムのちがいについて考察した。アニメーション再生は壊れ方を完全に制御でき、大量に動かしても処理が早いが、何度再生しても壊れ方が一定で、プレイヤーがインタラクションすることもできない。これに対してリアルタイムの物理シミュレーションでは、インタラクションができる反面、壊れ方を制御しづらく、ドラマチックな演出にも向かない。

また、本作ならではの特殊事情として、PlayStation VRに対応させるため、フレームレートを常時1.2ms以下に保つ必要があった。滝氏は「我々は圧倒的な破片数やドラマチックな壊れ方などを通して、印象に残る破壊シーンの生成を目指している」とコメント。様々なデメリットを考慮したとしても、まずはアニメーション再生を用いた破壊表現に力を入れていきたいと語った。