Nukepediaをはじめ、GitHubや個人サイト等でも様々な"Gizmo"(ギズモ)を入手することができる。このGizmoというのはよく使う手法などをノードの組み合わせとして登録して、いつでもそれを呼び出せるといったモノだ。もっというと先述のようなサイトからダウンロードして用いれば、別の誰かの良く使う手法を自分のノードグラフ上で再現することでできて、かつそれを利用して自分のノードグラフ上で発展させることもできる優れモノのである。今回はこのGizmoについて探っていこうと思う。
Gizmo とは
Gizmoを説明するにはまずGroupノードを説明する必要がある。Groupノードは、よく使うノード群をノードグラフ上で見かけ上ひとつのノードにまとめて、ちょうど器(うつわ)のようなモノに入れてまとめてしまって操作するというモノで、その器の中のノード群の必要なプロパティだけを、このGroupノードのプロパティとして表示し調整することができるという優れものだ。そして、このGizmoをNUKE上でいつでもファンクションとして呼び出せるようにあらかじめNUKEに登録可能な形式にしたものがGizmoと呼ばれる。
Group ノードの作成
例えば、マスクのエッジにフラクタルノイズを加えて、直線的な"乗り換え感"を誤摩化すといった「よくやるような手法」をGroupノードを経由して、今回はこれをGizmoとして登録してみる。それでは実際に、Groupノードを作ってそれを"Gizmo化"する、ということをやってみよう。
適当なロトマスクを準備して、それを図のようなノードグラフに組み上げる。ノード構成について簡単に説明しておくと、blurとerodeで与えられたロトマスクのボケ幅を調整できるようにして、その部分の白黒情報に従ってフラクタルノイズが入るようにしている。
少々ややこしい組み方しているが、このような組み方をしているのは、例えば、元あるロトマスクをblurとerodeでボケ幅を与えたモノにフラクタルノイズを加えて、それを元のそのボケ幅のあるロトの形状でマスクすると図のように単調で元の形状が判別しやすいものになってしまうためである。
今回組み上げたノード群だと、minusしているところがあり、ここで値的にいったんマイナス値が出てしまうのだが、これのおかげで、最初のロトの形状がわかりづらい複雑なマスクを作り出すことができる。
今回組み上げたノード群
ともあれ、この方法で、組んだノード群をGroupノードに変換するために、これらを選択し[Edit → Group → Collapse to Group]コマンドを用いてGroup化する。
組み上げたノード群をグループ化する
このとき、Outputとして複数のノードが候補として考えられる場合は、「どれをこのGroupノードのアウトプットとするか?」といった主旨のアラートが立ち上がるので、この場合はClampノードを指定した。
Groupノードのアウトプット先をClamp1に指定
Group化すると、見かけ上はひとつのGroupノードとしてノードグラフ上に存在するが、このGroupノードのプロパティの右上の方にある「S」マーク(show the internal structure of this Group node)をクリックすると、このGroupノードの中に入ることができる。
さらに、Groupノードはそのプロパティで、Groupノードの中に持つノードのアトリビュートを調整できるように調整したり、各アトリビュートをGroupノードのプロパティ上に表示することができる。
その手順は、Groupノードのプロパティで右クリックをしてManage User Knobsを選び、pickボタンをクリックし、"おもて"に表示させたいアトリビュートを選択する。
今回はボケ幅とノイズの大きさを、この"おもて"から調整できるように、つまりGroupノードのプロパティから調整できるようにすることにした(009.png)。
<STEP 1>Groupノードのプロパティで右クリックをしてManage User Knobsを選択
<STEP 2>pickボタン(赤枠)をクリックし、[x/ysize] size を選択
<STEP 1>Groupノードのプロパティ上に、[x/ysize] size が表示されるようになった
しかし、このままだと、常にこの丸型のロトのマスクしかできないので、Groupの中のRotoノードを外に出してGroupノードのInputとする。これで、ロトに限らずアルファをコネクトすればその形状に従ったノイズ付きのマスクを得ることができる。これでいったんGroupノードは完成したものとする。
Groupノードから、Rotoノードを外に出し、GroupノードのInputに指定する。これにより、Rotoノードの代わりにアルファをコネクトすればアルファ画像の形状に従ったノイズ付きマスクが生成可能
[[SplitPage]]GizmoをNUKEに登録する
このように汎用性のあるノード群をGroup化すると、別のショット、さらには別のプロジェクトでカスタムツールとしてこのGroupノードを簡単に呼び出すことができる。このGroupノードのプロパティのnodeタブからexport as Gizmoをクリックで、ユーザーが指定した任意の場所に.Gizmoファイルとして保存される。
Groupノードのプロパティからexport as Gizmoを選択すれば、Gizumoファイルを書き出すことが可能
この.Gizmoファイルは[File → Import Script]から呼び出すことができるが、それだと面倒だしわざわざ.Gizmoファイルにした意味もない。そこで、これをノードグラフ上でその他のノードと同じように手軽にtabボタンから呼び出せるしたいと思う。
これにはいくつかの方法があるが、ここでは一般的な方法を説明する。NUKEは初期起動時にユーザーディレクトリ領域に「.nuke」という各ユーザーが自前で準備したPythonやこれらGizmo等をインストールできるフォルダを作成する。ユーザーディレクトリというのは、例えば、Windowsであれば「C:¥Users¥(ユーザー名)¥.nuke」、Macの場合、「/Users/(ユーザー名)/.nuke」といった具合であるが、無い場合は自分で作ってもよいし、また場合によっては不可視フォルダとして存在している場合もあるので注意が必要だ。
この「.nuke」フォルダに、Gizmoの入っているプラグインパスを指定するinit.pyと、そこからGizmoをNUKEから呼び出すために登録するmenu.pyを作成し、さらに今回はこの「.nuke」フォルダに「Gizmos」というGizmo用のフォルダを作成しておく。
init.pyの記述は;
nuke.pluginAddPath( './Gizmos' )
......である。この ./Gizmo というのがinit.pyのある場所からみたGizmosフォルダの表し方で、Gizmosフォルダに入っている.Gizmoや.pyなどはNUKE起動時にいったんNUKEが認識を行う。
menu.pyの記述は;
nuke.menu('Nodes').addCommand('test', "nuke.createNode('test')")
......であり、これは「test」ってコマンド名(ノード名)でnukeが呼び出せる「test」ノードを作成できるように登録するっていうことである。
init.py、menu.pyがすでに存在していて、その中に予め何か記述のある場合は、その一番下の行に改行して上記の記述を各ファイル(.py)に書き加えればよい。
と、これでNUKE上から自前のGizmoが手軽に通常のノードと同じようにして呼び出せるようになった。
駆け足ではあるが、今回はGizmoの作成から登録までを説明した。次回はnukepediaをはじめ、githubや個人サイト等で入手のできるよく使われているGizmoの紹介と面倒なGizmo登録を簡単にできるようにするTIPSを紹介したいと思う。また、本題とは関係なかったが、今回説明したマスクの作成の方法はそれなりに応用も利くので、それはそれで何かの足しになればと。
TEXT_テラオカマサヒロ(Galaxy of Terror)
株式会社ギャラクシーオブテラーにて VFX ディレクターとして活躍中。現在は北米に活動拠点を置き、実写合成からフルCGまで幅広いVFX制作に携わっている。
個人サイト「tiraokan.」