2013-01-14

maskのfringeオプション

ノード内にある、maskのfringeオプションを使用可にすると、指定したmaskのエッジにのみその効果が適応されます。
たとえば、グリーンでキーアウトしたんだけど、どうしても半透明部分のエッジにグリーンが残るとか。despillするため、hue correctなどでグリーンをキャンセルしたら、白っぽくなりすぎて、今度は背景色に対して浮いてしまったとか・・・
そういう時、このmaskのfringeオプションをもちいるといい感じにいけたりする場合があります。
適当な素材がないので、この部分の説明は省きますが、原理だけ説明を。


たとえば、真っ白のconstantノードにrampノードでアルファとして幅の少しある白から黒のグラデーションを与えます。




こんな感じです。
アルファを見ると


こんな感じです。
で、ここにcolor correctノードを追加し、maskにアルファを指定してfringeオプションにチェックを入れて、

適当に色をいじります。緑にしてみます。


と、こんな感じになります。アルファの0-1の幅で真ん中ぐらいにcolor correctの効果のピークがきているようです。
実際にカラーピックしてみると、

こんな感じで、0.5のときに、color correctが100%効いてます。

クロマキー等でアルファを作成して、エッジのみを修正したい場合は割りと使えるオプションです。原理がわかれば、アルファにblurを用いてもう少し幅をだすなど、いろいろと利用価値があります。



2012-11-28

現在アクティブなviewerに選択している複数のnodeをすべてコネクトする(ただし10個まで?

需要があったから作ってみました。

既存ショートカットの ctrl + i を複数のノードを選択している状態で発動させると、新規にviewerノードを作成してそれに選択していたノードがすべてコネクトされる。これを新規のviewerノードではなく、現在のアクティブなviewerでやりたいというリクエスト。



現在のアクティブなviewerはpythonで、

nuke.activeViewer()

で表すことができる。ただし、これはノードを表しているのではないので、後ろに.node()をつけて、

nuke.activeViewer().node()

で現在アクティブなviewerノードとなる。
あとはこれに、選択したノードすべてを繋ぎたい。「繋ぐ(親ノードを指定)」は、

setInput(番号, ノード)

となる。たとえば、Merge1を3番のパイプに繋ぎたい場合は

nuke.activeViewer().node().setInput(2, nuke.toNode('Merge1'))

となる。3番だけど0起点だから数字は「2」だ。
ともあれ、実際のスクリプトとしては、


selN = nuke.selectedNodes()
curV = nuke.activeViewer().node()
a = 0
for n in selN:
    curV.setInput(a, n)
    a = a + 1

見たいな感じで表現できる。
実行してみると・・・

複数あるノードを

選んで実行すると、
カレントビューのviewerノードに繋がる!


あとは、関数化してショートカットへ。


import nuke
def main():
    selN = nuke.selectedNodes()
    curV = nuke.activeViewer().node()
    a = 0
    for n in selN:
        curV.setInput(a, n)
        a = a + 1


として、viewMultiConnect.py って名前で「.nuke」に保存。同じ階層にmenu.pyをつくり、


import viewMultiConnect
m = nuke.menu("Nodes")
m.addCommand("viewMultiConnect", "viewMultiConnect.main()", "ctrl+shift+i")

として保存。(※menu.pyが既存の場合は上記コードを付け加える
この場合最後の"ctrl+shift+i"がショートカットとなる。




2012-09-05

グラフに頂点追加

グラフに頂点追加は、ctrl+alt でグラフ上をクリックですよ。

2012-08-28

ノード名変更


a = 0
for n in nuke.selectedNodes():
    a = a + 1
    n.knob('name').setValue('hoge' + str(a))

2012-04-22

Dobry den!

I am glad that you read this my blog!
Thank you!
I would like to know where you are and your impressions about this blog.
Could you please give me some comments as long as that's okay with you?

Regards.

2012-04-09

snapshot

以前、秋元さんと話していて、snapshot機能が欲しいとおっしゃっていたので作ってみました。

http://dl.dropbox.com/u/40054205/snapshot.zip

i)
menu.pyの中の記述を、現環境で使用しているmenu.pyに加えてください。
デフォルトのショートカットが[Shfit + Alt + x]になっているので、適当に、この記述を変更してください。

ii)
snapshot.pyはそのmenu.pyと同じディレクトリに入れてください。

iii)
上記で与えたショートカットを実行すると、その.nkと同じ階層にスナップショットとして.exrのファイルを一枚書き出します。
同時に現れたウィンドウのボタンを押すと、スナップショットと元イメージをトグルで表示を切り替えてくれます。

単純に一枚レンダしてるだけで、しかもwinだけかもですがnukeのキャッシュ機能があまりよくないので、レンダ時の時間を名前に加えて、同じexrファイルが出来ようようにしています。そのため、.nkのディレクトリにはゴミがたまっていきます・・・

補足:スナップショットを取りたいノードを選んでショートジカットを実行してください。

2011-12-31

camera shake

標準で付いている CameraShakeノードは2D的なもので、3D上でのcameraノードにゆれを加えるようなものは標準では備わってない。
ってことで作ってみました。

http://dl.dropbox.com/u/40054205/cameraShake.nk

パラメーターとして・・・


という感じで、amplifier、waveLength、waveOffset、waveHeight、heightOffset、seedのパラメーターが各回転と各位置についてます。rotationXYZとpositionXYZとして。

ここで、下記ノイズ波形が初期値とすると






amplifier
減衰用の強度です。カメラシェイクのゆれを止まる際にノイズ波形を波の高さ弱めるの使用してください。1→0のアニメーションをつければノイズ波形が弱まりながら止まります。




または、テンションを付けたりするのに用いることができます。

waveLength
ノイズ波形の波長です。大きくなれば山から次の山までが離れて、ゆっくりとした動きになります。つまり大きいほどゆれ頻度が下がります。




waveOffset
ノイズ波形の横方向への(波長方向への、時間方向への)オフセットです。余り使う必要はないかも・・・
 
waveHeight
ノイズ波形の高さです。強度といったところです。大きいほどフレ幅が大きくなります。
 
 
heightOffset
ノイズ波形の縦方向への(高さ方向への、強度方向への)オフセットです。余り使う必要はないかも・・・
 
seed
ランダムシードです。たとえばrotationXとrotationYのパラメーターにすべて同じ数字をいれてるとノイズ波形としてはrotationXも同じになってしまうので、このseedでランダム化させれます。当然ながら、ノイズ波形の強度や波長の長さは一緒のままでランダム化出来ます。
 


一番上にある、amplifier for all と frequency for all は
 

amplifier for all
各rotationXYZ、各positionXYZのamplifierにかけることが出来る係数です。
全体的にとめたい場合などに有効です。

frequency for all
各rotationXYZ、各positionXYZのwaveLengthにかけることの出来る係数です。実際にはこの「frequency for all 」の逆数が全ての各waveLengthに乗算されます。小さくするとノイズ波形の波長を大きくすることができます、つまり動きの頻度をゆっくりにしたりする場合に使えます。

下記例では、上記二つのパラメーターを1→0というアニメーションをつけています。