次の項目は別ページに分割しました。
関連ページ:
シェーダーに関するツールは次のページにまとめています。
シェーダー/マテリアルの一般的な使い方は次のページにまとめています。
ShaderLab
- サーフェスシェーダー
- 頂点シェーダー/フラグメントシェーダー
- 固定関数シェーダー
公式サイト:
目次
概要
参考:
Unity のシェーダーについて自分なりにまとめてみた | Speaker Deck
シェーダを書けるプログラマになろう – SlideShare
導入
参考:
ランバート反射/フォン反射/フレネル効果を Unity で実装した話 – Qiita
Unity で Lambert 拡散反射シェーダーを作る | 3DCG school
20行から始める Unity ミニマルシェーダ | おもちゃラボ
Unity で Shader の勉強 その1 – Qiita
Unity で Shader の勉強 その2 – Qiita
Unity で Shader の勉強 その3 – Qiita
Unity で Shader の勉強 その4 – Qiita
Unity で Shader の勉強 その5 – Qiita
シェーダーを書く | Unity 2019.4 マニュアル [公式]
使い方
参考:
Unity のシェーダの基礎を勉強してみたのでやる気出してまとめてみた | 凹みTips
Unity で Shader の勉強 その1 – Qiita
シェーダーによる色の変更、発光、光沢を持たせない設定 | @IT
シェーダーを書いてみよう! ShaderLab の簡単な書き方! | 侍エンジニア塾ブログ
入門
参考:
7日間でマスターする Unity シェーダ入門 | おもちゃラボ
書き方
参考:
Unity のシェーダの基礎を勉強してみたのでやる気出してまとめてみた | 凹みTips
Surface シェーダーとフラグメントシェーダーの違いを軽くまとめてみた – Qiita
ShaderLab シンタックス | Unity 2019.4 マニュアル [公式]
ShaderLab と固定関数シェーダー – チュートリアル | Unity 2019.4 マニュアル [公式]
サーフェスシェーダーの記述 | Unity マニュアル [公式]
Unity で使用するシェーダー言語 | Unity 2018.4 マニュアル [公式]
サーフェスシェーダー
照明あるいは影による影響を考慮してメッシュを描画する。Cg/HLSL で記述する。フォワードレンダリングあるいはディファ―ドレンダリングをサポートする。サーフェスシェーダーは内部的に頂点シェーダー/フラグメントシェーダーに変換される。
参考:
サーフェスシェーダーの記述 | Unity マニュアル [公式]
頂点シェーダー/フラグメントシェーダー
ライティングを必要としない場合に用いる。あるいは、頂点の情報をダイレクトに扱う低レベルシェーダーを作成する場合にも用いる。Cg/HLSL で記述する。照明あるいは影を扱う場合はサーフェスシェーダーの方が向いている。
参考:
Vertex and Fragment Shader Examples のサンプルを試しつつメモ – Qiita
頂点シェーダーとフラグメントシェーダーの記述 | Unity 2019.4 マニュアル [公式]
カスタムシェーダーの基礎 | Unity マニュアル [公式]
頂点プログラムとフラグメントプログラム – チュートリアル | Unity 2019.4 マニュアル [公式]
固定関数シェーダー
**LEGACY**
ShaderLab で記述する。固定関数シェーダーはインポート時に頂点シェーダー/フラグメントシェーダーに変換される。
参考:
ShaderLab と固定関数シェーダー – チュートリアル | Unity 2019.4 マニュアル [公式]
シェーダー変数
参考:
ビルトインのシェーダー変数 | Unity 2018.4 マニュアル [公式]
マクロ
参考:
インクルード (.cginc ファイル)
自動的にインクルードされるファイル
HLSLSupport.cginc
:ヘルパーマクロ及びクロスプラットフォームのシェーダーコンパイルの定義UnityShaderVariables.cginc
:グローバル変数
標準インクルードファイル
UnityCG.cginc
:ヘルパー関数AutoLight.cginc
:ライティングやシャドウで用いる関数TerrainEngine.cginc
:地形及び植生用のシェーダーヘルパー関数
サーフェスシェーダー用インクルードファイル
サーフェスシェーダーを記述すると自動的に含まれる。
Lighting.cginc
:標準サーフェスシェーダーライティングモデル
データ構造
UnityCG.cginc
で定義されているデータ構造
appdata_base
appdata_tan
appdata_full
appdata_img
参考:
よく使うシェーダー関数は cginc を作ると便利 – Qiita
シェーダで cginc ファイルをインクルードして使う | LIGHT11
Shader 書く人は .cginc があると幸せになれる – Qiita
シェーダーエラー failed to open source file: ‘cginc’ | ゲームの作り方!
failed to open source file: ‘~~~~.cginc’ とエラーが出る時の対処法 | kan のメモ帳
ビルトインのシェーダー include ファイル | Unity マニュアル [公式]
ビルトインシェーダーヘルパー機能 | Unity マニュアル [公式]
where can I find the reference of “appdata_img” – Unity Forum
セマンティクス
頂点データ
POSITION
NORMAL
TEXCORRD0
TEXCORRD1
TEXCORRD2
TEXCORRD3
TANGENT
COLOR
レンダーターゲット
SV_TARGET
SV_TARGET1
,SV_TARGET2
, …SV_DEPTH
ラスタライズ
SV_POSITION
その他
VPOS
/UNITY_VPOS_TYPE
VFACE
SV_VertexID
参考:
Unity のシェーダーセマンティクスまとめ – Qiita
シェーダーセマンティクス | Unity マニュアル [公式]
Semantics | Microsoft Docs [公式]
定義済みマクロ
参考:
定義済みシェーダープリプロセッサーマクロ | Unity マニュアル [公式]
プロパティー
参考:
Properties | Unity 2019.4 マニュアル [公式]
Cg/HLSL でシェーダープロパティーを参照する | Unity マニュアル [公式]
シェーダーのデータ型と精度 | Unity マニュアル [公式]
座標系
- レンダーテクスチャ座標
- UV 座標
- クリップスペース座標
- デプスバッファの値域
参考:
プラットフォーム特有のレンダリングの違い | Unity 2019.4 マニュアル [公式]
SubShader タグ
Queue
:レンダリング順序を指定するRenderType
:シェーダーの置き換え及びカメラ深度テクスチャの生成に使用されるDisableBatching
:バッチングを無効化するForceNoShadowCasting
:影を投影しないIgnoreProjector
:プロジェクターからの影響を受けないCanUseSpriteAtlas
:スプライトアトラスと互換性があるPreviewType
:プレビューの形状を指定する
参考:
SubShader と Pass の中で使用できる Tag リスト | 渋谷ほととぎす通信
SubShader 内のタグ | Unity 2019.4 マニュアル [公式]
レンダーキュー (Queue)
マテリアルでカスタムレンダーキューを指定しなかった場合、シェーダーにおけるキューの指定値が使われる。
参考:
マテリアルの描画がシェーダーの Queue 順に処理されない原因と対策 | 神様は有休消化中です。
カリング (Culling)
Back
:表面のみレンダリングする (デフォルト)Front
:裏面のみレンダリングするOff
:両面をレンダリングする
参考:
カリング制御可能な標準シェーダーを作る | Kludge Factory
Culling と Depth Testing | Unity 2018.4 マニュアル [公式]
互換性/コンパイルターゲット
参考:
プラットフォーム特有のレンダリングの違い | Unity 2019.4 マニュアル [公式]
シェーダーコンパイルターゲットレベル | Unity マニュアル [公式]
レンダリングパス
- フォワードシェーディング (Forward Rendering)
- ディファ―ドシェーディング (Deferred Shading)
参考:
Forward レンダリングと Deferred レンダリングの違いを軽くまとめてみた – Qiita
Forward Rendering と Deferred Shading | しゅみぷろ
Deferred Shading でライトを贅沢に使いたい!基本的な概念の説明とメリデメを考察 | LIGHT11
デバッグ
参考:
RenderDoc の統合 | Unity マニュアル [公式]
Visual Studio を使った DirectX 11/12 シェーダーのデバッグ | Unity 2019.4 マニュアル [公式]
まとめ/Tips
参考: