2025年3月18日

Standard Effectのモジュール化

最新のEvergineリリースでは、新しいLibrary Effectアセットを通じて、シェーダーアーキテクチャに大幅な進歩が導入されました。コードの可読性を高め、複数のプロジェクト間での広範な再利用を促進するために特別に設計されたこの新しいアセットは、冗長なパターンやユーティリティ関数など、シェーダー開発中に遭遇する一般的な課題に対処します。

Evergineにおいて、主要な組み込みシェーダーはStandard Effectとして知られています。この汎用性の高いシェーダーは、デフォルトで3DモデルがEvergineシーンに読み込まれる際に利用されます。多数の設定に対応するよう設計されたStandard Effectは「Uber Shader」として機能し、多様なマテリアル効果を生み出すために1800万以上の組み合わせを提供します。従来、このシェーダーはモノリシックに構造化されており、2000行を超えるコードを含んでいたため、保守とカスタマイズにかなりの複雑さをもたらしていました。

これらの課題を克服するため、Evergineチームは大規模な再構築イニシアチブに着手し、Standard Effectをモジュールライブラリに分割しました。このモジュール化により、保守性、明確性、再利用の容易さが大幅に向上します。新たにモジュール化されたStandard Effectは、以下の個別のライブラリで構成されています。

  • Structures: StandardEffect全体で利用される基本的なシェーダー構造体(例:LightProperties)を定義します。
  • Common: 共通のエンジンディレクティブと、頻繁に使用されるユーティリティメソッド(例:ガンマ-リニア変換)を格納します。
  • Material: 物理ベースレンダリング(PBR)マテリアル生成のための基本的なメソッドを含みます。
  • Lighting: さまざまなライティングモデル(ディレクショナル、ポイント、スポット、エリアライト)を計算するための包括的なメソッドを含みます。
  • Shadow: 異なる光源からの影の寄与を計算するための専用メソッドを提供します。

更新されたStandard Effectは、これらの個別ライブラリを直接参照するようになり、シェーダーコードが大幅に簡素化され、効率的な開発プラクティスが促進されます。

このモジュール化の重要な側面は、ユーザー視点での透明性です。開発者は、機能的な変更を意識することなく、既存のプロジェクトでStandard Effectを引き続きシームレスに使用できます。しかし、新たに整理されたライブラリ構造により、開発者はこれらの標準化されたライブラリを活用するカスタムシェーダーを容易に作成でき、Evergineの高度なライティングおよびシャドウシステムとの容易な統合が保証されます。

さらに、開発者をさらに支援するため、Evergineチームは追加の特殊なライティングモデルライブラリを積極的に開発しています。この補足ライブラリには、広く認知されたライティングアルゴリズムが含まれており、複雑なライティング環境へのカスタムシェーダー統合を合理化するために明示的に設計されています。Standard Effect内の元のライティングライブラリは多数のパラメータを処理する必要があるため、この専用ライブラリはよりシンプルな統合パスと明確な実装戦略を提供します。

現在、この補足ライブラリが提供する利用可能なライティングモデルは以下の通りです。

  • Phong
  • Blinn-Phong
  • Cook-Torrance
  • Oren-Nayar

新たに開発されたライティングモデルライブラリを含む、これらの強化されたモジュールライブラリはすべて、コアEvergine.Coreパッケージ内に便利に含まれており、すべての標準的なEvergineプロジェクトですぐに利用可能です。

ライティングとシャドウをサポートするカスタムシェーダーの作成

新しいモジュールシェーダーライブラリにより、高度なライティングとシャドウを統合したカスタムシェーダーの開発が大幅にシンプルになります。これらの機能を組み込んだカスタムシェーダーを作成するには、以下の手順に従ってください。

必須ライブラリのインクルード

Lighting ModelsライブラリとShadowライブラリをシェーダーに統合します。

シャドウとライティングのリソース追加

リソースレイアウトに必要なリソースを追加します。

ShadowMapパスの実装

ジオメトリをシャドウマップテクスチャにレンダリングするための専用パスを含めます。

Surface構造体とPixel構造体の定義

提供されているシャドウライブラリのメソッドを使用して、Surface構造体とPixel構造体を設定します。

ライティングモデルの選択と適用

利用可能なライティングモデルから選択して、最終的な色を計算します。

シャドウ項の計算

Shadowライブラリを使用してシャドウ計算を適用します。

以下は最終結果を示す例です:

完全なカスタムシェーダーの実装は[こちら]で確認できます。

 

Evergineチームは、新しいモジュラーシェーダーシステムに関する皆様からのフィードバックを大変重視しており、これらの強化された機能を活用して皆様が開発される創造的で革新的なシェーダーを心待ちにしています。

Jorge Canton
著者
Jorge Cantón
Plain Concepts Research