NukeでLenscareを使う場合のノートその2です。
NukeのZ-BlurではOpenEXRのDepthチャンネルを直接指定できますが、LenscareではRGBチャンネルにDepthバッファが入ってないといけません。普通はShuffleノードで簡単解決なのですが、OpenEXRのDepthの値は作成した3DCGソフトによって異なります。無限遠の値の持ち方も色々で、場合によってはLenscareの「FL Depth Of Field」で使用する際には適宜Depth用のピクセルの値を調整してやらないといけません。
前回の記事「NukeのLenscareの話」のようにBounding Boxが設定されている場合、下図のようにBounding Boxの境界でDepthが途切れてしまいます。この例では背景の抜けている部分(3DCGIで何も存在していない)はRGBに変換されるときに実数値として変換不能な「Inifinity」になっています。Infinityは加算や乗算をしてもまったく結果がかわらないので、BoundingBoxの境界線はCropや修正しても残ってしまいます。もちろんアルファチャンネル自体はBoundingBoxの外側でも有効になっているのですが、Depthチャンネルではここのピクセル間に差異が生じているということです。
ピクセルの情報を拾ってみるとこんな感じで、数値ではなく「Inf」あるいは「NaN」と表示されています。
簡単かつ視覚的に確認して変換するには「FL Depth Of Field」を使用します。「FL Depth Of Field」の出力を「depth-buffer」にし、それを元画像のAチャンネルを使って黒バックに合成します。このノードからの出力は単純なRGBのfloat値になります。
「FL Depth Of Field」の出力に元画像のアルファチャンネルを使ってオブジェクト以外(Inifinity)をマスクし、プレートとして黒い平面を使用します。これをDepthとして、別のFL_DepthOfFieldに入力して使用します。
[関連記事]
NukeのLenscareの話
レンズボケについて
Peregrine Labs Bokeh