Q100384: ExrCombine を介して Katana でチャンネル/AOV をマージするとレンダリングが失敗する

フォローする
症状

Katanaで複数の AOV をチャネルとして 1 つのマルチチャネル EXR ファイルにマージしようとすると、 Katanaで EXR イメージをマージするために使用されるツール ExrCombine に影響する OpenEXR の既知の制限により、レンダリングの失敗やエラーが発生する可能性があります。

エラーは次のようになります。

Running command: ExrCombine
/tmp/ katana _tmpdir_7664/sphere_diffuse5_Render_primary_rgba_square_512_linear.1.exr primary
/tmp/ katana _tmpdir_7664/sphere_diffuse5_Render_direct_diffuse_direct_diffuse_square_512_linear.1.exr direct_diffuse
/tmp/ katana _tmpdir_7664/sphere_diffuse5_Render_sss_sss_square_512_linear.1.exr
sss /tmp/merge.exr
Render stopped by signal: 6
CommandLineRender Error: doRender problem
Reason = Render stopped by signal: 6
Render error. Time elapsed: 6.33 s
Node 'Render': Render failed with a rendering error: Render stopped by signal: 6

レンダリングに失敗すると、スタック トレースに次のエラーが表示されてKatanaがクラッシュする可能性もあります。

[INFO python.MainBatch]: *** Error in 'ExrCombine': free(): invalid pointer: 0x0000000000e8f1e0 ***

原因

ExrCombine ユーティリティは、イメージを異なるデータ ウィンドウと結合しようとすると失敗します。

これは、マージする EXR イメージの dataWindow ヘッダー属性が一致しない場合、特に最初にマージされた AOV のピクセル データ ウィンドウがその後マージされた AOV よりも小さい場合にエラーが発生することを意味します

これを解決するには、次のトラブルシューティング手順を実行してください。

  • 「プライマリ」レンダー出力が出力タイプ「raw」に設定されていることを確認するか、マージされた出力に「プライマリ」パスが含まれないようにしてください。
  • マージするすべての AOV が同じ dataWindow 属性値を持つようにしてください
  • 「raw」出力タイプを使用するか、exrOptimize を無効にして、ポスト レンダー EXR 最適化をバイパスします。
  • Katanaタイル化された出力をマージできないため、レンダリングされた EXR がタイル化されていないことを確認します。

これらの各提案の詳細については、以下をお読みください。

デフォルトでは、 Katana画像データを操作するときに 4 つのチャネル (RGBA) のみを読み取り、レンダリングできます。ただし、ユーザーは ExrCombine と呼ばれる内部Katanaユーティリティを介して複数の画像を結合してマルチチャネル EXR を作成できます。

OpenEXR には複数のチャネルを 1 つの EXR ファイルに書き込むときに制限があるため、ExrCombine ユーティリティは元々、同じサイズのピクセル データ ウィンドウとイメージをマージするために作成されました。

画像のピクセル データ ウィンドウのサイズはdataWindow EXR ヘッダー属性に格納され、EXR ファイルにはそのような属性を 1 つだけ含めることができます。これは、すべてのチャネル/AOV が同じdataWindow属性値を共有する必要があり、マージされた EXR 内で独自の値を保持できないことを意味します。

したがって、 Katanaピクセル データ ウィンドウ サイズが異なる画像の結合をサポートしていません。

選択したdataWindow属性値が、マージされるすべての AOV のデータ ウィンドウ サイズを包含していない場合、レンダリングが失敗するか、 Katanaクラッシュする可能性があります。これは、ヘッダーに格納できるデータ ウィンドウが 1 つだけであるという OpenEXR の制限によるものです。これは、すべてのチャネル/AOV が同じdataWindow属性値を共有する必要があり、マージされた EXR 内で独自の値を保持できないことを意味します。したがって、 Katanaピクセル データ ウィンドウ サイズが異なる画像の結合をサポートしていません。

OpenEXR が同じファイル内の複数のデータウィンドウヘッダー属性の拡張サポートを提供したら、ExrCombine 機能を改善するというKatanaの既存の機能リクエストがあります。これは次のように記録されます: ID 75636 - ExrCombine: 異なるピクセル データ ウィンドウを持つ画像のサポートの向上

これに関する詳細と、マルチチャネル設定に応じてマージの問題を解決できる上記の回避策の詳細については、読み続けてください。


さらに詳しい情報

EXR データウィンドウ

各 OpenEXR ファイルは、ファイルのヘッダーにある属性のリストを通じて記述されます。サンプル .exr ファイルに対して「exrinfo」のようなコマンドを実行すると、これらの属性の値が次のように出力されます。

> exrinfo image.exr

画像.exr:

file format version: 2, flags 0x0
channels (type chlist):
B, 16-bit floating-point, sampling 1 1
G, 16-bit floating-point, sampling 1 1
R, 16-bit floating-point, sampling 1 1
compression (type compression): piz
dataWindow (type box2i): (0 0) - (511 511 )
displayWindow (type box2i): (135 125) - (377 409)
lineOrder (type lineOrder): increasing y
pixelAspectRatio (type float): 1
screenWindowCenter (type v2f): (0 0)
screenWindowWidth (type float): 1 

この場合のdataWindow属性の値は(0 0) - (511 511)で、画像ファイルに 512x512 ピクセルが保存されていることを意味します。

displayWindow は画像を表示するときに表示される画像の領域を記述します。この領域は、OpenEXR ファイルにデータが存在する領域よりも大きい場合も小さい場合もあります。

Katanaでの「マージ」出力のデータウィンドウの定義

「マージ」タイプのレンダー出力を使用してイメージを異なるデータ ウィンドウと結合する場合、 RenderOutputDefine ノードのmergeOutputsパラメーター ドロップダウンで最初に選択された入力のdataWindow属性値が、最終出力のデータウィンドウとして使用されます

貼り付け_画像_0.png

RenderOutputDefine ノードの例のこのスクリーンショットでは、 mergeOutputsパラメーターの最初に選択された入力が「プライマリ」出力です。これは、ExrCombine ユーティリティによって作成される最終的なマージされた EXR には、 「プライマリ」パスのdataWindowヘッダー属性が使用されることを意味します。

このdataWindowヘッダー属性がマージする残りのレンダー出力のdataWindowより小さい場合、ExrCombine マージ プロセスが失敗し、上記のレンダー エラーが発生する可能性があります。

Katanaの Cryptomatte に関する既知の問題

Cryptomatte は、各 cryptomatte チャネルの EXR ヘッダーの cryptomatte/foo/bar に格納されているメタデータを使用します。 ExrCombine は cryptomatte メタデータをマージしないため、結果としてマージされた EXR にはNukeの cryptomatte チャネルが表示されません。 Pixar の exrmerge は、最初の EXR の cryptomatte メタデータのみをコピーします。

ただしKatana 4.5v6Katana 5.0v6Katana 6.0v3以降のKatanaバージョンでは、すべての Cryptomatte チャネルを 1 つの EXR に結合できるようになります。

参考までに、この機能リクエストは次のように記録されました: ID 428053 - ExrCombine: Cryptomatte チャネルのマージのサポート

回避策

この問題の解決に役立つ可能性があるいくつかのオプションを試すことができます。

「プライマリ」レンダー出力が出力タイプ「raw」に設定されていることを確認するか、マージされた出力に「プライマリ」パスが含まれないようにしてください。

注: Katana専用の RenderOutputDefine ノード経由で作成を要求したかどうかに関係なく、デフォルトで常に「プライマリ」パスを生成します。

「プライマリ」パスは最初のエントリとして mergeOutputs リストに追加され、追加のチャネルはそこにマージされます。 「プライマリ」パス データ ウィンドウが、マージするすべての AOV の全体的なデータ ウィンドウ サイズを包含しない場合、マージ操作は失敗します。

これは、「primary」パスに RenderOutputDefine ノードを追加し、type パラメーターを "raw" に設定することで解決できる場合があります

プライマリ パスが必要ない場合は、 RenderOutputDefine ノードの mergeOutputs リストからプライマリ パスを明示的に無効にすることができます。リスト内の 2 番目のパスのデータウィンドウは、マージされた EXR に使用されます。上のスクリーンショットの例では、 「primary」が選択解除されている場合に使用されるdataWindow値は「diffuse」パスから取得されます。

マージするすべての AOV が同じ dataWindow 属性値を持つようにしてください。

マージされるすべての AOV のデータ ウィンドウが同じサイズであれば、マージ操作は成功するはずです。あるいは、最初にマージされる出力には、他のすべての出力を包含するのに十分な大きさの dataWindow 属性値が必要です。

マージ プロセスで AOV の順序を定義するときにこの点に留意すると、より広いデータウィンドウをより小さなデータウィンドウに合わせようとすることによる ExrCombine レンダリングの失敗を回避できます。

RenderOutputDefine ノードの設定を使用して AOV のデータ ウィンドウ サイズに影響を与える 2 つの方法を以下に説明します。

「raw」出力タイプと exrOptimize 設定を使用して、レンダリング後の EXR 最適化をバイパスします。

デフォルトでは、 Katanaレンダリングされたカラー出力を後処理します。この内部 2D 画像処理では、EXR ヘッダー属性は保持されず、関連する属性が元の画像から後処理された画像にコピーされます。

これらの属性は、RenderOutputDefine ノードのConvertSettingsパラメータによって定義されます。これらの設定の詳細については、 Katanaオンライン ヘルプの RenderOutputDefine ノード リファレンスを参照してください

exrOptimize パラメータを「いいえ」に設定します。

ConvertSettings.exrOptimizeパラメーターは主に、画像データ ウィンドウを最適化し、エッジの周囲のピクセル データのない領域を削除することで画像を「シュリンクラップ」するために使用されます

exrOptimizeCompare.png

exrOptimize のオンとオフでレンダリングされた EXR イメージとメタデータの比較 ( Nukeで表示)

exrOptimize フラグは主に、画像データ ウィンドウを最適化し、エッジの周りの冗長な明確な情報を削除することで画像を「シュリンクラップ」するために使用されます。 exrOptimizeパラメーターを「No」に設定すると、画像データ ウィンドウ全体がレンダリングされ、最適化ステップがスキップされ、元のデータ ウィンドウが強制的に使用されます。これにより、レンダリングされた AOV 内で異なるdataWindow属性値が回避され、正常にマージできるようになります

pasted_image_0__1_.png

exrOptimize 操作は、タイル内の画像を処理するプログラムのメモリ使用量とパフォーマンスを向上させることを目的としているため、場合によっては、画像のサイズに応じて、画像の処理中のパフォーマンスがわずかに影響を受けることがあります。

レンダー出力のタイプを「raw」に設定します。

RenderOutputDefine ノードのタイプを「raw」に設定すると、レンダラから受信したイメージをレンダリングできるようになり、後処理ステップがバイパスされます。 Katana出力に対して色変換や画像の最適化を実行しません。これにより、レンダラーによって定義されたヘッダー属性を使用してファイルが書き込まれることが保証され、 Katanaの内部画像処理によって引き起こされる dataWindow 属性の変更が防止されます。

pasted_image_0__2_.png

Katanaタイル化された出力をマージできないため、レンダリングされた EXR がタイル化されていないことを確認します。

これは、Arnold などの一部のレンダラーのデフォルト設定です。 ArnoldOutputChannelDefine などのレンダラー固有の出力定義ノードを確認し、 driverParameters.tiled設定が無効になっていることを確認してください。

助けを求める

これらの提案によっても問題が解決しない場合は、サポート リクエストを提出し、発生している問題とこれまでに実行したトラブルシューティング手順について詳しくお知らせください。

サポート リクエストを開く方法の詳細については、次の記事を参照してください: Q100064: サポート チケットを発行する方法

    私たちはそれを聞いて申し訳ございません

    理由をお聞かせください