ShaderLab

  • サーフェスシェーダー
  • 頂点シェーダー/フラグメントシェーダー
  • 固定関数シェーダー

公式サイト:

ShaderLab | Unity マニュアル [公式]

概要

参考:

Unity のシェーダーについて自分なりにまとめてみた | Speaker Deck

シェーダを書けるプログラマになろう – SlideShare

導入

参考:

ランバート反射/フォン反射/フレネル効果を Unity で実装した話 – Qiita

Unity で Lambert 拡散反射シェーダーを作る | 3DCG school

Unity のシェーダで遊んでみよう | おもちゃラボ

20行から始める Unity ミニマルシェーダ | おもちゃラボ

Shader を勉強する – Qiita

Unity で Shader の勉強 その1 – Qiita

Unity で Shader の勉強 その2 – Qiita

Unity で Shader の勉強 その3 – Qiita

Unity で Shader の勉強 その4 – Qiita

Unity で Shader の勉強 その5 – Qiita

シェーダーを書く | Unity 2019.4 マニュアル [公式]

使い方

参考:

シェーダ入門 | コガネブログ

Unity のシェーダースクリプトについて | かめくめ

Unity のシェーダの基礎を勉強してみたのでやる気出してまとめてみた | 凹みTips

Unity で Shader の勉強 その1 – Qiita

シェーダーによる色の変更、発光、光沢を持たせない設定 | @IT

シェーダーを書いてみよう! ShaderLab の簡単な書き方! | 侍エンジニア塾ブログ

入門

参考:

7日間でマスターする Unity シェーダ入門 | おもちゃラボ

書き方

こちらのページを参照

参考:

Unity のシェーダの基礎を勉強してみたのでやる気出してまとめてみた | 凹みTips

ShaderLab ノート – Qiita

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 で記述する。固定関数シェーダーはインポート時に頂点シェーダー/フラグメントシェーダーに変換される。

参考:

Shader メモ 固定関数シェーダ – Qiita

ShaderLab と固定関数シェーダー – チュートリアル | Unity 2019.4 マニュアル [公式]

シェーダー変数

参考:

シェーダで使える定義済値 – Qiita

ビルトインのシェーダー変数 | Unity 2018.4 マニュアル [公式]

マクロ

参考:

シェーダでマクロを使う | LIGHT11

インクルード (.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

コンパイル

非同期シェーダーコンパイル

コンパイル済みでないシェーダーバリアントを描画する際に、そのシェーダーバリアントをコンパイルキューに追加する。コンパイルが完了するまでの間、シアン (水色) のダミーシェーダーによって代わりに描画を実行する。

コード
  • Show Generated Codeサーフェスシェーダーから生成されたシェーダーのコードを表示する。
  • Compile and Show Codeシェーダーをコンパイルし、生成された GPU コード (逆アセンブルコード) を表示する。

参考:

シェーダーのコンパイル | Unity マニュアル [公式]

非同期シェーダーコンパイル | Unity マニュアル [公式]

シェーダーアセット | Unity マニュアル [公式]

デバッグ

参考:

RenderDoc の統合 | Unity マニュアル [公式]

Visual Studio を使った DirectX 11/12 シェーダーのデバッグ | Unity 2019.4 マニュアル [公式]

まとめ/Tips

こちらのページを参照

参考:

シェーダチートシート | LIGHT11

Unity Shader まとめ | ゆにてく備忘録

Unity Shader 入門した頃の自分に教えたい事 – Qiita

シェーダースニペット集 | 黒鳥のメモ

記事をシェアする:
タグ:

コメントを残す

メールアドレスが公開されることはありません。

Protected by reCAPTCHA