Shader 勉強メモ 「シェーダーとは?」
Unityでのシェーダーの位置づけ「シェーダーで何ができる?」
グラフィックスパイプライン:一連の描画工程
CPU上でのドローコール |
|
バーテックスシェーダー |
頂点数の増減・プリミティブの変更を含まない頂点属性の変更 |
プリミティブアセンブリー |
|
テッセレーションシェーダー |
プリミティブの分割粒度を変更できる |
ジオメトリーシェーダー |
頂点数の増減・プリミティブの変更を含む頂点属性の変更 |
ラスタライゼーション |
|
フラグメントシェーダー |
テクスチャやオブジェクトの表面情報を用いた複雑な陰影処理 |
ROP処理 |
|
フレームバッファの出力 |
|
※バーテックス=頂点情報、フラグメント=色情報・深度情報、プリミティブ=点と直線と三角形からなる基本図形
グラフィックスパイプライン外でのシェーダーの利用
コンピュートシェーダー |
Unity のコンピュートシェーダーは DirectX 11 の DirectCompute テクノロジに非常に近いものです。コンピュートシェーダーを実行できるプラットホームは以下のとおりです。 ・DirectX 11 グラフィックス API と Shader Model 5.0 GPU を伴う Windows と Windows ストア ・現段階で一般的に使用されている OpenGL プラットフォーム (Linux か Windows 上の OpenGL 4.3、Android 上の OpenGL ES 3.1)。Mac OS X は OpenGL 4.3 に対応していないため、コンピュートシェーダーはまだ、利用することはできません。 |
ー『Unity - マニュアル: コンピュートシェーダー』より引用
Unityでのシェーダーの扱い「シェーダーをどうやって使う?」
Shader Labと呼ばれるUnity独自の形式。各種シェーディング言語で書かれたシェーダーをShader Labに埋め込むことでGPUに計算させることができる。以下のフォーマットで書かれる。
Shader “Tutorial/Test”{ Properties{ [UnityEditer上から編集できる変数やテクスチャの指定などの設定] } SubShader{ Pass{ [各種シェーディング言語で書かれたシェーダー] } } FallBack “Diffuse” } |
シェーディング言語の種類
GLSL (OpenGL Shading Language) |
C言語ライクなシェーディング言語 |
Cg (C for Graphics) |
NVIDIAが開発。2012年に開発終了。 |
HLSL (High Level Shading Language) |
Microsoftが開発。コンピュートシェーダーも書ける。 |
MSL (Metal Shading Language) |
シェーダー実行時の処理
Shader Labの形式にCg/HLSLで記述→実行時プラットフォーム毎にGLSLに変換される。
シェーダー関連の気になる記事
Unity - マニュアル: グラフィックスコマンドバッファ
Unity - マニュアル: DirectX 11 と OpenGL Core
Unity 上に自分で物理エンジンを実装したい - yuki-koyama's blog
Unityのシェーダーについて自分なりにまとめてみた - SSSSLIDE