PythonでBlenderのコンポジットノードをいじる

レンダリングされたイメージに様々なエフェクトを適用できるコンポジットノード。通常はエフェクトのかかり具合を確認しながらノードを追加していくのですが、Pythonスクリプトからノードを操作する方法をかんたんにまとめてみました。

ノードエディタの有効化

ノードエディタとPythonコンソールを表示してください。ノードエディタのUse Nodesにチェックをいれてコンポジットノードを使用できるようにします。
または、コンソールに
bpy.context.scene.use_nodes = True
と入力することでもUse Nodesのチェックボックスを有効に出来ます。

ノードツリーへのアクセス

ノードツリーへは
bpy.context.scene.node_tree
でアクセスできます。
毎回これを打ち込むのは面倒なので
tree = bpy.context.scene.node_tree
と入力しtreeでノードへアクセスできるようにしておきます。
こんなつなぎ方はしないですが、今回はとりあえずこのノードで試します。
スクリーンショット 2015-08-20 11.18.30

ノード一覧の取得

tree.nodes.keys()
でリスト型でノード一覧が返ってきます。
[‘Composite’, ‘RGB Curves’, ‘Render Layers’, ‘Mix’, ‘Math’]

個別のノードの値取得

RGB Curvesノードの値を取得する場合は
tree.nodes[‘RGB Curves’]
からさらに選択していきます。
その他のノードを操作する場合はRGB Curvesの部分をCompositeやRender Layersのように書き換えます。

ノードのミュート

ミュートをする場合は
tree.nodes[‘RGB Curves’].mute = True
でミュートが出来ます。
tree.nodes[‘RGB Curves’].mute = False
でミュートを解除できます。

ノードの座標

ノードエディタ上のノードの座標は
tree.nodes[‘RGB Curves’].location
で参照することが出来ます。
X、Y座標はそれぞれ
tree.nodes[‘RGB Curves’].location.x
tree.nodes[‘RGB Curves’].location.y
座標は
tree.nodes[‘RGB Curves’].location.x = 300
で直接指定できます。

入力ソケットの操作

RGB CurvesノードのImageソケットを操作したい場合
tree.nodes[‘RGB Curves’].inputs[‘Image’]
から操作を実行していきます。

入力ソケットが接続されているか確認

tree.nodes[‘RGB Curves’].inputs[‘Image’].is_linked
で接続されている場合はTrue、接続されていない場合はFalseが返ってきます。

tree.nodes[‘RGB Curves’].inputs[‘Image’].links
で接続されているソケット一覧が出てきます。

入力ソケットの接続先ノードとソケットの確認

接続先のノードを確認するには
tree.nodes[‘RGB Curves’].inputs[‘Image’].links[0].to_node
接続先のノードのソケットを確認するには
tree.nodes[‘RGB Curves’].inputs[‘Image’].links[0].to_socket
を利用します。

出力ソケットの接続先ノードとソケットの確認

入力ソケットと基本は同じです。inputsがoutputsになっただけです。
入力ソケットと違い出力ソケットでは複数の接続先があるので、もしRGB CurveノードのImageソケットから2カ所へ接続されている場合
スクリーンショット 2015-08-20 11.54.56
tree.nodes[‘RGB Curves’].outputs[‘Image’].links
で確認すると
(bpy.data.node_groups[‘Compositing Nodetree’]…NodeLink, bpy.data.node_groups[‘Compositing Nodetree’]…NodeLink)
のように接続箇所が一覧で取得できます。
いちいち長ったらしく書くのは面倒なので
tree.nodes[‘RGB Curves’].outputs[‘Image’].links[0]
のようにソケットを指定します。
接続先の確認は
tree.nodes[‘RGB Curves’].outputs[‘Image’].links[0].to_node
tree.nodes[‘RGB Curves’].outputs[‘Image’].links[0].to_socket
で行います。

ノードの接続

RGB CurvesノードのImageソケットとMixノードのFacソケットを接続します。
スクリーンショット 2015-08-20 12.09.18
ノードをつなぐには
tree.links.new
を使います。
tree.links.new(接続元のアウトプットソケット, 接続先のインプットソケット)
で指定します。今回はRGB CurvesのImageソケットからMixノードのFacソケットにつなぎます。
tree.links.new(tree.nodes[‘RGB Curves’].outputs[‘Image’], tree.nodes[‘Mix’].inputs[‘Fac’])
スクリーンショット 2015-08-20 12.09.26
ImageやFacのように指定してもいいですが、ソケットはインデックスで指定することも可能です。上から順に0,1,2…となっているのでImageのソケットは0、Facソケットは0です。
tree.links.new(tree.nodes[‘RGB Curves’].outputs[0], tree.nodes[‘Mix’].inputs[0])

ノードの値を変更

RGB CurvesノードのFacの値を変更してみます。
現在の値を確認するには
tree.nodes[‘RGB Curves’].inputs[‘Fac’].default_value
と入力することで
1.0
という値が返ってきます。
例えばこの値を0.7にしたい場合は
tree.nodes[‘RGB Curves’].inputs[‘Fac’].default_value = .7
と入力します。
0.7などの数値は最初の0を省略することができます。キーをひとつ押す手間が省けます。

ノードの追加

ノードの追加には
tree.nodes.new(‘追加するノードの種類’)
を使用します。
ノードの種類なのですが、種類の一覧を取得する方法がよくわからなかったので、
スクリーンショット 2015-08-20 13.47.36
この境界付近をドラッグして実行されたコマンドが表示されるウィンドウを出します。
スクリーンショット 2015-08-20 13.47.32
ノードエディタ上でMixノードを追加するとその際に実行されたコマンドが表示されます。
bpy.ops.node.add_nodeでノードを追加していますが、typeのところがCompositorNodeMixRGBとなっています。typeの部分がノードの種類なので
tree.nodes.new(“CompositorNodeMixRGB”)
でMix.001というノードが追加されます。
tree.nodes.keys()
で追加されたノードが確認できます。
デフォルトでは座標(0,0)に作成されるので
tree.nodes[‘Mix.001’].location
で任意の座標に動かすことが出来ます。
座標移動まで一気にやりたい場合は
nd = tree.nodes.new(“CompositorNodeMixRGB”)
nd.location = (50,50)
のようにすると便利です。

他のノードを追加したい場合は同様にノードを自分で追加してみてtypeを確認してください。

とりあえずこれだけの操作がわかっていればノードは操作ができると思います。

広告

コメントを残す(連絡がとれるメールアドレスをメールアドレス欄に入力していただければ内容によっては直接メールアドレス宛に返信します)

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中