ニュース
[GDC 2013]PC版「TOMB RAIDER」は髪がすごい。ララ・クロフト秘伝のヘアケア技術教えます
PC版TOMB RAIDERは髪がすごい
新生TOMB RAIDERのPC版は,ゲーム機版とは異なり,DirectX 11にフル対応のレンダリングエンジンが採用されている。今回のセッションでは最初に,PC版TOMB RAIDERのさまざまな要素技術のカタログが示されたのだが,そのなかからピックアップされ,重点的な解説が行われたのが,冒頭でも触れた髪の毛のレンダリング技術だ。
すでに4Gamerでもお伝えしているとおり,この技術には「TressFX Hair」(略称:TressFX)という名が与えられている。「Tress」とは「毛髪」,「FX」は「特殊効果」の意味である。
Jason Lacroix氏(Senior Rendering Engineer, Crystal Dynamics) |
そのデモに使われていたキャラクターが,ララ・クロフトにとてもよく似ていて,イメージにピッタリだったことから,開発チームは,そのAMD製技術デモをスタート地点にして実装することを始めたのだそうだ。
AMDが制作して持ってきた技術デモ(左)。これがスタート地点になった(右) |
なお,この技術デモのコンテンツ部分は,joseph alterという企業の手によるDCCツール用プラグインソフト「Shave and a Haircut」が用いられていたとのことである。
AMDは,joseph alter(joe alter)製のDCCツール用プラグインソフト「Shave and a Haircut」を使用して技術デモを制作したとのこと |
実際のゲームにおけるララ・クロフトの髪モデルはスクエニのプリレンダー版を流用
Visual Worksが制作したプリレンダー版ララ・クロフトの毛髪は4737本分の制御パラメータを元にしていたが,ゲーム版ではこれを7014本分のスプライン曲線(spline curve。与えられたn+1の点を接続する滑らかな曲線)に置き換えたとのこと。ただ,それだと密度が不足したため,3倍の21042本にまで複製増毛させたそうだ。なお,1本当たりのスプラインは16頂点で構成するようにしているとのことである。
ゲームランタイムでは7014本分のスプライン曲線に置き換えた |
1本のスプラインは16個の頂点に分解して構成 |
スプライン化された毛髪は前髪,横髪,後髪,頭頂と4グループに分けて制御する方針が固まった。続いて検討されたのが「毛髪の動きをどうするか」という部分だ。
これについてはポニーテールがトレードマークの陸上アスリートであるMichelle Jenneke氏を参考にしたのだとLacroix氏。いわく「陸上競技の映像はさまざまなアングルから撮影されていて,スローモーションにもなったりするのでとても参考になった」とのことである。
「シミュレーションはどうするか。そうだ,アスリートの動きを参考にしよう」ということになったという。セッションではYouTubeのムービーも下の写真のとおり示されたが,著作権などがクリアになっていない可能性があるため,本稿ではリンクを示さない。この点はご了承を |
結局,シミュレーションは各毛髪に対して大局形状拘束条件(Global Shape Constrains,以下 GSC),局所形状拘束条件(Local Shape Constrains,以下 LSC)を与えつつ,重力に配慮したバネ物理を実現させたそうだ。
シミュレーションにGSCとLSCの概念を導入 |
一方のLSCは,簡単に言えば髪質のことである。直毛やちぢれ毛といったことを直接的には指すが,濡れた髪のような,髪自体の摩擦係数や重量状態もLSCに含まれる。LSCもGSC同様に,元の状態に戻ろうとする力が働くのが特徴となっている。
風や重力,あるいはララ自身の運動により,髪がリアルに動く |
髪のシミュレーション自体はComputeShaderで実装されたベルレ積分法(Verlet Integration)が利用されているとのこと。ベルレ積分法は「前の状態と現在の状態の差分情報から次の状態のベクトルを算出する」という離散的な積分方法で,GPUで処理するのに向いているとされる。カプコンの「Dragon's Dogma」(PlayStation 3 / Xbox 360)で,毛髪や布,柔体(ソフトボディ)表現にこのベルレ積分法が応用されたことは有名な話だ。
さて,キャラクター自身の身体も含め,毛髪から見た他者との衝突は,ゲームロジック側で衝突判定に用いられる形状モデル――主にカプセルのような形状をしている――に対して行われる。
7つのシミュレーションプロファイルを設定 |
5つのシミュレーション要素をComputeShaderで実装 |
シミュレーションでは,「乾いた髪」「濡れた髪」「ララが逆さに吊されたときの髪」「泳いでいるときに,下半分が濡れた髪」「ロープアクションにおける上下反転時の髪」「イベントシーン用の特例処理となる髪」「銃火器によるズームエイミング時の髪」と,計7つのプロファイルが設定されたそうだ。
また,そのComputeShaderで実装されるシミュレーションの要素は5つに分けられるとのことで,「重力とGSCへの配慮」「LSCへの配慮」「風と髪の伸縮への配慮」「超高速で動いたときへの配慮」「自身の身体も含む,髪から見た他者との衝突への配慮」が内訳として挙げられている。
2つの比較画像はいずれも左がゲーム機版,右側がTressFX Hairを有効にした状態のPC版だ。右側のほうが,髪の毛一本一本の質感が伝わってくる |
髪の毛の描画,その詳細
実際のレンダリングでは,毛髪を構成するスプライン曲線の全頂点は1つの頂点バッファに入れ込んで,1回の描画コールで描画する。
髪は線分ではなくクアッドで描画。「線分→クアッド」の変換にはジオメトリシェーダが活用されていると推測されるが,事前に制作段階でクアッド化している可能性もある |
レンダリング時には,視点から見たときに髪の毛がなだらかな曲線――実際には四辺形だが――に見えるよう,あらかじめ設定されている髪の太さに応じて変移させる処理系を盛り込んでいる。髪が折れ曲がったとき,滑らかな丸みを持っているように見せるための,描画上の小細工が入っていると言ってもいいかもしれない。
毛髪のシェーディング&ライティング手法は,2004年にATI Technologies(当時)が行った,「Ruby」デモにおける毛髪レンダリング手法とほぼ同じだと説明されている(関連pdf)。これは,ゲームグラフィックスでも採用例が多い,有名な「Kajiya・Kay」法を実装したものだ。
具体的には,毛髪上の接平面(=接線)情報を毛髪に沿ってシフトさせ,光源からの直接反射光と毛髪が放つハイライトを分離させるような手法になる。言い換えるなら,「天使の輪」をプロシージャル手法で生成するイメージだ。
ライティングモデルはKajiya・Kay法を採用 |
実際のシェーディング&ライティングの概念 |
実際のレンダリング結果 |
髪のシェーディングモデルは,
- (環境光項+拡散反射項+髪の鏡面反射項)×髪の色+(分離された光源の反射項)
の形で表されると,Lacroix氏は説明していた。意外にクラシックな手法である。
スクウェア・エニックスの「Agni's Philosophy」や「ガンスリンガー ストラトス」,トライエースの「End of Eternity(エンドオブエタニティ)」(PlayStation 3 / Xbox 360)など,髪の毛の表現にこだわりが見られる最近ゲームグラフィックスだと,比較的正確な「Marschner」モデルを使うことが多いが,Lacroix氏によれば「実装の時間が足りなかった。次回作にはきっと……(笑)」とのことだ。
カメラライトならぬビューティライト |
ちなみに,視点位置付近から柔らかい光源を置くというのは,TOMB RAIDERに限らず,ゲームグラフィックスではよく用いられる手法で,一般的には「カメラライト」などと呼ばれることが多い。
アニメチックな造形をした女性キャラクターの顔面に鼻の影が落ちたりすると美人度(≒かわいらしさ)が下がったりするので,それを低減する目的で活用されたりするのだが,「髪質の表現のために置いた」というのは珍しい事例と言えるだろう。
暗がりでも美しい天使の輪が出るのはビューティライトの効果 |
髪の影生成については,「ほかの要素と同じく,デプスシャドウ技法を活用している」という説明があった。
毛髪スプラインを普通に単一のシャドウマップに書き込み,それを基にして影生成を行うのだが,ここで注意しなければならないのは,「髪は無数の毛髪による多層構造になっている」ということ。そこで,それらしいセルフシャドウを出すために,「髪ピクセルを描くとき,そのピクセルに対応する深度値から光源位置方向にシャドウマップを探査して,第三者によって遮蔽されていると判明したら,そこまでの到達距離を求めて,その大小で影の濃さを決める」ようにしたのだという。
つまり髪のセルフシャドウは,一番表層の髪の形状でしか出ていないことになるわけだが,「そのセルフシャドウを,髪の厚みに応じた濃淡で作り出すことで,それっぽい表現に見せている」(Lacroix氏)とのことだ。
髪のセルフシャドウ表現解説(左)と,アルゴリズムを示した擬似プログラムコード(右) |
なお,TOMB RAIDERにおける髪の毛のアンチエイリアシングは,GPUが提供する一般的なMSAA(Multi-Sampled Anti-Aliasing)ではなく,自前で実装したピクセルシェーダベースで実現されている。イメージ的には「髪が画面上の画素をどのくらいのカバー率で横切るか」で色を決めるようなやり方だ。
髪の毛のアンチエイリアシング手法解説(左)と,アルゴリズムを示した擬似プログラムコード |
髪は半透明の素材で,かつ,ある程度の長さを持っている。そして,それらがシミュレーション結果で前後へ入り乱れることになる。通常,半透明オブジェクトは,ちゃんと視点から見て奥から順番に描かないと,正しい半透明表現にならないのだが,一本の髪がピクセル単位で前後入り乱れることになるため,単純な髪単位のソーティング(並べ替え)では描画がうまくいかない。
そこで,「商業ゲームでは恐らく世界初」(Lacroix氏)となる「Order Independent Transparency」(以下,OIT)の実装に踏み切ったという。意訳するなら,OITは「描画順序不問の半透明描画手法」といったところか。
その実装はかなりのチカラワザで,なんと,髪のピクセルを描画するときに,ワークバッファに髪色と深度値を1ピクセルずつ書き込んでいき,最終的には,ワークバッファに書かれたすべての情報を取りまとめて正確な半透明計算を行い,最終ピクセル色を求めているのだそうだ。1920×1080ドット解像度のゲーム画面をレンダリングする場合,OITの実現には最大で200MBものバッファが必要になるという。TOMB RAIDERのPC版はマルチディスプレイ表示に対応しているが,マルチディスプレイ表示を行った場合はワークバッファが300MBを超えるというからすごい。
商業ゲームでは世界初!? TOMB RAIDERでは髪の描画にOITの概念を導入 |
そのほか描画にあたっては,フォグ表現をはじめとしたポストプロセスを,毛髪レンダリングに対しても不自然さが起こらないようにしながら適用するために,髪だけをマスクで抜くための,ステンシルマスクのレンダリングなども行っているとのことだ。
ポストプロセスやフォグ表現への対応 |
髪のレンダリングのためのワークバッファに数百MBを使ったり,ComputeShaderで高度なシミュレーションを行ったり……というのは,現行のゲーム機ではとうてい不可能。ある意味,PCだけの贅沢ということができるだろう。
というわけで,TOMB RAIDERが気になっている人は,PC版の購入を視野に入れてみてはどうだろうか。ちなみに,今回の毛髪レンダリング技術は,NVIDIAのGeForceを搭載するPCでも,問題なく動作するようだ。
「TOMB RAIDER」公式サイト
Game Developers Conference公式サイト
- 関連タイトル:
TOMB RAIDER
- この記事のURL:
キーワード
Tomb Raider(C)Square Enix Ltd. Square Enix and the Square Enix logo are registered trademarks of Square Enix Holdings Co., Ltd. Lara Croft, Tomb Raider, Crystal Dynamics, the Crystal Dynamics logo, Eidos, and the Eidos logo are trademarks of Square Enix Ltd. "Playstation" and the "PS" family logo are registered trademarks and "PS3" is a trademark of Sony Computer Entertainment Inc. The Playstation Network logo is a service mark of Sony Computer Entertainment Inc. Microsoft, Xbox, Xbox 360, Xbox LIVE, and the Xbox logos are trademarks of The Microsoft Group of companies and are used under license from Microsoft. The rating icon is a registered trademark of the Entertainment Software Association. All other trademarks are the property of their respective owners. All rights reserved.