Skip to content

ForwardBaseとForwardAddのBlendをRGB・Alpha別設定とBlendOpに対応する #52

Description

@PenguinDOOM

目的

Pure BaseのForwardBaseおよびForwardAddで、RGBとAlphaのBlend factorを個別に設定できるようにし、BlendOpも公開する。

Rendering Modeは標準的なBlend状態を提供しつつ、必要なマテリアルではより詳細な合成規則を設定できる描画状態契約へ拡張する。

対象

  • PureBase/Unlit
  • PureBase/Toon
  • PureBase/PBR
  • PureBase/Hybrid
  • ForwardBaseのSrcBlend / DstBlend RGB・Alpha
  • ForwardAddのSrcBlend / DstBlend RGB・Alpha
  • ForwardBaseおよびForwardAddのBlendOp RGB・Alpha
  • Rendering Mode normalizer
  • Material Inspector UI
  • 公開プロパティ、シェーダー契約、テスト

設計事項

実装前に次を確定する。

  • 公開プロパティ名と型。
  • ForwardBase用として次を分離する。
    • Src Blend RGB
    • Dst Blend RGB
    • Src Blend Alpha
    • Dst Blend Alpha
    • BlendOp RGB
    • BlendOp Alpha
  • ForwardAdd用として次を分離する。
    • Src Blend RGB
    • Dst Blend RGB
    • Src Blend Alpha
    • Dst Blend Alpha
    • BlendOp RGB
    • BlendOp Alpha
  • Rendering Mode標準値とユーザー指定値をどう共存させるか。
  • Transparent時のForwardAddで追加ライトによるAlpha蓄積を避ける既定値。
  • 現在の ColorMask RGB をForwardAddで維持するか、Alpha Blend設定を公開する以上Alpha出力も許可するか。
  • Resync Rendering Modeがユーザー指定Blend状態を上書きする範囲。
  • 既存 _SrcBlend / _DstBlend / _AddSrcBlend / _AddDstBlend の互換性を維持するか、移行するか。

実装要件

  • 4つのベースシェーダーで同じBlend契約を使用する。
  • ShaderLabで Blend SrcRGB DstRGB, SrcAlpha DstAlpha を利用する。
  • 必要に応じて BlendOp OpRGB, OpAlpha を利用する。
  • Rendering Modeの標準値から逸脱しない既定設定を用意する。
  • 既存マテリアルがアップグレード後に意図せず異なる合成結果にならないようにする。
  • 複数選択、Undo、保存、再読み込み、Resyncを正しく扱う。
  • 不要なシェーダーバリアントを増やさない。

完了条件

  • ForwardBaseでRGBとAlphaのSrcBlend / DstBlendを個別設定できる。
  • ForwardAddでRGBとAlphaのSrcBlend / DstBlendを個別設定できる。
  • ForwardBaseでRGBとAlphaのBlendOpを個別設定できる。
  • ForwardAddでRGBとAlphaのBlendOpを個別設定できる。
  • Opaque / Cutout / Transparentそれぞれの標準Blend状態が定義されている。
  • Transparent + ForwardAddで不自然なAlpha蓄積が発生しない既定値になっている。
  • ForwardAddのColorMask契約が決定され、実装と文書が一致している。
  • Rendering Mode切り替えおよびResyncとの所有権が明確になっている。
  • 既存マテリアル互換性または移行方針が文書化されている。
  • 公開プロパティABIとシェーダー契約を更新する。
  • 代表的なBlend factor / BlendOpの回帰確認と影響範囲のDaily検証が通る。

優先順位

ZWrite override (#51) の次に実装する。

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions