ニュース

「Uncharted 4」に見るバーテックスシェーダーの仕事

Naughty DogがGDC2017の締めくくりにアートテクニックを公開

2月27日~3月3日開催

会場:San Francisco Moscone Convention Center

Naughty DogでLead Technical Artist、Andrew Maximov氏

 GDC 2017の最終日となった3日、Naughty Dogは、「Technical Art Techniques of Naughty Dog: Vertex Shaders and Beyond」と題して、同社の人気アクションアドベンチャー「Uncharted 4」にバーテックスシェーダーを活用して実装されている要素について解説するセッションを行った。

 本セッションに登壇したのは、Naughty DogでLead Technical Artistを務めるAndrew Maximov氏だ。Maximov氏が本セッションで挙げた「Uncharted 4」のバーテックスシェーダーでやっていることは、なかなかに多彩で興味深い。

 本セッションは、基本的にSIGGRAPH 2016での内容を踏襲したものだったが、GDC 2017の最終日、しかも最後のコマとあって、会場となったクラスルームには立ち見が出るほどの開発者が詰めかけて超満員となり、入場制限が行なわれるほどであった。

 今回のGDCでは、実に15ものセッションを開催したNaughty Dog。GDCの締めくくりであり、同社にとってもラストセッションとなった本セッションの内容を早速ご紹介する。

 そもそもバーテックスシェーダーとは何か。最近のGPUでは、役割に区別のないユニファイドシェーダーになり、計算の段階も細分化されているため、もはや便宜的な区別にすぎないがが、伝統的にはGPUでグラフィクスを描画する演算を行なう部分のうち、バーテックス、つまり3次元の座標である頂点(バーテックス)を計算して、バッファに書き込むまでの部分を担う計算ユニットを指す。本セッションで言うバーテックスシェーダーという言葉も、そういった文脈で使用している。なお、実際に画面にグラフィクスを描くためには、引き続いてピクセルシェーダーを起動して、画面を占めるピクセルのひとつひとつの色を求めた後、描画させることになる。

 現代では、バーテックスシェーダーが3Dの頂点データの集合体を、カメラから見た2Dの頂点に変換して、“絵の素”を作る際に、アーティストが作成したオリジナルの3Dの形状や色のデータにいろいろと細工して、オリジナルのデータから変化した形状や色をダイナミックに作り出すことができる。これがシェーダーにおけるプロシージャルが意味する主要な部分であり、この部分を工夫してしっかりやることで、他のゲームと差別化を図るのが、重要な意味を持っている。

【Uncharted 4 General-Purpose Vertex Processing - Naughty Dog】

 「Uncharted 4」の実装で興味深いのは、いくつかの基本的なシステムの組み合わせで、多彩な変化を生み出していることだ。大前提として、空間全体には、風を制御するウィンドシステムが存在する。

 このウィンドシステムとの組み合わせの対象となるのが、1点を中心軸(ピボット)にして変形するような要素で、具体的には、草や木の枝の根元を中心軸にして折れ曲がる様が該当する。ただし、草木がなびくのは、ウィンドシステムからの影響だけではなく、葉先が激しくバサバサとたなびく動きは、ノーマルマップを激しく切り替えて、ノーマルの凹凸変化によるアニメーションで実現している。それぞれの局所の動きにふさわしい技法を組み合わせているのだ。

【ヘアのピボットによる風影響制御】

 また、ウィンドシステムとピボットによって作り出される動きは、背景だけにとどまらない。キャラクターの髪や衣服が風になびく様子もウィンドシステムの影響を受けている。なお、髪の毛は、重力の変化にも影響を受けるようになっている。乾いているときは、髪は重力の影響がなく、ウィンドシステムに従って風になびく動きをするが、雨の中を運転しているときに、雨に髪が濡れると重力の影響を受けて動きが重くなる。この変化を実現するために、キャラクターには、通常使用するノーマル以外に、別途向き情報を持ったノーマルマップを用意している。

 衣服がたなびく際にも、この向き情報の拡張マップは活用されている。風に押されてできるシワがシャツ全体ではなく一部にだけおよびようにノーマルをマスクしてシワの形状を作り出す。これにさらに下向きにスクロールする2軸の2Dノーマルとブレンドすることで、衣服に風による動きを作り出している。

【風の衣服への影響】

 垂直なポールに設えられた旗がたなびく様も、これに似た手法が取られている。旗には、バーテックスカラーに格納した値を参照して無風でポールに沿って垂れ下がっている状態と風を受けて真横にたなびいている状態の間をモーフするようにしておき、そこにウィンドシステムによる動きをブレンドして表現している。他にもポールが水平で懸垂幕がぶら下がってるのような状態の場合には、ピボットとノーマルによる風のシミュレーションが行なわれている。

【重力のヘアへの影響と旗のたなびき】

 モーフは、“ステップモーフ”という、足元の起伏による歩調の変化、足跡や足元の地面の変化、土埃パーティクルの制御にも使われている。また衝突によって進んで行く自動車の変形には、あらかじめバーテックスカラーとして衝突によって生じる凹凸を表現するための座標を埋め込んでおく。変形状態の変化を管理するレンダーターゲットにダメージを書き込めば、それを参照して車体の表面に変形が現れる“スキンドモーフターゲット”が用意されている。

【地面の変化】
【自動車の衝突による変形】
【飛翔物の制御】

 これらの実装以外にも、ディティールを充実させるために、降りしきる雨の強弱を制御する情報を、スケールのアニメーションデータとして格納しておき、それを参照して自動的に変化するようにレイキャストを応用していたり、水面に浮かぶボートと水面とのキワの部分に描かれる泡沫の表現は、ボートの上下動と左右の回転ブレの動きに従って自動的に発生するようになっている。

【雨天/水面の制御】
【群衆の制御】

 処理負荷低減の施策としては、ビルボードのエフェクトアニメーションには、カメラから見えているピクセルしか描かない最適化が施されている。また、このエフェクトテクスチャは解像度の劣化が起こることなく、最低でも半分のデータサイズになるようにパックされている。加えて、プレイヤーキャラクターの移動に従って、キャラクターを取り囲むメッシュの範囲にのみ草などを生成して情報密度を増やす仕組みが取り入れられている。

【負荷低減 / 最適化】

 この他にも、本当に多数の“小技”が、賑やかしとしてバーテックスシェーダーの機能を活用して実装されている。ひとつひとつは決して高級なものばかりではないが、これだけ多くの要素が、しかも複合技で仕込まれていると感心せずにはいられない。

 次回作は、「The Lust of US Part II」が予定されているNaughty Dog。ゲームのテイストは異なるが、きっと次回作でもこれらの演出を上回る情報密度で実装してくるにちがいない。「The Lust of US II」、そして「Uncharted」シリーズの続編を体感できる日が待ち遠しい。