Positionパスのワールド座標とカメラ座標


こんにちは、篠島です。Positionパスはデフォルトでカメラスペースでの位置を記録したものですが、これをワールド座標で吐き出すことが可能です。コンポジットで何をしたいのかによって、ワールド座標のPositonパスが必要になってきたりします。今回はワールド座標のPositonパスを使って簡単にマスクを作って見ます。

今回のサンプルファイルです。
pass3.zip

 

まずはワールド座標とカメラ座標の二つの違いを見てみましょう。
カメラ座標でレンダリングされた物はスクリーンの位置に対して常に同じ色になっていますが、ワールド座標でレンダリングされた物はスクリーンの位置に関係なく、3Dシーン内の位置によって色が決まります。

Pカメラ座標のPositionパス World_Pワールド座標のPositionパス

 

Spotmaskという3D Max用のプラグインの説明ビデオにPositionパスを使ったコンポジットを説明しています。英語が分からなくても映像を見ればこの凄さが分かるはず。

 

さて、Houdiniでワールド座標でパスを吐き出すにはシェーダーを変更する必要があります。前回の記事でカスタムアトリビュートをエキスポートするのと同じ方法でPアトリビュートを吐き出します。シェーダーの中に入り、Global VariablesのPからTransformノードによってカメラ座標からWorld座標に変換します。TronsformノードのFrom Spaceがspace:currentとなっていますが、これは現在のスペース、すなわちカメラスペースを意味します。そしてTo Spaceパラメーターでspace:worldを指定してワールド座標に変換しています。そしてそれをBind Exportでエキスポートします。Nameパラメーターは分かりやすい名前を適当につけます。ここではWorld_Pと名づけました。

P

 

そしてMantraでExtra Image Planesのところで、先ほど設定したワールド座標のPの名前を指定します。

mantra

 

Mplayにレンダリングしてみると、パスがきちんとレンダリングされているのが分かります。

mplay

 

ワールド座標でレンダリングされたポジションパスをどう使うのかを説明します。今回はコンポジットソフトとしてBlackmagic DesignのFusionを使います。Fusionは無料で使え、しかも商用利用可能なので是非ともダウンロードして遊んで見ましょう。Nukeでもワールド座標のPositionパスを使ったコンポジットはできますが、World Position Tool Kit というプラグインが必要になります。HoudiniのCOPで出来るのか・・・というと標準のノードを使っては出来ませんが、VOPネットワークでいろいろと複雑な事をすれば出来ます。機会があるときにHoudiniのCOPの記事を書こうと思います。

 

FusionのVolumeMaskというノードでPositionパスからマスクを作ることが出来ます。そしてそのマスクを元にカラコレ等の処理を加えるわけです。
カメラ座標で作られたマスクはスクリーンの同じ位置にしかマスクが作られないのに対し、ワールド座標で作ったマスクは綺麗に3Dシーンの中でマスクが作られています。

fusion

 

試しに色を赤にカラコレした結果が下です。

P_Maskカメラ座標のPositionパスによるマスク worldP_maskワールド座標のPositionパスによるマスク
P_CCカメラ座標のPositionパスでカラコレ worldP_CCワールド座標のPositionパスでカラコレ