CG study (After Effects, Nuke, Maya...), English study and more.
Back to my website
---http://www.shizukafolio.com

Monday, August 8, 2016

[Nuke] Nukeでディストーションをコントロールする方法!


 Nukeでディストーションをする際多くの場合IDistortを使うことになりますが、他ソフトに慣れていると同じ感覚でやりたいことをやるのにNukeの場合ひと手間かかります。例えばAfterEffectsでよく使われる「タービュレントディスプレイス」(ノイズ状にディストーションする)エフェクトなど。

 ヘルプに書いてありますが、NukeのIDistortはディスプレイスマップのUV値に従って元画像ピクセルを移動させます。Uが3, Vが5なら元画像の対象ピクセルがxに+3、yに+5動くという事です。Noiseノードを作ってディストーションマップにし、IDistortをかけるとなんか全体が一方に引っ張られてるようになりますね?私もNuke使い始めの時何もわかっていなくてなんじゃこれは使いにくい!と思いました。これは、Noiseノードがデフォルトのままだと0以上正数の値しかない=UV値が全て正数でxもyも移動0、もしくはプラス方向にしか移動しないからです。ということは「タービュレントディスプレイス」のようにピクセルの中心からx,-x,y,-y方向にバランス良くディストーションをかけるには、UVマップに負数(マイナス値)も必要ということになります。

 Nukeで仕事をするようになって実際現場でディストーションをどうやっているのか見たのですが、色々な会社でよく使われているネットで配布されているgizmoがありました。今回は、そのgizmoを紹介しつつ、基本の考え方を噛み砕きたいと思います。基礎はとてもシンプルなので是非gizmoが無くても自分で仕組みが分かっていて一から作れるようになってください。gizmoはあくまでも機能が便利にまとまったツールであるので、gizmoの中で何が行われているか(大枠でも)理解しながら使うのが重要です。でないと環境が変わった時「gizmoが、あのツールがないからあれができない」となってしまいますし、理解できていると自分でどんどん応用させていけます。興味のある人は自分でgizmoをダウンロードして研究してください。



ノイズ状にディストーションさせる方法
元のアイデア:PxF_Distortより
ノイズのX値を1ピクセルずらしたものを元画像からマイナスし(ここでマイナス値が発生する)U値に変換。Yも同じことをして、V値に変換。ShuffleCopyする前にUVマップに対してBlurやMultiplyを使ってディストーションのかかり具合を調整。



translate, rotate, scale値でディストーションさせる方法
元のアイデア:iTransform
最初にExpressionを使い “r=x”, “g=y”を適用し、ピクセル位置の値をr, gに適用したUVマップを作る。それに対してTransformノードでディストーションさせたい分動かしたものから元UVマップの値を引き算し、どれだけピクセルが動いたかの差分UVマップを作る。そのあとディストーションを適用させたい部分をマスクし、ShuffleCopyでUVをメインフローにコピーする。




さらに応用の効いたgizmo X_Distortというのもあります。


おまけ:IDistortを使う際、ディストーションをかける範囲のコントロールをするのにmaskインプットは使いません。(もちろんあえて使う理由がある場合を除く)下画像のように「だんだんと指定した範囲にディストーションが適用されていく」ような結果にはならず、「2レイヤーが重なったよう」な結果になってしまいます。範囲コントロールはUVマップをShuffleCopyする前に全て行います。

No comments:

Post a Comment