Skip to content

不透明・半透明・カットアウトの描画モードと切り替えUIを追加する #22

Description

@PenguinDOOM

目的

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

  • RenderTypeOpaque
  • Geometryキューを使用する。
  • 通常の不透明ブレンドを使用する。
  • 深度を書き込む。
  • ベーステクスチャおよびベースカラーのアルファで表面を透過させない。

Cutout

  • RenderTypeTransparentCutout
  • AlphaTestキューを使用する。
  • 通常の不透明ブレンドを使用する。
  • 深度を書き込む。
  • ベーステクスチャとベースカラーから得たアルファを _Cutoff でクリップする。
  • 0.1.xの既定挙動を維持する。

Transparent

  • RenderTypeTransparent
  • Transparentキューを使用する。
  • 標準的なアルファブレンドを使用する。
  • 原則として深度を書き込まない。
  • ベーステクスチャとベースカラーから得たアルファを出力へ反映する。
  • ForwardAddでアルファや追加ライトが重複適用されない描画状態を使用する。

設計事項

実装前に次を確定する。

  • 描画モードを表す公開プロパティ名と値。
  • SrcBlendDstBlendZWrite、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の標準フェーズとモジュール境界を維持する。

完了条件

  • 4つのベースシェーダーでOpaque、Cutout、Transparentを選択できる。
  • UI操作でBlend、ZWrite、RenderType、render queue、キーワードが正しく同期される。
  • 既存マテリアルがCutoutとして同等の描画を維持する。
  • Opaqueではアルファによる意図しない透過が発生しない。
  • CutoutではForwardBase、ForwardAdd、ShadowCaster、Metaでクリップ規則が一貫している。
  • TransparentではForwardBaseとForwardAddの合成が意図どおりで、追加ライトによる不自然なアルファ蓄積がない。
  • TransparentのShadowCasterとMetaの仕様が決定され、実装と文書が一致している。
  • 複数選択、Undo、保存、再読み込み後もUIとマテリアル状態が一致する。
  • 公開プロパティABIとシェーダー契約を更新する。
  • 各モードの代表的な描画・深度・影・ライトマップ回帰テストがある。
  • 影響範囲のDaily検証が通る。
  • 0.2.0-beta.1のRelease validationが通る。

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions