『Hardware T&L、シェーダなんなのさ?』

はじめに

グラフィックチップの説明によく登場するハードウェアT&Lやシェーダという言葉。このサイトでも何かと登場しているのですがここにすこしまとめてみることにしました。ただ、私もグラフィックカードの機構についてよくわかってないので説明といっても不十分な点や間違いがあるかもしれません。

ハードウェアT&Lってなに?

3Dの演算は主にレンダリングとジオメタリングという処理を行います。グラフィックカードが3Dの演算に対応していない場合はCPUがこの処理を行います。しかし、年々高度化する3D画像を処理するために専用の3D演算チップを別途用意する(=ハードウェアで処理する)ことが好ましくなりました。現在では表示画像を扱うビデオチップと3D演算チップがセットになってグラフィックチップとして皆さんに知られる姿になっています。

さて、この3Dの主な演算を大きく分けるとレンダリング処理とジオメトリ処理という二つの処理に分けられます。このうちまず最初にレンダリング処理をグラフィックチップにより処理できるようになりました。これはレンダリング処理を行うために必要なトランジスタの数の方がジオメトリ処理で必要なトランジスタの数よりも少なくてグラフィックチップに内臓しても一般的な価格の範囲で生産可能だったからです。この場合、ジオメトリ処理はCPUにより処理(=ソフトウェアで処理)されますが、レンダリングエンジンだけ搭載したグラフィックチップでも3D演算の一部をグラフィックチップ(=ハードウェア)で実行するので3Dグラフィックチップと呼ばれました。

さらにグラフィックチップは進化してついにジオメトリ演算もハードウェアで実行できるようになりました。ジオメトリエンジンによって演算されるものは3D→2Dの座標変換(Transformation)と影を作る光源計算(Lighting)で、この二つをハードウェアで行うという意味でハードウェアT&Lという用語が登場しました。これはジオメトリエンジンを搭載するという意味になるのです。

ジオメトリエンジンの効果を発揮するにはそれにあったプログラムが必用となります。MicrosoftはハードウェアT&LをサポートするDirectX7を開発します。つまり、DirectX7をハードウェアで実現しているということはハードウェアT&Lを搭載しているということにもなるのです。

シェーダってなに?

ハードウェアT&Lでは決められた3D演算のしかできないのに対してCPUのように3Dの演算方法をプログラムできるようにすれば、より高度な表現が可能になります。そこで開発されたのがプログラム可能なシェーダで、プログラマブルシェーダと呼ばれます。プログラマブルシェーダはCPUのように汎用性が高く3Dの演算方法をプログラムすることでゲームクリエーターの意図した表現がより高度に実現可能になります。

また、ハードウェアT&Lの処理をプログラムしてやることでシェーダでハードウェアT&Lの処理が実行可能になりますが、汎用性の高いシェーダを利用することにより無駄も生じてしまうので専用のハードウェアT&Lに比べて同じ演算性能のチップだと処理が遅くなってしまいます。

シェーダは主にジオメトリ演算を扱うバーティックスシェーダと主にレンダリング演算を行うピクセルシェーダから構成されています。両シェーダはより高性能に、より汎用性が高くバージョンアップを重ねています。将来的にはプログラム次第ではこれらシェーダを使ったMPEGのハードウェアエンコーディングなども実現可能になるようです。

シェーダを利用するにはDirectXなどのAPIを使い、またこのバージョンによって使えるシェーダのバージョンに差がでます。例えば、DirectX8.0でシェーダの1.0が利用可能になり、DirectX9.0でシェーダの2.0が利用可能になっています。