CGBoxの一部の記事にはアフィリエイト広告が含まれております。
【Blender3.1】コンポジットでマスクを行う方法を一挙紹介!
はじめに
こんにちは!
今回はフリーの3DCGソフト「Blender」のコンポジット(Compositing)で、「マスク」を行う色んな方法を紹介したいと思います。
コンポジットは、レンダリング結果を補正したり、複数の画像・動画と合成したりできる機能です。
「マスク」を使うことで、たとえばコチラのようにオブジェクトごとに別々に、RGBミックスノードを使って色補正をかけることができます。
ちなみに、「コンポジット」の機能の説明、簡単な使用例についてはコチラの記事にまとめているので、参考にしてみてください!
また、RGBミックスノードを使った、マテリアルの色補正の方法についてもコチラの記事で紹介しているので、あわせて参考にしてみてください。
コンポジットでのマスクの使い方
長引くコロナ禍で、「マスク」を着けた生活が日常茶飯事になっているので、「マスク」と言うとどうしてもウイルス用のマスクをイメージしてしまう方が多いと思いますが…
映像用語のマスク(Mask)の意味はちょっと違います!!
今回紹介するマスクは、コチラです。
合成やスーパーインポーズのために、画面の一部を見せないように覆ういろんな形状の画像。
出典:CGWORLD用語辞典
https://cgworld.jp/terms/マスク.html
例として、白と黒の2色で塗り分けられた画像を使ったマスクを紹介します。
コチラのようにコンポジターの画面上で、「マスク①」と「マスク②」の2つの白黒画像のマスクを使用して、それぞれ左下のキューブと、右上のキューブの領域を白で表示し、それ以外は黒で隠しています。
そうすることで、白で表示した領域だけ切り出して乗算ノードで色補正する、というコンポジット作業を行うことができます。
ちなみに、マテリアルを編集する「シェーダーエディター」でも同じようにマスクを使った表現ができます。
たとえば、コチラのように「カラーランプ」を使ってマスクを作ることで、傷テクスチャの影響範囲を設定することができます。
コンポジット結果の表示方法について
マスクする方法を紹介する前に、コンポジットノードの使い方についても軽く触れておこうと思います。
コンポジットの手順はコチラです。
先にレンダリングしないと、コンポジットした結果が表示できません。
画面右上の「背景」にチェックを入れておくと、コンポジットした結果が画面奥に表示されます。
ちなみに、コンポジットノードの右上の「地球儀のようなマーク」をクリックすると、コチラのように中間結果のプレビューが表示されるようになるので便利です。
シェーダーエディターでも、「Node Preview」という有償アドオンを使えば、ノードのプレビューを表示できるそうです。
興味がある方は試してみてください。
マスクする手法を一挙紹介!
コンポジットでマスクする方法を5パターン紹介します!
それぞれについて、使用例を交えながらやり方を説明していきます!
- オブジェクト/マテリアルIDでマスクする
- クリプトマット(Cryptomatte)でマスクする
- アルファチャンネルでマスクする
- 画像エディタ/動画クリップエディタでマスク作成
- 「マット(Matte)ノード」でマスクする
オブジェクト/マテリアルIDでマスクする
コチラのように、2つのオブジェクトに別々のIDを割り当てて、それぞれをマスク・色補正することができます。
オブジェクトIDを使ってマスクする方法について、手順を説明します。
インデックスの値を「1」に設定します。
「IDマスク」のアルファをミックスの「係数」に接続し、ミックスのカラーピッカーで色を設定すると、出力プレビューの1番目のオブジェクトの色が変わります。
すると、コチラのようにオブジェクトごとにマスク・色補正した結果になります。
マテリアルごとにマスクできる、「マテリアルID」を使うこともできます。
やり方はコチラです。
Step3以降の手順は、さきほどの「オブジェクトID」でマスクする方法と同じです。
(「レンダーレイヤー」の出力名が「IndexMA」に変わります)。
同一オブジェクトで、マテリアルごとにマスクしたい場合などに便利ですね。
クリプトマット(Cryptomatte)でマスクする
Blenderには共通規格の「クリプトマット(Cryptomatte)」というソフトが内蔵されており、そちらを使ってマスクすることができます。
クリプトマットの説明と、使用例についてはコチラのWikipediaの説明をご覧ください。
Cryptomatte は Psyop(英語版) の Jonah Friedman と Andy Jones によって作成されたオープンソースソフトウェアであり、また、そのソフトウェアや同等機能を持つ他のソフトウェアによって生成された特定スタイルの画像のためにも同義的に使われている。
(中略)
このプログラムは、例えばシーン内の一つまたは複数のオブジェクトに対して画像マスクを作成する際に使用することができるシーンのID マットを生成する。このIDマットは Cryptomatte と呼ばれる通り、非常に特徴的な外観を持つ。これらの Cryptomatte 画像は、各オブジェクトやマテリアルに異なるランダムな色が割り当てられているため、一般的に非常にカラフルとなっている。レンダリング時に利用可能なデータを使用して、モーションブラー、透明度、被写界深度に対応するマットが作成される。
(Alex Treviño and Anaïs Maamar (Original Concept) /Blender Cloud CC 表示 4.0)
上: Blender 2.81のスプラッシュ・スクリーンで使われているレンダリング画像
下: 同じシーンのCryptomatte画像外観
出典:Wikipedia – Cryptomatte
https://ja.wikipedia.org/wiki/Cryptomatte
先ほど紹介した方法と違って、オブジェクトやマテリアルごとにインデックスを設定する必要がないので、大量のオブジェクトをマスクしたい場合に特に便利です。
やり方・手順を以下で紹介します。
ちなみに、「アセット」とは、「親子関係にあるオブジェクトのグループ」のことだそうです(Blenderリファレンスマニュアルより)。
マスク対象のマットIDが設定されます。
混ぜ合わせる色を設定すると、マスク対象の色が変わります。
ちなみに、コチラのように「+ボタン→スポイトでクリック」を繰り返すことで、複数の対象物を同じマットIDに指定することもできます(「ー(マイナス)」を押した後にスポイトすれば、対象から外せます)。
アルファチャンネルでマスクする
コチラのように、画像のアルファ(透過部分)をマスクとして使うこともできます。
レンダーレイヤーの出力の「アルファ」はマスクとしては使えないので、コチラのように「RGBA分離」ノードを使って「A」(アルファ)出力でアルファを白黒画像として抜き出しているのがミソです。
詳しい使い方についてはコチラの記事で紹介されているので、参考にしてみてください。
ちなみに、「アルファチャンネル」(アルファ)の説明と色んな使い方については、コチラの記事で紹介しているので、あわせて参考にしてみてください!
画像エディタ/動画クリップエディタでマスク作成
「画像エディタ」や「動画クリップエディタ」を使って、手描きでベジエカーブを描いてマスクを作ることもできます。
コチラは、主に画像をくり抜くときに使えるテクニックです。
マスクの作り方
まず、ベジエカーブでマスクを作る方法・手順を紹介します。
ハンドルタイプは「自動」「ベクトル」「整列(シングル)」「整列」「フリー」から選択できます。
ベジエカーブの「ハンドルタイプ」についてはコチラの記事で紹介しているので、あわせて参考にしてみてください。
「Alt+C」を繰り返し押すことで、カーブの「開く」「閉じる」を切り替えることができます。
カーブを閉じたら、マスクとしては完成です。
描いたマスクをコンポジットで使う
コンポジターで「入力→マスク」ノードを追加し、コチラのようなノードを組むことによって、描いたマスクで画像を加工することができます。
手描きのマスクは、「実写合成」(VFX)でよく使われる手法です。
以下のチュートリアル動画の例では、「VFX」プロジェクトでモーショントラッキングを行ったあと、動画クリップエディター上でマスクを作成し、
出典:Modeling Happy – Blenderで撮影した動画に炎を作って手に持たせてモーショントラッキングで合成するチュートリアル動画 https://modelinghappy.com/archives/26775
コチラのように人の手の中で炎が燃えているように映像を合成することができます。
出典:Modeling Happy – Blenderで撮影した動画に炎を作って手に持たせてモーショントラッキングで合成するチュートリアル動画 https://modelinghappy.com/archives/26775
作成方法の詳細については、コチラの記事と元動画を参考にしてみてください。
ちなみに、Blenderでの「実写合成」(VFX)のやり方については、コチラの記事で紹介しているので、ぜひ参考にしてみてください!
「マット(Matte)ノード」でマスクする
コンポジットでは、さまざまな方法でマスクができる「マットノード」(Matte)があります。
(さきほど紹介した「クリプトマット」(Cryptomatte)もその一つです。)
コチラのように全部で14種類あります(出典:Blenderリファレンスマニュアル)。
- Box Mask Node (ボックスマスク)
- Channel Key Node (チャンネルキー)
- Chroma Key Node(クロマキー)
- Color Key Node (カラーキー)
- Color Spill Node (カラースピル)
- Cryptomatte Node (クリプトマット)
- Cryptomatte Node (Legacy)
- Difference Key Node (差分キー)
- Distance Key Node (距離キー)
- Double Edge Mask Node (ダブルエッジマスク)
- Ellipse Mask Node (楕円マスク)
- Keying Node (キーイング)
- Keying Screen Node (キーイングスクリーン)
- Luminance Key Node (ルミナンスキー)
それぞれのノードの機能についてはまた別の機会に紹介したいと思いますが、今回はこの中で、「マスク」という名がついている以下3つのノードについて紹介します。
ボックスマスク(Box Mask Node)
コチラのように、箱型の四角い形状でマスクします。
縦横の長さ・位置はパラメータで変更できます。
楕円マスク(Ellipse Mask Node)
コチラのように、楕円形状でマスクします。
コチラのように縦横の位置・幅・長さ・回転はパラメータで変更できます。
ダブルエッジマスク (Double Edge Mask Node)
2つのオブジェクトIDマスクを組み合わせて、「ぼかし」の効果を加えられるマスクです。
コチラの例では、2つのキューブにオブジェクトID1と2を割り当てて、それぞれをダブルエッジマスクノードの「内部マスク」「外部マスク」につないでいます。
外部マスクの部分が「ぼかし」の効果で半透明になっているのが分かるかと思います。
まとめ
Blenderのコンポジットで使える、いろんなマスクの方法について紹介してみましたが、いかがだったでしょうか?
「コンポジット」と「マスク」を使いこなせるようになると、3DCGと実写を組み合わせたりなど多彩な表現ができるようになって面白いので、ぜひ試してみてください!
最後に、今回のまとめです。
- コンポジットでのマスクの使い方→一部を切り出して色補正したり、別々の画像の合成に使える!
- コンポジット結果の表示方法について→レンダリングした後に「ノードを使用」をON!
- マスクする手法を一挙紹介!
- オブジェクト/マテリアルIDでマスクする→「ビューレイヤープロパティ」などで設定。
- クリプトマット(Cryptomatte)でマスクする→大量のオブジェクトにマスク設定するときに便利!
- アルファチャンネルでマスクする→RGBA分離ノードを使う。
- 画像エディタ/動画クリップエディタでマスク作成→画像を切り出す時に便利!
- 「マット(Matte)ノード」でマスクする→「ボックス」「楕円」「ダブルエッジ」など。