プログラマブルシェーダー
プログラマブルシェーダー(英語:programmable shader)とは、グラフィックカード上のシェーダーで独自のプログラム(カスタムシェーダー)を実行させられるものをいう。
概要
初期のシェーダーは「ハードウェアT&L(最近では対義語的に固定シェーダーと呼ばれることが多い)」などと呼ばれ、いわゆるAPI的な感じで「ライティングをする」などの固定機能がGPUに用意されており、プログラマーは何も考えずポリゴンモデルやテクスチャや座標などをGPUに送信すると表示用の一枚ペラの絵が返ってくるというものであった。この方式は簡潔明瞭という利点と、だれが作っても似たように絵になるという欠点があった。
これをアセンブラのようなプログラミング言語で自前で記述できるようにしたのがプログラマブルシェーダーである。後にHLSLやGLSLなどの高級言語などが登場したが、それでも3Dを扱うプログラマーに求められる作業量・記述量は劇的に増えた。
その結果、よほどの事がないかぎり固定シェーダーでこと足りるのにそんなアホくさいことに労力を割くのは得策ではないとしてUnityやUnreal Engineなどのゲームエンジンが爆発的に普及した。
デバッグ
ステップ実行やウォッチ変数などを搭載した「まとも」なデバッガがあるのはHLSLだけである。Visual Studio (communityエディションにもある)に搭載されている「Visual Studio Graphics Analyzer」しか存在しない。これはCPU上でGPUをエミュレーションし、その上で「最初の1スレッド目だけ再現」しているらしい。
XcodeとMetalではパイプラインの実行順序くらいしか確認できないのでデバッガはないに等しい。GLSLはWebGLを使った「見た目でデバッグ」というウェブサービスがあるが計算ミスまでは特定できない。GPUだと「print文でログや変数表示」などという原始的なデバッグすらできないので「まとも」なデバッガの存在は非常に重要なのである。
プログラマブルシェーダーを使うのであれば、環境を問わず、まずはHLSLで書いて、そこから移植するというのが正しい手順であると言える。OpenGLの中の人達が作ったValkanではGLSLに加えHLSLも採用された。宗教上の理由だけでは超えられない壁があるということである。