|
GLSL (OpenGL Shading Language) はGLslangとしても知られ、C言語をベースとした高レベルシェーディング言語である。これはアセンブリ言語やハードウェアに依存した言語を使わないで、開発者がグラフィックスパイプラインを直接制御できるようにOpenGL ARB (Architecture Review Board) 〔About the OpenGL Architecture Review Board Working Group 〕で策定された。 == 背景 == Direct3D 7までの時代、すなわち1990年代までのリアルタイム3Dコンピューターグラフィックスは、OpenGLやDirect3DといったAPIを通して、グラフィックスカード上のチップ(GPU)にあらかじめ用意された固定のレンダリングパイプライン上で、固定機能のシェーダー(頂点トランスフォームや陰影計算を専門に担当するユニット)を組み合わせることで実現されていた。Direct3D 8が登場した2000年以降は、グラフィックスカードの進化・性能向上に伴い、新機能はハードウェア実装による固定機能ではなく、アプリケーション開発者がソフトウェアプログラム(プログラマブルシェーダー)によって頂点レベル・フラグメントレベル(ピクセルレベル)での制御・カスタマイズを行ない、レンダリングパイプライン内での柔軟性や表現力を増すことができる形で追加されることが多くなっている。 元々、このプログラマブルシェーディング機能は複雑で直感的でないアセンブリ言語で書かれたシェーダーを使わないと実現できなかった。OpenGL ARBは、OpenGLをグラフィックス産業の歴史の中でオープンスタンダードなものにしていく中で、グラフィックス処理を行うプログラミングをより直感的・効率的にできる方法として、OpenGL Shading Languageを作り出した。 OpenGL Shading Languageは2003年に発表されたOpenGL 1.5の拡張機能として導入された〔"The OpenGL(R) Graphics System: A Specification (Version 1.5)", p.294 〕が、OpenGL ARBはOpenGL 2.0にGLSLを含めることを正式に決定した。OpenGL 2.0は1992年に発表されたOpenGL 1.0から数えて初のメジャーバージョンアップである。 初期のOpenGLプログラマブルシェーダーは、頂点単位のトランスフォームや陰影計算を行なうバーテックスシェーダーと、フラグメント(ピクセル)単位の陰影計算を行なうフラグメントシェーダーのみが利用可能であった。その後、プリミティブの増減や変更などを実行できるジオメトリシェーダーがOpenGL 3.2/GLSL 1.5にて標準化された。またOpenGL 4.0で固定機能シェーダーであるテッセレーションステージが追加されるに伴い、テッセレーション・コントロールシェーダーと、テッセレーション・エバリュエーションシェーダー、これら2つのプログラマブルなシェーダーがGLSLの仕様に追加された。フラグメントシェーダーもサンプルレベルでの制御が可能となった。 なお、OpenGLと同様の3DグラフィックスAPIであるDirectX(Direct3D)およびそのシェーディング言語であるHLSLにはバージョン11以降、GPUにおける汎用的なコンピューティング(GPGPU)を可能とするDirectX Compute Shader(DirectCompute)が追加されているが、OpenGLおよびGLSLのバージョン4.0時点ではこれに相当するシェーダーは含まれていなかった。しかし、バージョン4.3においてOpenGL Compute Shaderとして同等機能が導入されることになった。なお、Compute Shaderの導入以前からOpenGLの管轄を行なっているクロノスが同様にオープン仕様として策定している、GPUを汎用コンピューティングに用いることのできるAPIとしてOpenCLが存在するが、こちらはCPUやGPU等あらゆる計算資源を計算に用いることのできる異種計算資源混在(ヘテロジニアス)環境向けのAPIであり、グラフィックスパイプラインとの連携を主目的としたCompute Shaderとは得意分野が若干異なる。 GLSLを使うメリットとして、 * レンダリングアルゴリズムの柔軟なカスタマイズや再利用性が増すことで、従来のハードウェア固定機能にとらわれない、柔軟でユニークかつ高品質なリアルタイム3DCGシーンの構築が可能となる。 * MacintoshやWindows、Linuxを含む複数のOS間での互換性を確保できる。 * アセンブリ言語を用いるよりもコードの再利用性やメンテナンス性が増す。 * OpenGL Shading Languageをサポートするどんなハードウェアベンダのグラフィックスカード上でも動作するシェーダーを書くことができる能力を持つ。 * それぞれのハードウェアベンダはデバイスドライバ内にGLSLコンパイラを含めることができるので、そのグラフィックスカードのアーキテクチャに最適化されたコードを生成することができる。 などが挙げられる。 従来の固定機能シェーダーに対するデメリットとしては、 * シェーダーのコンパイルおよびアタッチなど、レンダリングのための準備作業が増える。 * OpenGL APIの他に、GLSLの学習コストがかかる。 * GPU特性やハードウェア仕様を把握してGLSLコードを記述する必要があり、CPUと比較してチューニングが難しい。 などが挙げられる。 なお、GLSLの派生規格として、組み込み環境向けのOpenGL ES用のシェーダー言語「GLSL ES」が存在する。 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「GLSL」の詳細全文を読む スポンサード リンク
|