PSO2 RMT[CEDEC 2013]さらさらヘア実現の秘密が明らかに
8月21日から開催されているファンタシースターオンライン2 RMT「CEDEC 2013」では,開発系のセッションでゲームグラフィックスを扱うものが多数ある。その1つとして,「TOMB RAIDER」のPC版に実装された毛髪レンダリング技術「TressFX Hair」(以下,TressFX)を解説するセッション「Real-time Hair Simulation and Rendering for Games」が,21日に開催された。
こちらはTressFXの発表時に公開された,その効果を示す画像。右の画像ではTressFXにより,風に吹かれた髪が自然になびいている
TressFXについては,「Game Developers Conference 2013」(以下,GDC 2013)でもレポートしているが(関連記事),このときにはあまり深く語られなかったレンダリングの実装に関する情報が,今回は詳しく説明された。本稿では,明らかになったTressFXの仕組みをレポートしたい。
TressFXの解説を担当した,AMD本社の原田隆宏氏(左)と,共同講演者のDongsoo Han氏(Senior software engineer,Advanced technology initiatives,GPU technology group,AMD)
1ピクセルよりも細い毛髪をどうやって描くのか?
TOMB RAIDERで使われたTressFXでは,主人公ララ・クロフト(以下,ララ)の毛髪を表現するために,ポリゴンに毛髪のテクスチャを貼り付けた「毛ヒレポリゴン」(フィン)を植える従来の方式ではなく,現実の人間と同じように,「線分としての毛髪」を頭皮に植え込む方式で表現している。
実際にこれをレンダリングするときには,まず線分を極細の板ポリゴンに変換して処理するわけだが,この変換処理は当初,ジオメトリシェーダを用いていたそうだ。ところが,この処理に時間がかかることが判明したため,線分をあらかじめ縮退ポリゴン的に6つの頂点で表現しておき,これを頂点シェーダで押し広げて板ポリゴンにする手法が,最終的に選ばれたというPSO2 RMT。
頂点シェーダで線分を板ポリゴンに変化させた
ピクセルのサンプル点から外れた線分は描画されない
板ポリゴン1枚はあまりにも細いため,それをレンダリングするには工夫が必要であるそうだ。というのも,板ポリゴンが視点から離れていると,その太さが 1ピクセル未満となってしまうこともある。そして1ピクセル未満の板ポリゴンが,ピクセル中央の「サンプル点」から外れてしまうと,画面に描かれなくなってしまう。
マルチサンプリングである程度解消できることもあるが,それでも外れることはあり,根本的な解決にはならない。
これを解決するには,特別な処理系を実装する必要があったと,原田氏は言う。まず,線分板ポリゴンの面積が該当ピクセルの面積をどのくらい占めているか計算し,その割合をα値(透明度)と見なすようにした。要は,線分板ポリゴンが占める面積で,1ピクセルの半透明値を決めるわけだRMT。