>   >  NUKE プラクティカル・ガイド:Vol. 7:主要 3DCG ソフトウェアとの連帯・後編(Houdini, CINEMA 4D & Softimage)
Vol. 7:主要 3DCG ソフトウェアとの連帯・後編(Houdini, CINEMA 4D & Softimage)

Vol. 7:主要 3DCG ソフトウェアとの連帯・後編(Houdini, CINEMA 4D & Softimage)

前回「Vol.6:主要 3DCG ソフトウェアとの連帯・前編(3ds Max & Maya)」にひき続き、後編では、HoudiniCINEMA 4D、そして Softimage との連携について、デプス、モーションベクター、オブジェクトマスクを出力するまでを解説していく。
※本解説は2012年11月頃の情報をベースにしています

Houdini 編

1.Houdiniにおけるレンダーパスの設定法

まず、Houdiniでのレンダリングには標準搭載されているMantraを使用する。今回マルチパスの出力に用いるOpenEXRにも対応している。

HoudiniのUI


レンダーパスを作成するには、まず、TAB MenuからMantraを作成する必要がある。

HoudiniのUI

Houdiniが他のソフトウェアと異なる点で、レンダリングするための「オペレータ(ノード)」を作らなくてはいけない。イメージとしては、シーン内にいくつもレンダラを持つことに近い

Mantraを作成したら、パラメータの[Properties→Output→Extra Image Planes]から+マークで、新たなパスを追加できる。

HoudiniのUI


2.VEX Variableの設定

Extra Image Planeを追加したら、レンダリングする要素を決定する。Mantraがパスをレンダリングするためには、VEXから出力されている値を指定する必要がある。すなわち、シェーダレベルで設定されたものが、パスとしてレンダリングできるということだ。Mantraには、予め用意されているVEX Variableがある。主にPやN、PzなどのGlobal Variableが挙げられる。

HoudiniのUI


Mantra Surfaceなどの、予め用意されているシェーダには、主要なVEX Variableが多数用意されている。もちろん自分で定義することも可能で、今回用意するVariavleは全て新たに定義していく。

HoudiniのUI


VEX Variableには、シェーダ側で新たに定義した変数名を入力し、もしチャンネル名を変更したいのであれば、そこも設定する。これで同名の変数をシェーダから引っぱってくることができるようになる。

HoudiniのUI


3.Depthパスの設定

まずDepth(深度情報)のパスを作成していく。Houdiniでの深度情報は、VEXシェーダのGlobal Variableオペレータから引っぱることができる。「Surface Depth(Pz)」と言われる環境変数がそれにあたる。これはカメラからサーフェイスまでの距離を格納している変数だ。そのため、値はfloat型になる。
mantraがデフォルトでVEX Variableにも用意しているが、OpenEXRのパスに含めたときにチャンネル名がotherになってしまう現象が起きたため、今回はfloatをvectorに変換し、Color情報としてパスに埋め込む。

HoudiniのUI


深度情報にクランプをかけたりする場合も、このシェーダ内で行うことも可能。重要なポイントとして、VEXからMantraへ情報を渡すためには、Parameter VOPを使用して、データをExportする必要がある。ExportをAlwaysかWhen Input is Conectedにすることで、値が出力される。これはどのチャンネルを作る際にも必用になるので、覚えておきたい。また、Mantraで先ほど指定したVEX Variableの名前は、このParameter VOPで指定したNameに由来するため、ここの設定もミスが許されない。

HoudiniのUI


こうして変数は、Mantra側で、depthのVariableを読み込み、レンダリングの際にRGBの値にカメラからの距離が埋め込まれる。

HoudiniのUI


4.Velocityパスの設定

Velocityパスを生成するためには、まずモーションブラーがレンダリングできる状態に設定しなければいけない。モーションブラーをアクティブにするには、Mantraの[Proparties→Sampling→Allow Motion Blur]にチェックを入れる。これでモーションブラーがかかるようになるが、ここで問題なのが、これだと、すでにレンダリング時にモーションブラーが入ってしまうということだ。それを回避するために、[Allow Image Motion Blur]のチェックを外し、モーションブラーの計算はするが、イメージに反映しないようにする必要がある。

HoudiniのUI


続いて、Depthの際と同じように、シェーダ側にVelocityの値を生成するための仕組みを作る必要がある。今回の様なMotion Vector用途のVelocityはジオメトリの動きだけではなく、カメラスペースでの動きを再現できなくてはいけないため、「Get Blur P VOP」を使用することにした。これは、レンダリング時に変化するポジションを時間によって引っぱれる機能をもっていて、時間をずらしたものの差分を計算することで、Velocityを算出することが可能になる仕組みだ。その際、抽出するポジションはカメラスペースにトランスレートする必要がある。

HoudiniのUI


後はDepth同じように、Parameter VOPで値をExportすれば、Velocityパスをレンダリングできる。

HoudiniのUI


5.マスクパスの設定

オブジェクトに指定したIDを作るためには、様々な方法があるが、今回は「Attribute Create SOP」を用いたID作成のための方法を紹介したい。Attribute Create SOPはサーフェイスのコンポーネントに対して、属性を与えることができるSOPであり、今回はDetailに対して、Vector型のアトリビュートを入れ込む形にする。まずアトリビュートの名前を決定する。

HoudiniのUI


今回は4つのオブジェクトに対してマスク処理をするため、Vector型2つのアトリビュートで対応可能だ。そこで、「objectid_a」、「objectid_b」の2種類を作り、それぞれのValueに対して、RGB各々に 1 の数値を入力していく。例えば、ティーポットには「objectid_a」のRが 1、ボックスには「objectid_a」のGが 1 といった具合だ。これで、オブジェクトのIDをこの時点で色分けすることができる。

HoudiniのUI


SOPで指定したアトリビュートは、一度VOPの方へインポートする必要がある。インポートにもParameter VOPを使用する。NameとAttribute Create SOPで作成したアトリビュート名が同じものが読み込まれる。今回は単純にそれをそのまま出力する。

HoudiniのUI


このような場合、ExportをNeverからAlwaysに変更しておけば、アトリビュート名をそのままVEX Variableとして扱えるため、VOP内で変更が必要ない場合はそうした節約も可能である。ちなみに、「Parameter VOP」はシェーダのパラメータ部分を操作できるようにするオペレータでもあるため、調整の必要のない入出力に使用しているParameter VOPは邪魔にならないように、Invisibleでパラメータから隠すことができる。

HoudiniのUI


6.レンダーパスの最終設定

最終的には、VOPで定義した変数をMantraに読み込み、チャンネルとしてレンダリングされるように整理する。今回は、ベースとなるRBGパスの他に4種のパスをレンダリング設定した。
パスに関する設定も少し説明しておこう。前途の通り、レンダリングしたいチャンネルはシェーダで定義したVEX Variableを入力するところから始まり、そのデータ型を指定する必要がある。これが違っていたりすると、レンダリングされない。またQuantizeはチャンネルの持つ色深度を設定する。DepthやVelocityは基本的には32bit floatで扱う。マスクなどは8bit integerでも問題はないだろう。
[Different File]にチェックを入れれば、チャンネルとしてではなく、別のファイルとして別名保存も可能だ。[Pixel Filter]は、デフォルトでは、ベースのRGBのレンダリングと同じフィルタがかかるが、ここも別途設定できる。以上で、HoudiniからNUKEへの書き出し設定は完了だ。

HoudiniのUI


その他の連載