This is the documentation for Enlighten.

7.2. アルベドの取り扱い


Enlighten Albedo API は、初期データ ブロックとして、またはシミュレーション実行中に変更する形で、柔軟にサーフェス カラーを指定できる方法を提供します。

各サーフェスには、アルベドエミッシブ透過のマテリアル コンポーネントがあります。

マテリアル コンポーネントは、Enlighten::AlbedoBufferEnlighten::EmissiveBufferEnlighten::TransparencyBufferを介して各システムの間接入力ライティング ステージに提供されます。これらのバッファは、静的マテリアル データと動的マテリアル データの組み合わせから初期化できます。初期化すると、バッファを完全に再作成することなく動的マテリアルを実行時にすばやく更新できます。

マテリアル ランタイム

アルベド、エミッシブ、透過を扱う場合に必要な、4 つの主要な Enlighten オブジェクトがあります。

  • クラス ClusterAlbedoWorkspaceMaterialData — このオブジェクトは、プリコンピュートにより生成され、ユーザー指定のマテリアル ID/GUID がどのようにシステムにマッピングされるかを表します。
  • AlbedoBuffer — これは、システムのアルベド カラーをキャッシュするランタイム オブジェクトです。IndirectInputLightingInternalParameters 構造体の入力として設定されます。
  • EmissiveBuffer — これは、システムのエミッシブ カラーをキャッシュするランタイム オブジェクトであり、必要に応じて IndirectInputLightingInternalParameters 構造体の入力として設定できます。
  • TransparencyBuffer — これは、システムの透過値をキャッシュするランタイム オブジェクトであり、必要に応じて IndirectInputLightingInternalParameters 構造体の入力として設定できます。
  • class DynamicMaterialWorkspace — これは、システム マテリアルのアルベドおよびエミッシブ カラーと透過値を記録するランタイム オブジェクトです。また、マテリアル コンポーネントのうちどれが静的であるか、どれが動的であるかも記録します。

参照: ReadClusterAlbedoWorkspaceMaterialDataFromFile()ReadClusterAlbedoWorkspaceMaterialData(), CalcAlbedoBufferSize()CreateAlbedoBuffer()CalcEmissiveBufferSize()CreateEmissiveBuffer()CalcTransparencyBufferSize()CreateTransparencyBuffer()CalcDynamicMaterialWorkspaceSize()CreateDynamicMaterialWorkspace()

初期化

DynamicMaterialWorkspace を作成した後、コンテンツを設定してシステムのマテリアル構成を示す必要があります。デフォルトでは、ワークスペースのすべてのマテリアルは、黒 (0,0,0,0) のデフォルトのアルベドおよびエミッシブと不透明 (0) の透過を持つ静的 (更新不可) なマテリアルとして初期化されます。InitialiseMaterialAlbedoAsDynamic()InitialiseMaterialEmissiveAsDynamic()InitialiseMaterialTransparencyAsDynamic()InitialiseMaterialAlbedoAsStatic()InitialiseMaterialEmissiveAsStatic()InitialiseMaterialTransparencyAsStatic()SetMaterialAlbedoColour()SetMaterialEmissiveColour()SetMaterialTransparency() をご覧ください。

システムのマテリアルとして DynamicMaterialWorkspace が設定されたら、AlbedoBufferEmissiveBufferTransparencyBuffer を初期化する必要があります。バッファは、以下のソースのいずれかから得られる動的カラー データ (DynamicMaterialWorkspace 経由) および静的カラー データの組み合わせで初期化されます。

  1. DynamicMaterialWorkspace の静的マテリアル カラー: InitialiseAlbedoBufferFromMaterialWorkspace()InitialiseEmissiveBufferFromMaterialWorkspace()InitialiseTransparencyBufferFromMaterialWorkspace() をご覧ください
  2. テクスチャ: InitialiseAlbedoBufferFromTexture(), 、InitialiseEmissiveBufferFromTexture()InitialiseTransparencyBufferFromTexture() をご覧ください
  3. ポイントごとのカラーの配列データ: InitialiseAlbedoBufferFromColoursPerPoint()InitialiseEmissiveBufferFromColoursPerPoint()InitialiseTransparencyBufferFromColoursPerPoint() をご覧ください

後の 2 つの方法では、静的マテリアルのサンプルまたはピクセルのみが使用されます。動的マテリアルのサンプルまたはピクセルについては、DynamicMaterialWorkspace のマテリアル カラーが使用されます。

動的アルベド、エミッシブ、透過

AlbedoBufferEmissiveBufferTransparencyBuffer の初期化後、DynamicMaterialWorkspace の動的マテリアルは実行時に比較的にコストをかけずに更新できます。SetMaterialAlbedoColour()SetMaterialEmissiveColour()SetMaterialTransparency() をご覧ください。ワークスペースのすべてのマテリアル カラーを更新した場合、ワークスペースへの変更を反映する前に AlbedoBufferEmissiveBufferTransparencyBuffer を更新する必要があります。UpdateAlbedoBuffer()UpdateEmissiveBuffer()UpdateTransparencyBuffer() をご覧ください。 また、DynamicMaterialWorkspace のマテリアル コンポーネントの動的および静的カラーも実行時に更新できますが、関連するAlbedoBufferEmissiveBufferTransparencyBuffer を完全に再初期化する必要があります。 Enlighten は内部でバッファの状態を追跡するため、バッファ更新関数が呼び出されても、Enlighten でバッファの初期化が必要なことが検出された場合、警告が表示されます。インテグレートでは、IsAlbedoBufferInitialiseRequired()IsEmissiveBufferInitialiseRequired()IsTransparencyBufferInitialiseRequired() を介して初期化が必要かどうかを確認できます。さらに、更新関数が呼び出された際に Enlighten で更新が必要なことが検出されると、更新関数はすぐに結果を返すため、呼び出しのコストが非常に低くなります。

パフォーマンス上の理由から、DynamicMaterialWorkspace のすべてのマテリアル値が設定されるまでは、UpdateAlbedoBuffer()UpdateEmissiveBuffer()UpdateTransparencyBuffer() の呼び出しを控えることをお勧めします。

シリアル化

AlbedoBufferEmissiveBufferTransparencyBufferDynamicMaterialWorkspace は、以下の EnlightenUtils.h のユーティリティ関数を使用してシリアル化できます。

WriteAlbedoBuffer()、ReadAlbedoBuffer()、WriteEmissiveBuffer()、ReadEmissiveBuffer()、WriteTransparencyBuffer()、ReadTransparencyBuffer()、WriteDynamicMaterialWorkspace()、ReadDynamicMaterialWorkspace()