>   >  ゲーム最高峰のビジュアルクオリティを生み出すNaughty Dogの開発手法【GDC2017レポート Vol.4】
ゲーム最高峰のビジュアルクオリティを生み出すNaughty Dogの開発手法【GDC2017レポート Vol.4】

ゲーム最高峰のビジュアルクオリティを生み出すNaughty Dogの開発手法【GDC2017レポート Vol.4】

<2>ゲームシステムとアートワークの巧みな連携

「Uncharted 4': Workflow and Prototyping」の後半では、キャラクターがドアを開けて進む際のごく短いトランジション(カットとカットの間の切り替え効果)のカメラ演出や、カーチェイスをしながらの活劇、群衆の中を進む際のNPCの自律的な動作のプロトタイピングについて解説された。前項で紹介したカットシーンとは異なり、こちらはイベント発生時の各キャラクターの振る舞いがプログラムで制御されている。ただし、ひとつのアクションに対してどのアニメーションを再生するかの選択や、アニメーションの組み合わせ、カメラ位置やパスといった要素は、全てスクリプトやスクリプト内のパラメータを変更することでアーティストが調整可能となっている。

意外だったのは、提供されている開発者向けのフロントエンドが、アーティストに優しいタイムラインベースの編集環境ではなく、ストイックなテキストベースのスクリプトであったことだ。Naughty Dogではテクニカルな作業に精通した人材に困らないということなのだろうが、全て意図通りに制御するには、なかなか骨が折れそうだ。

▲疾走する四輪駆動車に飛び乗ったり振り落とされるなど、キャラクターのアニメーションは多彩。基本的な動きはモーションキャプチャによるものだが、車のスピード・車の方向・車上のキャラクターがしがみついている位置といった変動する要素がスクリプトにより取得され、自律的にキャラクターが振る舞いを変えるようにつくられている

▲プレイヤーと群衆のインタラクションやカメラの制御については、複数の案を開発環境でテストする

ゲーム内でアニメーションするキャラクターは「生物」だけではない。カーチェイスに登場する四輪駆動車もアニメーションの対象だ。こちらは別セッション「The Science of Off-Roading: 'Uncharted 4's' 4x4」において、プログラムで四駆の挙動をシミュレートしてリアルな動きをつくるためのアプローチが解説された。

『UC4』で目指された四輪駆動車のアニメーションは、『マリオカート』のようにリアリティはなくともゲーム的な楽しさを重視した動きと、『グランツーリスモ』のように実際の車の動きを忠実にシミュレートしたゲームとの中間だ。これはなかなか野心的な試みである。というのも「中間」であるということは、この両者が与えるゲームの楽しさを併せもつゲームにしなければならないことを意味するからだ。

実際のところ『UC4』の四輪駆動車を動かすシステムは、かなり本格的だ。同セッションでシステムの詳細を知る前は、プレイ中の画面や操作感からもっと『マリオカート』よりのイージーなシステムを想像していたのだが、良い意味で裏切られた。『UC4』では、プレイヤーがアクセルをどれだけ吹かせたかとエンジンの回転数から車輪のトルク(タイヤを回す力)を計算している。さらにハンドルを左右に切ると、その状態によって、4つのタイヤそれぞれのトルクが変化するようになっている。また、タイヤが受ける力も駆動力・ブレーキ・タイヤの滑り(摩擦抵抗)が考慮されている。そのおかげで悪路でのタイヤの食いつきや、ステアリングを切るタイミング、量からリアリティのある車の動きが再現されている。

▲『UC4』の四輪駆動車の動きは、運動に対する物理的な影響のうち代表的な値を抽出し、かなり本格的にシミュレートされている

<3>頂点シェーダが担う役割

『UC4』では、ゲームルックのかなりの部分を頂点シェーダで加工してから出力している。ひと言で言うと、いわゆる「プロシージャル技法」ということになるのだろうが、その範囲はかなり広範に渡る。「Technical Art Techniques of Naughty Dog: Vertex Shaders and Beyond」と題されたセッションでは、この頂点シェーダの役割について解説された。

モデルの形状が変化するアニメーションは、そのほとんどが頂点シェーダ単独によるものか、あらかじめデータとして用意されたシェイプアニメーションと頂点シェーダとの合わせ技だ。とりわけ、風のながれを受けてキャラクターの衣服がバタバタとたなびくさまや、雨天で雨に濡れたときに髪の動きが重くなる表現は秀逸だ。空間中に常に風がながれており、その強さや方向を制御するウインドシステムや、水中から陸上に上がった際、水濡れが次第に乾いていく水濡れの表現は他社の作品にもあるが、『UC4』では、さらに一歩進んだ表現を行なっている。

具体的には、衣服が風になびく様子は通常使用するノーマルマップ以外に、別途用意した向き情報をもったノーマルマップを参照して頂点シェーダで変化を与えている。風に押されてできるシワがシャツ全体ではなく一部にだけに及ぶように、この向き情報をもったノーマルマップをマスクして、衣服のシワの形状をつくり出し、これにさらに下向きにスクロールする2軸のノーマルマップとブレンドして、最終的な衣服の動きをつくり出すといったようにかなり芸が細かい。また髪の水濡れも、衣類のシワ同様の拡張ノーマルマップを活用したウィンドシステムと物理演算による重力との掛け合わせで実現している。

▲衣服のシワが変化する際に参照される情報。拡張ノーマルマップに加えて、下方に向かう大きな動きをつくるためのフロー用ノーマルマップが用意されている。物理的に正しいしくみが多い『UC4』のしくみのなかで、後者は珍しくかなり作為的だ

▲雨に濡れるにしたがいキャラクターの髪の動きに変化が生じる。雨が降っていないときには重力パラメータはゼロで計算され、動きが大きい

キャラクター以外のアニメーションでは、旗がたなびく様子もウインドシステムで制御される。旗は頂点カラーに格納した値を参照して、無風でポールに沿って垂れ下がっている状態から、風を受けて真横にたなびいている状態の間をモーフィングアニメーションするようつくられている。そこに、さらにウィンドシステムによる動きをブレンドして最終的な表現としている。

▲無風状態(左)と風を受けた状態(右)。ポールが水平でぶら下がっている旗でも、ピボットとノーマルによる風のシミュレーションでアニメーションしている

モーフィングは衝突によって進んで行く自動車の変形にも活用されている。変形を表現するために、あらかじめ頂点カラーとして衝突によって生じる凹凸を表現するための座標が車体モデルに埋め込まれている。変形状態の変化を管理するレンダーターゲットにダメージを書き込めば、頂点シェーダがその値を参照して車体の表面に変形が現れる「スキンドモーフターゲット」というシステムが用意されている。

このほか、画面内のディテールを充実させるために、雨の強弱を制御する情報をスケールアニメーションのデータとして格納しておき、ゲーム内の天候の変化に応じて自律的に変化するシステムにレイキャストを応用していたり、水面に浮かぶボートと水面との境目の部分に描かれる泡沫の表現が、ボートの上下動と左右の回転ブレの動きにしたがって自動的に発生するなど、細やかなつくり込みがなされている。これらは全て頂点シェーダのレベルで実装されている。

▲四輪駆動車が衝突して破壊されていく様子は、「スキンドモーフターゲット」というシステムで実現している

▲雨の状態によって水濡れ表現は変化していく。またボートに打ち寄せる波が引き起こす水泡もボートの運動から計算され、水面を描く際にシェーダが計算結果を参照する

総括

Naughty Dogのセッションで感じられたことは、あらゆる面において「芸が細かい」ということだ。通常のプロジェクトの場合、ここまで何から何まで細かくつくり込むことは難しいだろう。とは言え、たとえ一部でもこれらのテクニックからヒントを得て、自分たちのプロジェクトに合うようアレンジして導入することができれば、ゲームのビジュアル品質が向上することは間違いない。同レポートがクオリティ向上の一助となれば幸いだ。

特集