9月4日より2日間開催されたCEDEC 2003において、NVIDIAは5日の全日を使ってのセッション「開発の鉄人セミナー」を開催した。
この中で行われた「NVIDIAデモチームの秘密」というセッションでは、同社製GPU「GeForce FXシリーズ」用のデモ映像ソフトにまつわる技術解説が行われた。最新PC-3Dグラフィックスのトレンドを推し量るのには最適なセッションとなっていたので、その内容を抜粋してお届けしたい。
○Dawn編
初代GeForce FXシリーズ発表時に公開され、同GPUの潜在能力の高さを一般ユーザーに知らしめることに繋がったデモ。それが「Dawn」。「Dawn」では妖精が軽快なアクションと豊かな表情を見せ、また、透き通るようなリアルな肌の質感が見どころとなった。
ちなみにDawnとは登場する妖精の名前であり、Dawnという単語自体には「夜明け」という意味がある。NVIDIAはこのDawnに「The Dawn of Cinematic Computing」(映画品質のコンピュータグラフイックスの夜明け)というキーワードを重ねて、GeForce FXシリーズを発表したのだ。
○Dawnの髪の毛はファーシェイダーではない
さて、このDawnのデモの見どころは、第1に髪の毛にある。
実は、"毛"の表現について、同社は過去にもこのテーマに挑戦したことがある。GeForce4 Tiシリーズ発表時に公開した「Wolfman(狼男)」のデモがそれだ。
Wolfmanデモでは、2つの"毛"生成技法を用いた複合技だった。
1つ目の技法は毛が描かれたテクスチャを貼り付けたポリゴン片をモデルに植え付ける「毛ヒレ」技法だ。なお、毛が描かれたポリゴン片を魚の背ビレのように植え付けていくことから「毛ヒレ」と呼ばれている。あるいはこの毛ヒレにより複雑なジオメトリ構造を持たせて、"ひも状"に振る舞わせる「テクスチャリボン」と呼ばれる発展系もあり、こちらも最近の3Dゲームではよく使われている。
2つ目の技法は、一般によくいわれる「ファーシェイダー」を活用したものだ。これは、毛のトゲトゲをバンプマップ化し、これを複数レイヤー重ねて表示させることで、密集した毛を表現するものだ。
Wolfmanでは、毛ヒレに対しては毛ヒレが視線の方に向いているときには透明度を高くし、向いていないときには透明度を低くしてライティング(異方性ライティング)を行っている。これにより、視線が直視する毛についてはファーシェイダーの毛が、キャラクターのシルエットが見える輪郭付近では毛ヒレの毛が実体化して見えるようにしている。この2つの技法のコンビネーションにより、非常に「密な毛」が表現できていた。
これが異方性ライティングを行った"毛ヒレ"。Wolfmanでは毛のフサフサ感を見せるために活用されていた
これがバンプマッピングを複数レイヤー重ねて行うことで生やした毛。これを「ファーシェイダー」と呼ぶことが多い。密集した毛を表現するのに適しているが、長い毛を表現するためにはレイヤー数を多くしなければならず、その場合多くの負荷がGPUにかかる
2つの技法を同時に行った最終レンダリング結果
Dawnにおいては、意外なことに、毛をジオメトリを持った曲線で描く方針を採択した。Dawnでは、実際に2~20頂点分の線分で髪の毛を表現しているのだ。この方法では、「視点からの距離にかかわらず線の太さが1ピクセル」になってしまうという制約があるが、表現するのが「密集した髪の毛」なので特に問題にはならない。また、髪の毛の先端に行くほど透明度を高くすることで、毛先の細さも表現している。
髪の毛がファーでもヒレでもないのは、このようにポイント表示にしたときに毛一本一本が頂点を持っていることからも明か
この髪の毛に対する光源処理は、毛ヒレ技法と同様に、視線との位置関係でライティングをドラスティックに変える異方性ライティングが使われている。髪の毛の上に表れる「天使の輪」上の光沢はこれによるものだ。
このDawnに生やした線分による髪の毛は、実際の人間の髪の毛の本数ほどは多くできないため、視線の位置関係等で頭皮が透けて見えてしまうことがある。この際の見た目の不自然さを補うために、髪の毛の生え元の領域の頭皮を黒く塗りつぶしている。
実際、Dawnデモを見てみると、視点が近い時の髪の毛はなかなかにリアルだ。毛ヒレやファーシェイダーでは、どうしても、毛が「束になっている」という感じが否めないのだが(そこが特徴でもあるのだが)、Dawnの技法ではたしかに「独立した毛一本一本が」「頭皮から生えている」という感じがよく表れている。しかし、視点から遠いときの髪の毛はモザイク状にぎらつくことがあり、やや不自然さは残っている。このあたりが今後の課題だろうか。
毛先が細く見えるのは透明度を変化させているから。ちなみに、よく見ると頭皮が黒く塗られているのが見える
ちなみに、アンチエリアスを無効化するとこのように毛はバリバリっとした感じになる
○Dawnの表情と動き
表情の変化については、顔面上に設定された約50の変位頂点を変位させる、いわゆる頂点ブレンディングの技法で実現されている。これは、この秋発売のPC用3Dゲーム「Half-Life2」(Valve)などで用いられている技法と同じだ。
表情の変化は3Dグラフィックス的な処理よりも、どこをどう変位させればどういう表情になるかという、制御系のノウハウの方が高度な物が要求される
Dawnのナチュラルな動きの秘密はモデル内部に仕込まれているボーンの自由度にあった
Dawnの体の動きについては、これも3Dモデルの外皮であるメッシュに対して内部骨格となるボーン(骨)を仕込み、この骨を動かすことで外皮頂点を伸ばしたり縮めたりして外皮を変形させる「ボーン・スキニング」処理が行われている。これも、最近の一般的な3Dゲームではよく用いられる技法だが、Dawnではそのボーン数が98と、かなり多い。
こうしたボーン・スキニング処理にはプログラマブル頂点シェーダが用いられるわけだが、これだけボーンが多いと、DirectX 9世代(正確にはプログラマブルシェーダ2.0世代)のGPUの定数メモリにスキニング用の行列が入りきらないので、Dawnでは、メッシュをグループ分けして管理する方法を用いている。プログラマブルシェーダ3.0世代GPUでは頂点シェーダがテクスチャにアクセス可能となるため、テクスチャメモリにこうした行列を格納しておくことで、こうした制限は回避することができる。
○Dawnのライティングの秘密
続いてライティングだが、Dawnでは「イメージベースライティング」と呼ばれる技法を採用している。これは明確な光源を置くのではなく、キューブマップ上の画像を光源に見立てて光源処理を行う技法だ。ちなみにATIのRADEONのデモにもこの技法を活用した物がある。
具体的に解説しよう。キューブ環境マッピングというのは聞いたことがあるだろう。周囲の映り込みをテクスチャマッピングする表現が環境マッピング。環境マップを6面体分用意するのがキューブ環境マッピングだ。あれと考え方は似ている。
環境マッピングでは、その陰影処理を行うピクセル(面)の面の向きの延長線上にある環境マップのテクセルを拾ってきてマッピングするわけだが、イメージベースライティングではこのテクセルを光源と見立てて陰影処理を行うのだ。感覚的にいえば、キューブマップ上の明るいところが光源になるということだ。
Dawnではこの技法を使っているので、背景の明暗と連動した柔らかな陰影処理が行われている。そして、背景がもつ光と影のコントラストが見事に連動してDawnの陰影を作り出している様もユニークだ。
○Dawnのお肌美容の秘密
人間の顔には鼻の穴など、自身によって遮蔽されている部位がある。一般的な光源処理では光が遮蔽されることを配慮していないので、鼻の穴が明るい3D-CGというものは今でもよく見かける。あらかじめ、鼻の穴の中を黒く塗ったおくのも悪い選択ではないが、Dawnでは、事前に自己遮蔽度を計算し、これを頂点パラメータにしまい込み、実際のレンダリング時にはこのパラメータを配慮して陰影処理を行っている。
こうした、頂点に遮蔽事項を焼き込む作業はSOFTIMAGEなど3D-DCC(Digital Content Creation)ツールに搭載されているので、Dawnでもこうしたツール上でオフライン計算させている。遮蔽度を事前計算してしまうのは物理的には大胆な近似なのだが、テクスチャで黒く塗ってしまうのと比べ(近似的ではあるが)、穴の中の陰影もそれなりに変化するので見た目にあまり不自然さはない。Dawnを見る機会があったときには、鼻の穴や耳の穴について着目しながら見てみるといいだろう。
Dawnは、人肌の表現に最近のリアルタイム3Dグラフィックスにおいても人気テーマとなっている「スキンシェイダー」を導入している。一口にスキンシェイダーといってもその手法自体は確立されていないので、今回示された手法はあくまでDawnを実現する際に取られた1方法ということである。
まず、顔の上のシワなどの細かい凹凸については、バンプマッピングによって再現されている。これは分かりやすい。
右側の二段のスライダーが、スペキュラの度合い(上)、鳥肌(Gosse Bump)の凹凸の度合い(下)を調整するもの。鳥肌スライダーは変化させてもあまり見た目に変わらない
近くの人の顔を見てみよう。鼻筋や頬、額などに微妙な光沢が表れているのに気が付くだろう。こうした光沢の表現についてはスペキュラ(光沢)マッピングによって再現されている。なお、このスペキュラマッピングは常に出ているわけではなく、視線と肌の面の位置関係が一定条件下で表れるようにプログラマブルシェーダで制御される。こうした光沢表現により、プラスチックというか素焼きの焼き物のようなフラットな「いかにもCG」っぽい陰影となるのを回避しているわけだ。
さて、人肌はピンクというか微妙に赤みを帯びている。これを肌色というのだから当たり前と思えるかもしれないが、ここがDawnにおけるスキンシェイダーの核となる部分だ。
まず、「血の気テクスチャ(Blood Texture)」と呼ばれる顔の血の気の分布をテクスチャ化したものを用意する。そしてもうひとつ、肌面と視線の関係に応じて「どの程度、表に透けさせるか」を表す演算テーブルをテクスチャ化した「血の気伝達テクスチャ(Blood transmission Texture)」も用意する。
実際のレンダリングでは視線方向からどの程度血の気が見えるのかを算出、これを表皮の色とブレンドして最終的な肌の色としている。当然だが、こうした処理系にもプログラマブルシェーダ(この場合は特にピクセルシェーダ)が活用されるのはいうまでもない。
ところで、視線方向と肌の面の向きの関係から、肌の内部の血の気の見え具合と肌の光沢の出具合を制御しているわけで、これは、考え方としては、水面上の映り込みと水面下の情景の混ぜ具合を視線方向に応じて制御するフレネル項の考え方と似ている。
頬や顎のようなこちらに凸気味の部分や光を強く受けた部分がほのかに赤みを帯びている。視点を変えるとこの赤みの出方が変わるのでそこに時間積分的なリアリティが存在する
Dawnと比べると簡易的だが、顔面上に異方性のスペキュラを与えて、簡易的なスキンシェーダー的表現を行っている「EverQuest2」(C)Sony Online Entertainment.)
さて、実際のゲームにおけるスキンシェイダーの採用だが、残念ながらDawnのような本格的な採用例はまだない。ただし、異方性のスペキュラマッピングを採用した例は、近々登場しているゲームに採用例がある。具体的には「EverQuest2」(Sony Online Entertainment.)、「Half-Life2」(VALVE)などがそうだ。
○Dawnの双子の妹Duskには"影"がある
GeForce FX 5900シリーズ用のデモとして公開されたのが「Dusk」だ。DuskはDawnの双子の妹という設定だそうだが、まあ、これは都合のよい設定であり、実際にはDawnの衣装にアレンジを加えただけのモデルになっている。
ちなみに余談だが、Duskとは「夕暮れ」の意がある。Dawnに「The Dawn of Cinematic Computing」の願をかけたが、さすがにDuskには「The Dusk of Cinematic Computing」という意味は重ねなかったようだ。
Duskの実現に際して、髪の毛、スキニング、スキンシェイダーといったテクノロジーの大半はDawnとほぼ同じとなっている。ただし、DawnとDusk、この2つのデモにおいて、最も見た目で違うのは、影の存在だ。Dawnでは陰影は付いてはいるが遮蔽による影が全く出ていない。これに対し、Duskでは影が正確に出ていることに気が付くだろう。
最近では3Dゲームファンの間でも注目のキーワードとなりつつある「セルフシャドウ」も正確に出ている。セルフシャドウとは、ある3Dモデル自身の影がそのモデル自身に投射される影のことで、この「セルフシャドウのあり/なし」が、地面に敷くだけの簡易影と区別する意味合いで使われることもある。
さて、この影生成技法には、いくつかの手法がこれまでに考案されてきているが、Duskでは、シャドウマッピング(シャドウバッファ)技法が用いられている。これは、影を落とす元となる光源を仮想視点としてシーンをZバッファレンダリング(深度情報のみをレンダリングすること)してその光源から見たシーンの遮蔽分布(シャドウマップ)を作成、最終レンダリング時にはこのシャドウマップを参照しながら光源からの遮蔽を吟味して陰影を付けていく。これにより、複雑なジオメトリ構造のシーンでも正確な影生成が行えるというわけだ。この方法を採用した3Dゲームとしては「Splinter Cell」(Ubi Soft)などがある。
昨年の各メディアのベストグラフィック賞を総なめにした「Splinter Cell」は影生成にシャドウマッピング技法を採用していることでも話題になった(C)Ubi Soft
影生成にこだわったDusk。背景にDuskの体全体が投射されているだけでなく、胸元に手の影が、そして肩には横顔の影が投射されている点に着目。これがセルフシャドウだ
この技法にも弱点はあり、シーンの遮蔽構造を収納するシャドウマップを十分に高い解像度で取らないと、生成した影にジャギーが出たり縞模様が出たりしてしまう。
Duskでは、このシャドウマップ解像度として2048×2048ドット、容量にして約64MBを確保しているとのことで、PCグラフィックスならではのかなり贅沢な使い方をしている。こうしたバッファは当然ビデオカードのビデオメモリ上から確保される。GeForce FXをはじめとして最近のビデオカードは搭載メモリが非常に大きいが、大きくなることは何もテクスチャの数を多く格納できたり表示解像度が高くできるだけでなく、表現技法の幅も広がるということを覚えておこう。

浙公网安备 33010602011771号