2024年10月24日

Evergineの新しいLibrary Effect

今回のEvergineリリースでは、強力な新機能であるLibrary Effectアセットが導入されました。この新しいタイプのエフェクトは、コードの可読性を向上させ、プロジェクト間での再利用を可能にするために設計されています。複数のエフェクトを開発していると、繰り返し現れるパターンや再利用したい共有ユーティリティ関数に気づくことがあるでしょう。Library Effectを使えば、それが可能になるだけでなく、簡単に実現できます。

Library Effectとは?  

Library Effectは、静的な変数、定数、ディレクティブ、再利用可能な関数のコレクションとして機能し、GraphicsエフェクトやComputeエフェクトから参照できます。エフェクトファイルにライブラリをインクルードするだけで、共有ロジックを一元化し、エフェクトのコードベースをクリーンで保守しやすい状態に保つことができます。

Library Effectの作成

新しいLibrary Effectは、Evergine Studioのアセットメニューから、またはアセット詳細パネルを右クリックして関連オプションを選択することで作成できます。

Library Effectの定義

すべての新しいLibrary Effectは、[Begin_Library]メタタグで始まり、[End_Library]メタタグで終わる必要があります。Library Effectは他のエフェクトと同様にコンパイルされるため、パスを定義する際と同様に、コンパイルプロファイルのバージョンを指定する必要があります。これにより、ライブラリが他のエフェクトで使用される前であっても、潜在的な問題を早期に発見しデバッグできます。 

ライブラリの構造化

Library Effect内では、GraphicsエフェクトやComputeエフェクト全体で再利用したい共通の変数、定数、関数を定義できます。以下の例では、ACESカラー調整を実装するロジックを含むトーンマッピングライブラリを作成しています。 

他のエフェクトでのLibrary Effectの使用

グラフィックスエフェクトやコンピュートエフェクトでライブラリエフェクトを使用するには、以下のメタタグを使ってインクルードするだけです: 

[Include_Library LibraryName LibraryIdentifierNumber] 

  • LibraryName: ライブラリ用の人間が判読可能な名前です。 
  • LibraryIdentifierNumber: ライブラリエフェクトアセットを識別する一意のGUIDです。

GUIDを使用する利点は、アセットの相対パスに依存しないことです。つまり、プロジェクトのコンテンツフォルダ内でライブラリアセットを移動しても、参照が壊れることはありません。

エフェクトにライブラリを簡単にインクルードするには、アセット詳細パネルからライブラリエフェクトアセットを、エフェクトエディタで開いている別のエフェクトにドラッグ&ドロップします。この操作により、コード内に参照が自動的に作成されます。 

例:グラフィックスエフェクトでのトーンマッピングライブラリの使用

以下は、前述のMyLibraryをグラフィックスエフェクトで使用する方法の例です。

ライブラリエフェクトの依存関係と再帰的インクルード

ライブラリエフェクトは他のライブラリエフェクトを参照することもでき、複数のライブラリを組み合わせてより複雑なエフェクトを構築できます。このアプローチにより、コードを論理的な依存関係ツリーに整理し、モジュール性と関心の分離を向上させることができます。 

ライブラリエフェクトでのディレクティブの使用

ライブラリエフェクト内でディレクティブを活用してHLSLコードのフローを制御し、これらのディレクティブの値に応じてライブラリの複数のバリエーションを作成できます。 

ライブラリエフェクトをグラフィックスエフェクトまたはコンピュートエフェクトにインポートすると、そのディレクティブもインポートされ、エフェクト自体とそのすべての依存ライブラリのディレクティブとマージされます。これにより、エフェクトが利用できる単一の統一されたディレクティブグループが生成されます。 

エフェクトアナライザーによるエラー管理

Evergine エフェクトエディタは、新しいエフェクトアナライザーによって強化され、新しい[Include_Library]メタタグに関する詳細情報を提供し、ライブラリエフェクトの操作時に発生する可能性のある問題の管理を支援します。以下は、一般的なシナリオとエフェクトアナライザーがそれらをどのように処理するかの例です: 

  1. 未解決の参照: インクルードされたライブラリのライブラリ識別番号が正しくない場合、アナライザーはライブラリへの参照を解決できないことを報告します。
  2. ライブラリコンパイルエラー: ライブラリエフェクトに誤りやコードエラーが含まれている場合、アナライザーはメインエフェクト内のインクルード行を強調表示し、ライブラリ自体の内部でエラーを表示します。
  3. 相互参照の問題: エフェクトがライブラリをインクルードし、そのライブラリがさらに別のライブラリをインクルードしている場合に循環依存が検出されると、アナライザーは相互参照の問題を報告します。

まとめ

Evergineへのライブラリエフェクトの追加は、エフェクト開発に新たな可能性をもたらし、HLSLコードの構造化、最適化、再利用を改善できるようにします。再帰的インクルード、ディレクティブ、強化されたエラー処理のサポートにより、ライブラリエフェクトは高度なレンダリングパイプラインを構築するための強力なツールセットを提供します。

ぜひお試しいただき、シェーダー開発プロセスがどのように効率化されるかをご確認ください! 

Jorge Canton
著者
Jorge Cantón
Plain Concepts Research