CryptoMatteでレンダリング画像と一緒にマスク用画像を書き出して使う方法

スポンサーリンク
CryptoMatte_EyeCatche Blender
スポンサーリンク

こんにちは、アキヤマです。
今回はBlender3.1の機能の一つであるCryptoMatteを使って、一部のオブジェクトだけを抽出するマスク画像を出力する方法をご説明します。

どういうときに使うのか?

主に映像での使用目的でレンダリングした画像を使うときに活用します。
例えば以下のこいのぼりの動画をご覧ください。

0:30のあたりから確認していただきたいのですが、この動画はこいのぼりが風にたなびく様子をPNG連番を書き出してコンポジット&エンコードしたものです。
このような動画が出力されるようなシーンを作ったという例で話を進めていきます。

そこでこの動画をレンダリングする前に、例えば次のようなアイデアが思い浮かんだとします。

風で舞ってるんだから、この前ダウンロードしたこいのぼりと背景の間に葉っぱが流れていくパーティクル映像素材を入れようかな?

この場合は、どのように対処すればいいでしょうか。

0500_Example_Composite
葉っぱとこいのぼりの合成イメージ

一つには「こいのぼりと背景を別々にレンダリングする」という方法があります。
レンダープロパティータブフィルム>透過にチェックでこいのぼりだけを出力したものを一つ。
それから透過のチェックを外し、こいのぼりのオブジェクトをレンダリング非表示にした状態をまた一つ用意して、それぞれレンダリングをかけます。

そうして出力した素材をAfterEffectなどの映像ソフトでコンポジットする際に、こいのぼりのレイヤーと背景のレイヤーをそれぞれインポートして、その間に葉っぱのパーティクルの映像素材を挟めば目的は達成できます。

ただこのケースの場合はどうしても2回レンダリングすることになってしまいます。
サンプルの映像の背景(青空)は動きがないので一枚だけレンダリングすれば問題ないですが、仮に背景も何かしらのアニメーションをしていた場合、900フレーム×2回分のレンダリング時間がかかってしまいます。

レンダリングが早く済む素材ならばいいですが、これが長々とかかるような内容だとレンダリングの時間がもったいないですよね。

しかしこの目的を達成した上で、このレンダリングを一回で済む方法があります。
それが今から紹介するCryptoMatteマスク画像を使う方法です。

CryptoMatteを使うと何ができる?

CryptoMatteを使うと、レンダリング画像と一緒に白黒のマスク画像を書き出すことができます。

Example_500
レンダリング画像
Example_0500_Matte
マスク画像

厳密にはコンポジットノードをいくつか組み合わせることでそれが可能になります。
またこのCryptoMatteを応用することでシーン内に存在する複数のオブジェクトの中から特定の一つだけを抽出し、他の部分をアルファ状態にして出力するという事もできます。

そんな非常に便利な機能なのですが、その点はまた別記事でご紹介させて頂く予定です。
今回はマスク画像を出力するという点に絞って説明を進めます。

CryptoMatteの使い方

スタート

この記事ではすでにシーンを構築し終わった段階で、残すはレンダリングをするだけという作業段階からスタートします。

逆に言えば、この段階まではCryptoMatteに必要な設定はありませんので、これからシーンを作るよという人はモデリングやライティング作業をガシガシ進めていっても大丈夫です。

①チェックを有効にする

まずはじめにシーンの中にあるオブジェクトをCryptoMatteで選択できるようにします。

ビューレイヤータブ > パス > CryptoMatteから、オブジェクトのチェックボックスにチェックを入れます。

Crypto_Check

この記事を見ながら実際に手を動かしている場合は問題ないと思うのですが、CryptoMatteの使い方に慣れてくると、この工程を真っ先に忘れやすいです。またこの工程を忘れると、後にコンポジットノードでいくら手を動かしてもCryptoMatteの設定が進められなくなるので、忘れないようにしてください。

②コンポジットタブでノードを使用をオン

CryptoMatteの具体的な設定、及びCryptoMatteで生成したアルファチャンネルのマット画像の保存先を指定するのは、Compositngビューでの作業となります。

そこでまずコンポジットノードを使うために、Compositngビューに移動し、ノードを使用チェックボックスにチェックを入れましょう。

Crypto_CompositeNode

これでコンポジットノードを組む準備ができました。

③ノードを表示してつなげる

ノードを使用のチェックを入れると、以下のような初期画面が現れます。

今この状態だと、「レンダリングされた画像がそのまま出力されて保存する」というツリーになっています。

ここにいくつかのノードを足して、

A. マスク画像を生成する
B. 生成したマスク画像を保存する

という2つの目的を達成するためのノードツリーに変更していきます。

A. マスク画像を生成する

まずは要のCryptoMatteノードを出しましょう。
画面左上の追加>マット>CryptoMatteを選択します。

Crypto_CompositeNode_Add

CryptoMatte(旧式)と言うのもありますが、今回の方法では使いません。
というか、3.0か3.1からこのCryptoMatteの仕様が変わっていて、()がついていないほうが扱いやすくなったので、今から触る3.1以降のユーザーはこちらを覚えていくのがいいと思います。

あと余談ですが、ノードの追加はShift+Aでできます
マテリアルノードでも同じショートカットでノードが追加できるので覚えておくと損はないです。

そしたら今度はレンダーレイヤーノードの右側の画像の項目から、CryptoMatteの左の画像の項目にノードを接続してください。
ノードはどちらかの項目からドラッグすると線が伸びるので、レンダーレイヤから伸ばした場合はCryptoMatteの方へ、CryptoMatteから伸ばした場合はレンダーレイヤーの方へ線を伸ばしてください。

Crypto_CompositeNode_Connect01

こうすることで今、コンポジットノードでは「レンダリングした画像を出力して保存する」という機能の他に、「レンダリングした画像をCryptoMatteのノードに渡す」という工程が行われるようになりました。

しかしこの段階ではまだ「どのオブジェクトをアルファにして、どのオブジェクトをアルファにしないか」ということは指定されておらず、かつ画像の保存先も示されていないため、ソフトの内部でCryptoMatteという機能に現在のレンダリング画像が渡されるだけの状態になっています。

ですので、先にCryptoMatteでの処理を経たマスク画像を保存するというノードを追加しましょう。

B. 生成したマット画像を保存する

また新たなノードを追加します。画面左上から、またはShift+Aを使って追加 > 出力 > ファイル出力でファイル出力ノードを追加しましょう。

Crypto_CompositeNode_Add02

それからノードの線を接続しましょう。
以下の画像のようにCryptoMatteの右側のマットの項目から、ファイル出力のImageの項目に接続してください。また、ファイル出力ノードの基本パスという項目では出力したマット画像をどこに保存するかを指定できます。予めファイルアイコンをクリックしてパスを指定しておきましょう。

Crypto_CompositeNode_Connect02

これにより、CryptoMatteで処理されたマスク画像が名前の通り、ファイル出力されるようになりました。とはいっても、いまはCryptoMatteになんの処理もさせていないのでこのまま例えばアニメーションレンダリングで900フレーム分レンダリングさせても、900枚の真っ黒な画像が出てくるだけです。

そこでここから、CryptoMatteにどの部分をアルファ(黒色)にして、どの部分をアルファにしない(白色)かを設定していきます。

④CryptoMatteの設定

ではその設定をどうやるかというと、CryptoMatteノードのマットIDの欄にアルファで抜きたくないオブジェクトを選択して追加していきます。

今回の例でいうとこいのぼりに関わるオブジェクトを全てマットIDに突っ込みます。

じゃあそれをどうやるかと言う話ですが、便利に作業するためにもう一個ノードを追加しましょう。
追加 > 出力 > ビュワー分割を追加してください。

Crypto_CompositeNode_Add03

追加したら2つ線を伸ばしてください。

  • レンダーレイヤーノードの右側の画像の項目から、分割ビュワーノードの左側の画像の項目(赤線)
  • CryptoMatteノードの右側のマットの項目から、分割ビュワーノードの左側の画像の項目(ピンク線)
Crypto_CompositeNode_Connect03

するとノードツリーの裏側に黒い画面が一部現れたと思います。
これは先述した現在CryptoMatteが出力しているなんの処理も行われていないマット画像の半分です。

何故半分かというと、分割ビュワーノードというのは2つの画像の出力結果を半々にして一画面に表示するという機能だからです。いまいち何を言ってるかピンとこないかもしれないので、この状態でレンダー > 画像レンダリング をしてみましょう。

Crypto_Image_Rendering

レンダリングが終了すると、以下のように画面が変わります。
このプロジェクトの場合は、こいのぼりのしっぽだけ出てきました。

Crypto_CompositeNode_Viewer

つまり現在、通常のレンダリングの出力結果が右半分、CryptoMatteの処理結果が左半分に出力されていることになります。

「分割ビュワーだから半分半分でしか表示されないのか?」と思うかもしれません。
ですが、そうではありません。この表示の割合は変更できます。

分割ビュワーの係数の値を増減させてみると、後ろのビュワー領域も変化します。
係数を0にすればレンダリング結果の画像だけ、係数を100にすればCryptoMatteの結果だけが表示されます。

ここでは係数を0にしておきましょう。

そしたらここからCryptoMatteの設定を行って、アルファにしたい部分と、そうでない部分を選択していきます。CryptoMatteノードのマットIDの欄に注目し、+のアイコンが書かれたところをクリックしてください。

するとカーソルがスポイトの形に変化します。
その状態でビュワーの上のオブジェクトの上にスポイトのカーソルを置くと、そのオブジェクトの名前が表示されます
(スクショの都合でカーソル消えていますが、画像は青いこいのぼり<Body_Bottom>にカーソルを重ねた状態です)

Crypto_CompositeNode_Viewer02

ここでクリックをするとマットIDに選択したオブジェクトの名前が追加されます。

ぱっと見何も変わっていないように見えますが、ここで分割ビュワーの係数の値を大きくしてみましょう。すると先ほどまで真っ黒だった画像だったにも関わらず、選択後はその選択したモデルの部分だけ白色に変わりました

Crypto_CompositeNode_Viewer03

これがCryptoMatteの生成するマスク画像です。
このようにマットIDで選択したオブジェクトの部分だけを白色に表示することで白黒のマスク画像を生成することができます。

試しにこの状態でアニメーションレンダリングをかけると、青空に4つの鯉のぼりがたなびいている通常のレンダリング画像900フレーム分に加えて、青い鯉のぼりの部分だけが白になった白黒のマスク画像が先程ファイル出力の基本パスで選択したパスに保存されていきます。

もしシーンの中から抽出したいオブジェクトが一つだった場合は、このままレンダリングをかけてもいいですし、もし複数個ある場合は引き続きCryptoMatteノードのマットIDに抽出したいオブジェクトを加えてください。

私の場合は鯉のぼりの部分すべてを選択したいので、一通り選択していった結果このような表示になりました。

Crypto_CompositeNode_Viewer04

途中オブジェクトを選択するのにあたって、ノードが邪魔だったのでまるごと右にスクロールしたりしました。また、きちんとマスクで出力されているかを確認するために、何度も分割ビュワーの数値を増減させて目視で確認しながら進めました。

これでCryptoMatteによる出力は終了です。お疲れ様でした。

おわりに

この後はAfterEffectなどの映像ソフトで調整する作業となります。
この点に関しても、また別の記事で説明したいと思いますので今しばらくお待ち下さい。

またこれによってレンダリング時間が伸びるのではないかと心配されるかもしれませんが、この処理によって大きく処理時間が変わるという事は個人的な経験から言うとほとんどありません。

これが扱えるようになると今回の例で言えば「赤い鯉のぼりだけ抽出する」のように、フィルム > 透過ではできない、一部分のオブジェクトだけを取り出すということもできるようになるので、上手に活用してもらえればと思います。

なお今回使用したこいのぼりの画像例は、私が運営している映像素材サイト「EFFECT-BOX」で配布している映像素材です。利用規約に即していれば、商用利用可・クレジット不要でお使いいただけるので、興味があれば覗いてみてください。マスク画像も合わせて配布しています。
https://eb.atom-box.net/archives/1086

それでは、また。

コメント

タイトルとURLをコピーしました