Nukeで画像を合成する方法を知りたい!
ただマスクを切ってのせたいだけなのにうまくいかない…
そんな方に向けた記事です。
手順や説明が不要で、Nukeの組んであるノードのみ必要だという方は各項目の一番下にテキストを貼ってあるのでそちらをコピーしてお使いください。
個人的に扱いやすいのは方法②です。
モデラーでNukeを使う必要性について
「モデラーがNuke?」と思われる方もいるかもしれません。
ですがモデラーでもしばしばNukeを使用することがあります。例えば、以下の3つ
- 正確な色味を確認したい時
- レンダリングした画像などでLUTを適用した正確な画像を確認する
- AOVsを使用したexr画像で格納されている全てのチャンネルを確認する
- リニアで作成したテクスチャの色を正確に確認する など
- 実写素材と色を合わせるたい時の色味調整や、色の違いを詳しく見比べたい時
- レンダリング画像を他のexrやraw画像と合成したい時
- 実写系でチェック用の画像に、実写のカラーチャート画像などをレンダリング画像に合成したものを求められた時
- Photoshopだとマスクを作ってレイヤーを重ねるだけなのですが、Nukeはひと手間必要です
- 実写系でチェック用の画像に、実写のカラーチャート画像などをレンダリング画像に合成したものを求められた時
特に正確に色を見たい時にはNukeは必須ですし、色合わせなどの効率もUPしますので、最小限の機能を扱えるようになることをお勧めします。
Nukeはとっつきにくいと思うかもしれませんが、モデラーが使うのはNukeの基本部分のみです。
理解しなくてもノードをコピーして調整するだけでも全然問題ありません。私もいつもコピべ コピべ です。
今回は画像を合成するために必要なマスクについてご紹介します。
マスクでくりぬく
手順
- 画像を読み込む
- Rotoノードを作成しマスクを切る
まだマスクが適用されてない
Roto(マスクを切るノード)はマスクを切っただけでは何も変わりません。
理由: マスクはアルファ1(真っ白)に対して減算するのですが、多くの画像はアルファ0(真っ黒)のためRotoを使っても効果がないから
解決方法: Shuffleでアルファチャンネルを与える
- Shuffleノードを作成 > 画ぞの下につなげ、Output Layer > rgba.alphaの白と黒のマークの白いほうをクリック
これでもまだマスクが適用されてない
Shuffleでアルファチャンネルを与えてもまだ何も変わりません。
理由: ノードのつなぎ方が違うから
解決方法: Mergeでつなぐ
- Mergeノードを作成 > BをShuffle・AをRotoに繋ぎ、oparation: maskに変更
set cut_paste_input [stack 0]
version 12.1 v4
Roto {
inputs 0
output alpha
cliptype bbox
curves {{{v x3f99999a}
{f 0}
{n
{layer Root
{f 2097152}
{t x44800000 x44800000}
{a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0}
{curvegroup Bezier1 512 bezier
{{cc
{f 8192}
{px 1
{0 0}
{x44868000 x44ba0000}
{0 0}
{0 0}
{x43e90000 x449c0000}
{0 0}
{0 0}
{x44100000 x44160000}
{0 0}
{xc2980000 xc1000000}
{x44b84000 x43ca0000}
{x42980000 x41000000}
{0 0}
{x44e84000 x447c0000}
{0 0}}} idem}
{tx 1 x44884000 x446d6666}
{a osw x41200000 osf 0 str 1 spx x44800000 spy x44800000 sb 1 tt x40800000}}}}}}
toolbox {selectAll {
{ selectAll str 1 ssx 1 ssy 1 sf 1 }
{ createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 }
{ createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ brush str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
} }
toolbar_brush_hardness 0.200000003
toolbar_source_transform_scale {1 1}
toolbar_source_transform_center {1024 1024}
colorOverlay {0 0 0 0}
lifetime_type "all frames"
motionblur_shutter_offset_type centred
source_black_outside true
name Roto4
selected true
xpos 867
ypos -104
}
push $cut_paste_input
Shuffle2 {
fromInput1 {{0} B}
fromInput2 {{0} B}
mappings "4 rgba.red 0 0 rgba.red 0 0 rgba.green 0 1 rgba.green 0 1 rgba.blue 0 2 rgba.blue 0 2 white -1 -1 rgba.alpha 0 3"
name Shuffle4
selected true
xpos 1004
ypos -155
}
Merge2 {
inputs 2
operation mask
name Merge3
selected true
xpos 1004
ypos -100
}
Rotoの形がうまく適用されない場合
Rotoの形と結果が違うことがあります。
理由: 画像とNukeのフォーマット サイズがあっていない
Roto切りとる設定がClip to: formatになっている場合Nukeのフォーマットサイズで効果を適用します(Nukeの設定: Project Settingsのfull size format)。
そのため、画像のサイズが フォーマットサイズ より大きい場合、 フォーマットサイズ 以上はクリップされRotoの効果がなくなります。
解決方法: Roto > Clip to: no clip もしくは bbox にする
マスクした画像を別の画像に重ねる
次はマスクを切った画像の下に別の画像を置く方法です。
Photoshopだとレイヤーを重ねるだけなのですが、Nukeはひと手間必要です。
方法①
上記の「マスクでくりぬく」で作成したノードそのままに、Mergeノードを追加して合成する方法です。
- Mergeノードを追加作成 > poeration: under に変更
- 作製したMergeのBと元々あったMergeにつなげる
- 作製したMergeのAに下にする画像を繋げる
set cut_paste_input [stack 0]
version 12.1 v4
push 0
Roto {
inputs 0
output alpha
cliptype bbox
curves {{{v x3f99999a}
{f 0}
{n
{layer Root
{f 2097152}
{t x44800000 x44800000}
{a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0}
{curvegroup Bezier1 512 bezier
{{cc
{f 8192}
{px 1
{0 0}
{x44868000 x44ba0000}
{0 0}
{0 0}
{x43e90000 x449c0000}
{0 0}
{0 0}
{x44100000 x44160000}
{0 0}
{xc2980000 xc1000000}
{x44b84000 x43ca0000}
{x42980000 x41000000}
{0 0}
{x44e84000 x447c0000}
{0 0}}} idem}
{tx 1 x44884000 x446d6666}
{a osw x41200000 osf 0 str 1 spx x44800000 spy x44800000 sb 1 tt x40800000}}}}}}
toolbox {selectAll {
{ selectAll str 1 ssx 1 ssy 1 sf 1 }
{ createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 }
{ createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ brush str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
} }
toolbar_brush_hardness 0.200000003
toolbar_source_transform_scale {1 1}
toolbar_source_transform_center {1024 1024}
colorOverlay {0 0 0 0}
lifetime_type "all frames"
motionblur_shutter_offset_type centred
source_black_outside true
name Roto1
selected true
xpos -52
ypos -9
}
push $cut_paste_input
Shuffle2 {
fromInput1 {{0} B}
fromInput2 {{0} B}
mappings "4 rgba.red 0 0 rgba.red 0 0 rgba.green 0 1 rgba.green 0 1 rgba.blue 0 2 rgba.blue 0 2 white -1 -1 rgba.alpha 0 3"
name Shuffle1
selected true
xpos 85
ypos -60
}
Merge2 {
inputs 2
operation mask
name Merge1
selected true
xpos 85
ypos -5
}
Merge2 {
inputs 2
operation under
name Merge2
selected true
xpos 85
ypos 62
}
方法②
上記の「マスクでくりぬく」で作成したノードを調整して合成する方法です。
- RotoのbgをShuffleにつなげる
- Mergeのpoeration: overに変更
- MergeのBに下にする画像を繋げる
set cut_paste_input [stack 0]
version 12.1 v4
push $cut_paste_input
Shuffle2 {
fromInput1 {{0} B}
fromInput2 {{0} B}
mappings "4 rgba.red 0 0 rgba.red 0 0 rgba.green 0 1 rgba.green 0 1 rgba.blue 0 2 rgba.blue 0 2 white -1 -1 rgba.alpha 0 3"
name Shuffle3
selected true
xpos -754
ypos 812
}
Roto {
output alpha
premultiply rgba
cliptype bbox
curves {{{v x3f99999a}
{f 0}
{n
{layer Root
{f 2097152}
{t x44800000 x44800000}
{a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0}
{curvegroup Bezier1 512 bezier
{{cc
{f 8192}
{px 1
{0 0}
{x44868000 x44ba0000}
{0 0}
{0 0}
{x43e90000 x449c0000}
{0 0}
{0 0}
{x44100000 x44160000}
{0 0}
{xc2980000 xc1000000}
{x44b84000 x43ca0000}
{x42980000 x41000000}
{0 0}
{x44e84000 x447c0000}
{0 0}}} idem}
{tx 1 x44884000 x446d6666}
{a osw x41200000 osf 0 str 1 spx x44800000 spy x44800000 sb 1 tt x40800000}}}}}}
toolbox {selectAll {
{ selectAll str 1 ssx 1 ssy 1 sf 1 }
{ createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 }
{ createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ brush str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
{ smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
} }
toolbar_brush_hardness 0.200000003
toolbar_source_transform_scale {1 1}
toolbar_source_transform_center {1024 1024}
colorOverlay {0 0 0 0}
lifetime_type "all frames"
motionblur_shutter_offset_type centred
source_black_outside true
name Roto3
selected true
xpos -754
ypos 858
}
push 0
Merge2 {
inputs 2
name Merge4
selected true
xpos -602
ypos 862
}