シェーダ言語メモ

シェーダとは

  • GPU上での描画処理を細かく設定する

    • グラフィックス・パイプライン上の処理をプログラム言語で制御できる

OpenGL用の GLSL (OpenGL Shading Language)
DirectX用の HLSL (High Level Shading Language)

GPU (Graphics Processing Unit)

  • PCの画像処理を担当する部品の1つ

参考

  • CPUはCentral Processing Unitという

www.gizmodo.jp

グラフィックス・パイプライン

  • GPUで行われる三次元グラフィックスの描画処理の流れ

  • プログラマブルシェーダの導入により,パイプライン上の(レンダリング時における)頂点単位の処理や画素単位の処理がユーザに解放された

    • 頂点シェーダ(Vertex Shader)とフラグメントシェーダ(Fragment Shader, Pixel Shader)

f:id:tyokota_0529:20170610162430p:plain

コンピュータグラフィックス[改訂新版] (コンピュータグラフィックス編集委員会著) P. 57より

GLSL (OpenGL Shading Language)

シェーダープログラムの利用手順

記述 内容
glCreateShader() バーテックスシェーダとフラグメントシェーダのシェーダオブジェクトを作成
glShaderSource() 作成したそれぞれのシェーダオブジェクトに対してソースプログラムを読み込む
glCompileShader() 読み込んだソースプログラムをコンパイルします
glCreateProgram() プログラムオブジェクトを作成
glAttachShader() プログラムオブジェクトに対してシェーダオブジェクトを登録
glLinkProgram() シェーダプログラムをリンク
glUseProgram() シェーダプログラムを適用

シェーダの種類

頂点シェーダ(Vertex Shader)

  • 各頂点が持つ情報を制御するシェーダ

  • 頂点位置や頂点の色などを制御可能

  • ラスタライザにより情報が線形補間される

フラグメントシェーダ(Fragment Shader, Pixel Shader)

  • 各画素ごとに情報を制御するシェーダ

  • ラスタライザから受け取った情報を基に描画色を計算する

f:id:tyokota_0529:20170610213829p:plain