モジュール型シェーダーシステムです。シェーダー本体はプラットフォームやレンダーパイプラインに依存しますが、各モジュールは基本的な処理であれば依存せずに記述できるようになっています。
- プラットフォームに依存しないモジュールの定義
- マテリアルエディタのローカライズ対応(.poファイル)
- モジュール固有IDによる変数名重複回避
- プラットフォームに依存しないテキストベースのマテリアル設定値のコピー、ペースト処理
- ドキュメントは日本語のみです。ブラウザなどの機械翻訳で十分読める上、仮に私が英語のドキュメントを書く場合には機械翻訳を使用するため結果として品質がほとんど変わらないためです。
- モジュールによるパスの追加は対応しません。モジュール同士の競合が発生するためです。シェーダー本体でマルチパスの定義を行ってください。
UnityEditor.MaterialPropertyDrawerは使用できません。VisualElementベースでエディタが記述されているためです。これとは別にUIをカスタマイズする方法が用意されています。- シェーダー本体はプラットフォームに依存します。基本的にはメインテクスチャやノーマルマップ、アウトライン程度しか処理しないことを想定しており、書き換えが容易であるためです。
- モジュール側でUnity固有の機能は基本的に利用できません。ただしシェーダーキーワードについては
[SCConstValue()]アトリビュートを付けることで自動生成されたシェーダーキーワードに基づきプロパティが定数化され、対応できます。 - マテリアルエディタはIMGUIを使いません。VisualElementを使います。
- モジュールがシェーダー本体や他モジュールで定義された動作を変更させるような機能には対応しません。動作を変更するモジュール同士で競合が発生するためです。