Thinkbox Software 製品
ブログ

Krakatoa MX 白背景でMatte Objectを使用する

2013年5月8日

 

こちらのページは、Matte Objectとシャドウのチュートリアルを参考にして学習したときに、白を背景にするとアーティファクトが目立つ原因となります。その解決方法について以下に説明します。

下の画像は、Matte Objectを使用してレンダリングしたパーティクルと、スキャンラインでレンダリングしたジオメトリを、白背景で合成した画像です。

パーティクルとジオメトリの境に、今回の問題点であるフリンジが現れています。

Matte Objectとシャドウの最後に出てくる、Super Samplingの数値を上げても、改善されません。

001_start

 

 

問題の原因について

Matte Objectの仕様から説明します。

  • Matte Objectは、Zデプスバッファにレンダリングされます。そして各ピクセルに、最も近いパーティクルを覆っているピクセルまでの距離が符号化されます。
  • Matte Objectを使用してレンダリングした場合、Zデプスバッファから、Matte Objectより後ろにあると判断されたパーティクルは描画されません。
  • Matte Objectエッジ付近のパーティクルが描画されるかどうかは、Zデプスバッファの精度に依存します。

 

この仕様により、

Matte Objectであるジオメトリは、描画範囲として考えると、「Matte Objectに完全に覆われているパーティクル」と同等といえます。

そしてその「Matte Objectに完全に覆われているパーティクル」と、「Matte Objectより完全に手前にあるパーティクル」を重ねたときに、「一部ジオメトリに重なっているパーティクル」が存在しないことになってしまいます。

これが、最初の画像に出てくるフリンジの原因です。

最初の画像の例のように、Matte Objectがパーティクルの内側にも存在する(食い込んでいる)場合には、Matte Objectの後ろにあるパーティクルのコンポジットも必要になります。

このような場合は、Krakatoa レンダラーでMatte Objectを使用している時のみ出力できる、Occluded Particleチャンネルを使用して合成します。

 

テストシーンの作成

まず、パーティクルとMatte Objectに使用するオブジェクトを作成します。

この例では、下記のような設定を最初に行いました。

  • パーティクルはSphereからPRT Volumeを使って作成
  • Matte ObjectにするオブジェクトはSphereを新しく作成
  • 新規作成したSphereに、不透明度にチェッカーのマップを適用したマテリアルを適用
  • ライトを作成して、シーンを照らす
  • オブジェクトをパーティクルと一部重なるように配置

002_Viewport

マテリアルを適用した方のSphereを選択した状態で、Krakatoa GUIの Matte Objects タブに移動します。

Create Update Named Selection Setボタンをクリックして、SphereをMatte Objectに指定します。

すぐ上のボタンがAll Matte Objects OK – Open Krakatoa Matte Objects Explorer …

に変わっていれば、Matte Objectの指定に成功しています。

この時点でレンダリングした画像です。

003

 

Occluded Particleチャンネルのレンダリング設定

次に、Occluded Particle チャンネル出力のための設定を行います。

Occluded Particleチャンネルとは、Matte Objectsによって隠されたパーティクルを出力するチャンネルです。

Krakatoa GUIの>Save Multiple Layersボタンを選択することで、Render ElementsタブにKrakatoa Occluded Layerチャンネルが追加されます。

このまま、レンダリングして、画像を出力します。

 

レンダリングした画像を、コンポジットソフトで開きます。

二つのパーティクルレイヤーが出力されていることを確認します。

この二つの画像をコンポジットすると、パーティクルをお互いに埋めあって、隙間のないパーティクルが生成されます。

003

005_0cc

 

コンポジット

ここから、Video Postで合成した場合と、Nukeで合成した場合の二つの場合にわけています。

最終結果の画像は、どちらの方法で合成しても同じなのですが、重ね方などが違うためです。

Video Post→Nukeの順に紹介します。

Video Post

Nuke

 

 

Video Postで重ねる場合

構成

先ほど作成した、通常のパーティクルと、隠されていたパーティクル(Occluded Particle)をイメージ入力イベントで追加し、隠されていたパーティクルの画像がリスト中で上になるように並べます。

二つの画像を選択し、イメージレイヤイベントを追加します。アルファ コンポジタを選択して、二つの画像を合成します。

Par_Composite

ここまでのコンポジット結果の画像です。

上がRGBチャンネル、下がアルファチャンネルです。

RGBチャンネル

Par_Comp

αチャンネル

Par_Comp_alpha

3ds Maxに戻ります。

同じシーンをScanlineレンダラーでレンダリングして、ジオメトリ画像を作成します。

(レンダリングする前に、画像の解像度が同じであることを確認してください。)

009_Mo_OBJ

Scanlineレンダラーでレンダリングした画像を追加して合成します。

アルファ コンポジタを一度解除した後、ジオメトリ画像をイメージ入力イベントで読み込みます。

ジオメトリ画像を2枚のパーティクル画像の間に入るように並べかえ、Occluded Particleの画像とジオメトリ画像をアルファ コンポジタで合成、そのアルファ コンポジタとパーティクル画像をさらにアルファ コンポジタで合成します。

010_VideoComp

これで、フリンジのない合成結果が作成されます。

010_VideoComp_RGB

 

両面レンダリングしたScanline画像を使用する(Video Post)

KrakatoaのMatte Objectsはデフォルトで両面がレンダリングされていますが、

Scanlineレンダラーのデフォルトはジオメトリの片面のみレンダリングします。

Scanlineレンダラーでの画像も、両面でレンダリングして再構築すると、Matte Objectsの背面も考慮された結果になります。

(Scanlineレンダラーでレンダリング設定の共通設定タブ→オプションの”両面レンダリング”チェックで両面レンダリングを行えます)

白い背景を追加しても、最初の例のようにフリンジが出ません。

011_Mo_OBJ2

この画像は片面レンダリングのジオメトリ画像と差し替えます。

 

Video Postでの最終合成結果

一番上にあるアルファ コンポジタと、白い背景画像(Photoshopなどで作成が必要です)を、アルファ コンポジタで合成します。

013_VideoComp

こちらが、最終合成結果画像です。

013_VideoComp_RGB

 

 

Nukeで重ねる場合

Node Graph

先ほど作成した、通常のパーティクルと、隠されていたパーティクル(Occluded Particle)を、Readノードで読み込みます。

Mergeノードを作成し、Occluded Partickle画像をBインプットに、通常のパーティクル画像をAインプットにつなぎます。

006_NukeComp_N

ここまでのコンポジット結果の画像です。

上がRGBチャンネル、下がアルファチャンネルです。

RGBチャンネル

007_NukeComp_RGB

αチャンネル

008_NukeComp_Al

同じシーンをScanlineレンダラーでレンダリングして、ジオメトリ画像を作成します。

(レンダリングする前に、画像の解像度が同じであることを確認してください。)

009_Mo_OBJ

Scanlineレンダラーでレンダリングした画像を追加して合成します。

もうひとつMergeノードを作成して、Merge1(先ほど作成したMergeノードです)にAインプットをつなげます。

Merge1のBインプットにつなげていたOccluded Particleの画像をはずし、代わりにScanlineでレンダリングしたジオメトリの画像をつなぎます。

Merge2のBインプットにOccluded Particleの画像をつなぎます。

010_NukeComp_N

010_NukeComp_RGB

これで、フリンジのない合成結果が作成されます。

 

両面レンダリングしたScanline画像を使用する(Nuke)

KrakatoaのMatte Objectsはデフォルトで両面がレンダリングされていますが、

Scanlineレンダラーのデフォルトはジオメトリの片面のみレンダリングします。

Scanlineレンダラーでの画像も、両面でレンダリングして再構築すると、Matte Objectsの背面も考慮された結果になります。

(Scanlineレンダラーでレンダリング設定の共通設定タブ→オプションの”両面レンダリング”チェックで両面レンダリングを行えます)

白い背景を追加しても、最初の例のようにフリンジが出ません。

011_Mo_OBJ2

この画像は片面レンダリングのジオメトリ画像と差し替えます。

 

Nukeでの最終合成結果

さらにMergeノードを作成し、AインプットにMerge2ノードを、BインプットにColorを白に指定したConstantノードをつなげます。

013_NukeComp_N

こちらが、最終合成結果画像です。

013_NukeComp_RGB