目的
0.2.0で、Pure Baseの全ベースシェーダーに次の描画モードを実装し、マテリアルInspectorから安全に切り替えられる共通UIを追加する。
- 不透明(Opaque)
- カットアウト(Cutout)
- 半透明(Transparent)
0.1.xでは全シェーダーが固定のCutoutとして公開されているため、既存マテリアルはアップグレード後も同等の描画を維持する。
対象
PureBase/Unlit
PureBase/Toon
PureBase/PBR
PureBase/Hybrid
- ForwardBase、ForwardAdd、ShadowCaster、Metaの描画状態とアルファ処理
- 共通のMaterial Inspector UI
- 公開プロパティ、シェーダー契約、テスト、既存マテリアル互換性
実装順
描画モードの基準
Opaque
RenderType は Opaque。
- Geometryキューを使用する。
- 通常の不透明ブレンドを使用する。
- 深度を書き込む。
- ベーステクスチャおよびベースカラーのアルファで表面を透過させない。
Cutout
RenderType は TransparentCutout。
- AlphaTestキューを使用する。
- 通常の不透明ブレンドを使用する。
- 深度を書き込む。
- ベーステクスチャとベースカラーから得たアルファを
_Cutoff でクリップする。
- 0.1.xの既定挙動を維持する。
Transparent
RenderType は Transparent。
- Transparentキューを使用する。
- 標準的なアルファブレンドを使用する。
- 原則として深度を書き込まない。
- ベーステクスチャとベースカラーから得たアルファを出力へ反映する。
- ForwardAddでアルファや追加ライトが重複適用されない描画状態を使用する。
設計事項
実装前に次を確定する。
- 描画モードを表す公開プロパティ名と値。
SrcBlend、DstBlend、ZWrite、Alpha Clipなどをプロパティ駆動にする範囲。
RenderType Override Tag、render queue、シェーダーキーワードをUIから同期する方法。
- TransparentのShadowCasterを無効にするか、アルファクリップ等の別規則を持たせるか。
- TransparentのMetaパスおよびライトマップへの寄与。
- Transparentでカリング、深度、ソート問題をどこまでユーザー設定として公開するか。
- モード変更後にユーザー指定のrender queueを許可するか、モード標準値へ戻す操作を用意するか。
切り替えUI
- 4シェーダーで共通利用できるMaterial Inspector UIを実装する。
- Opaque、Cutout、Transparentを明示的に選択できる。
- 選択したモードに応じて、Blend、ZWrite、RenderType、render queue、必要なキーワードを一貫して設定する。
_Cutoff はCutout時のみ通常表示する。
- Transparent時はアルファが有効であることをUI上で分かるようにする。
- 複数マテリアル選択時のmixed value、Undo、Prefab・Asset保存を正しく扱う。
- スクリプトから値を変更したマテリアルを再同期できる処理を用意する。
- モード切り替え以外の公開プロパティを不要に書き換えない。
互換性
- 新規および既存マテリアルの既定モードはCutoutとする。
- 0.1.xのマテリアルを読み込んだだけでOpaqueやTransparentへ変化しない。
- シェーダー名と既存プロパティ名を維持する。
- オプションモジュールなしで全描画モードが動作する。
- Shader-Coreの標準フェーズとモジュール境界を維持する。
完了条件
目的
0.2.0で、Pure Baseの全ベースシェーダーに次の描画モードを実装し、マテリアルInspectorから安全に切り替えられる共通UIを追加する。
0.1.xでは全シェーダーが固定のCutoutとして公開されているため、既存マテリアルはアップグレード後も同等の描画を維持する。
対象
PureBase/UnlitPureBase/ToonPureBase/PBRPureBase/Hybrid実装順
描画モードの基準
Opaque
RenderTypeはOpaque。Cutout
RenderTypeはTransparentCutout。_Cutoffでクリップする。Transparent
RenderTypeはTransparent。設計事項
実装前に次を確定する。
SrcBlend、DstBlend、ZWrite、Alpha Clipなどをプロパティ駆動にする範囲。RenderTypeOverride Tag、render queue、シェーダーキーワードをUIから同期する方法。切り替えUI
_CutoffはCutout時のみ通常表示する。互換性
完了条件