シェーダーバリアント
ドキュメント:
シェーダーキーワードの宣言と使用 | Unity マニュアル [公式]
使い方
参考:
Shader Variant について調べてみた – Qiita
shader_feature や multi_compile でシェーダのバリアントを作る | LIGHT11
Asset Bundle と Shader Variant の関係 | 黒河優介
Shader Variant について調べてみた | しゅみぷろ
プラグマ
シェーダーバリアントを作成するには、「プラグマ」 (#pragma
) あるいは「コンパイラーディレクティブ」と呼ばれる構文を用いてシェーダーキーワードを指定する。
multi_compile
:シェーダーバリアントを生成するmulti_compile_local
:シェーダーバリアントを生成する/キーワードはローカルに作用するshader_feature
:未使用のバリアントはビルドに含まれないshader_feature_local
:未使用のバリアントはビルドに含まれない/キーワードはローカルに作用する
定義できるグローバルキーワードは 256
個に制限される。Unity は内部的に 60
個のグローバルキーワードを使用する。ユーザーが定義できるグローバルキーワードの上限は実質的に 190
個程度に制限される。ローカルキーワードはシェーダー毎に 64
個に制限される。
参考:
シェーダーキーワードの宣言と使用 | Unity マニュアル [公式]
シェーダーキーワードを使う
ドキュメント:
マテリアルパラメーターへのスクリプトを使ったアクセスと変更 | Unity 2020.3 マニュアル [公式]
シェーダーキーワードの宣言と使用 | Unity マニュアル [公式]
Shader.EnableKeyword | Unity スクリプトリファレンス [公式]
Shader.DisableKeyword | Unity スクリプトリファレンス [公式]
参考:
Shader の定義済みキーワードを動的に有効/無効化する | KAZUPON 研究室
How do I set a shader setting/property at runtime using MonoBehaviour? – Stack Overflow
ビルトインショートカット
multi_compile_fwdbase
multi_compile_fwdadd
multi_compile_fwdadd_fullshadows
multi_compile_fog
ドキュメント:
シェーダーキーワードの宣言と使用 | Unity マニュアル [公式]
マルチコンパイル
参考:
Multi-Compile Shaders | Martin Palko
パフォーマンス/最適化
ドキュメント:
シェーダーのロード時間の最適化 | Unity 2018.4 マニュアル [公式]
シェーダーバリアントコレクション
ドキュメント:
シェーダーバリアントコレクション | Unity マニュアル [公式]
事例
リンク:
50個のエフェクトシェーダを統一した話 & シェーダ共通化テクニックまとめ | CyberAgent Developers Blog