ATI,PCI Express Kick-Offイベント開催&3Dc技術詳報 - 2004/07/01 23:32

3Dcなどについて解説を行うATIナイルス・バーバンク氏
 2004年7月1日,ATI主催の「PCI Express Kick-Offイベント」が都内のホテルで開催された。まあ大雑把にいえば,ATIとインテルやPCベンダーなどのパートナーによる「PCI EXPRESSやるぜぇ大会」だと思えばいいだろう。
 インテルの新チップセット投入と前後して,すでにATI,NVIDIAなどでPCI Express対応製品の発表が行われている。ビデオカードなどはAGPでも別に不具合ないのが現実だが,それ以外の部分での高速化は重要だ。従来,PCI部分での拡張だったものがかなり高速化されてくる。まず,RAIDカードやギガビットイーサカードなどで恩恵が受けられそうだ。また,全体的に「安定」したものであることも評価されているほか,バスが高速化されることでまったく新しい周辺デバイスや用途の拡大などが期待されているようだ。今後かなり急速なペースで,PCI/AGP体制からPCI Express体制へと切り替わっていくものと思われる。
 さて,イベントの内容は全体的な方針と展望という感じで,4Gamer読者には退屈な部分が多いので,同時に開催されたテクニカルセッションを中心にレポートしてみたい。今回は特に3Dc技術について概要が解説された。

■ノーマルマップとはなにか?

 バンプマッピングというテクニックがある。
 ポリゴンは基本的に完全な平面だ。ポリゴン数を減らすとどうしてもカクカク,ノッペリが目立つものになってしまう。それでは寂しいので凹凸っぽい模様を「絵」で描き込んでやるというのが初期のゲームでの基本テクニックだった。ただし描き込んだ影なので光源の位置が変わっても変化はしない。面のリアルな凸凹状態などはポリゴンでモデリングしているととてつもなく制作労力がかかるほか,とんでもなくポリゴン数が増えてしまうので,リアルタイム3Dでは現実的ではない。ポリゴンで極度に細かいところまで作り込まなくても,凸凹状態を貼り付けることで簡易的に処理しようというのがバンプマッピングの趣旨である。
 凹凸を表すバンプマッピングのリアルタイム処理ができるようになって,ゲームの質感は大幅に向上した。初期には,凸凹用の画像(ないしはテクスチャ画像そのもの)を光源の向きに応じてずらしたものと差分を取って合成するといったトリッキーな手法が使われた。同じ高さの部分では差分はないが,段差に相当するところでは強調されたエッジができ,ちょうどハイライト部分とシャドウ部分のように見える。2Dグラフィックではエンボス処理と呼ばれているものだが,それを光の向きに合わせると,それなりにリアルな凹凸のようにも見える。
 もっと正確な手法では,貼り付ける段差を画像として用意して,画像の濃淡に応じた高さを貼り付けるハイトマップ画像を用意しておく正攻法な手法がある。しかし,高さを貼り付けるといっても別に物体を変形させてきちんと3次元計算していたわけではなくて,ポリゴン上のその点での高さが変化していたものとして,その点の色(というか明るさ)を決めていたわけだ。その点の輝度を決定する要素はその点での,そのポリゴンの傾きと光源の関係による。ハイトマップの場合は周囲の点の高さからその点での傾きを割り出して,光源との関係から輝度を決定する感じになる。傾きしか使わないとはいえ,傾きを出すだけでもそれなりに重い処理になってしまう。
 結局のところ,必要なのは傾きだけなのだから,最初から高さの代わりにその点でのポリゴンの向きを与えてやったほうが処理が軽くなりそうだというのは分かるだろう。ついでに,最初は精密なポリゴンでモデリングしておいて,そいつの傾き情報を抜き出して単純化したポリゴンに貼り付けるようにすれば,精密「風」なモデルを簡単に作れるようにもなるだろう。これがノーマルマップの考え方である。ノーマルマップで用意するのは,その点での傾きのデータだ。これは3次元単位ベクトルで用意される。x,y,zをR,G,Bに割り当てて画像化して,テクスチャのように扱われる。
 ノーマルマップは,低ポリゴンでも高ポリゴンモデルとほとんど同じくらいの表現力を実現してくれる強力な手法だ。多くのゲーム開発者が勇んで取り組んだものの,結論として十分な品質で処理を行うにはかなり大きなノーマルマップ画像を用意する必要があるということが分かった。大きなノーマルマップ画像を大量に扱うには,ビデオメモリ容量の問題や転送の負荷などで制約がある。DirectXのテクスチャ圧縮アルゴリズムであるDXTCは,効率よくそれなりの画質でテクスチャマップを実現できるのだが,DXTCをノーマルマップに適用するとクオリティが低すぎて使い物にならなかった。



左:簡単なモデルにノーマルマップを使うと低ポリゴンのままリアルな映像が実現できる
右:DXTCでは情報量が削られすぎて滑らかな変化が表現できない


■3Dcの圧縮技法

 ようやく本題に入るが,ATIの3Dcはノーマルマップ画像専用の圧縮アルゴリズムだ。画像汎用のDXTCよりも高品質でノーマルマップデータを1/4の大きさにできる。
 ポイントは,ノーマルマップで格納されているのが「単位ベクトル」であるということだ。向きだけを表す長さ1のベクトルを単位ベクトルというが,3D処理では伝統的に向きを単位ベクトルで表す。実際の処理では向きさえ算出できれば長さはどうでもいいことが多いのだが,あくまで単位ベクトルで用意するというのが通例である。いろいろな長さのベクトルを単位ベクトルに変換する処理を正規化(ノーマライズ)と呼ぶ。要するに,ノーマルマップというのは正規化されたベクトルの貼り付けという意味になる。
 さて,長さが1であることが保証されているわけだから,3次元ベクトル成分のうち,x,yさえわかれば残りのzは計算で出すことができる。1=x2+y2+z2 だ。これでデータ量がぐっと減った。これが3Dcで高品質な圧縮ができる秘密であり,ノーマルマップ以外のテクスチャ画像にはまったく使えない理由でもある。
 さらに3Dcでは,元々8ビットあった情報を3ビットに圧縮している。このとき,単に量子化(桁落とし)するのではなく,x成分,y成分の最大値,最小値を別途記録しておき,その範囲内を8等分して3ビットに割り付けている。
 情報量としては,4×4ドットの矩形単位で処理されるので,初期時にRGBA(各8ビット,Aは未使用)×16で512ビットあったものを,xy(各3ビット)×16+8×4(x,yの最大最小値)で128ビット,ちょうど1/4に圧縮していることになる。
 ATIではノーマルマップの技術をオープンなものとして公開していくので,将来的にDirectXの仕様に追加されるなどすれば他社製品でも使われるようになるだろう。ノーマルマップは今後ごく一般的な手法としてゲームで使われるようになってくる。ノーマルマップに3Dcが必須というわけではないのだが,4倍大きなノーマルマップ画像が使えるというのは画像クオリティ上は圧倒的に優位といっていいだろう。(aueki)


左:z値を計算で出すことで情報量を削ることができる
中央:最終的な画像フォーマットはこんな感じになる
右:ノーマルマップ対応のソフトの例。今年末には一般的に使われる技術になるという

友達にメールで教えよう!
←Back to 4Gamer Top
←Back to News Archive