search
LoginSignup
0

posted at

updated at

Blenderでシェーダーのノード位置の調整

概要

Pythonでマテリアルのシェーダーのノード位置を調整してみます。
シェーダーのノード自体をPythonで作成したときに使えるかもしれません(下図は実行例)。

ロジック

NetworkXで有向グラフを作り、マテリアル出力ノードまでの距離ごとにレイヤーを作り、上から配置していきます。

実行してみる

対象のマテリアルの名前をMaterialとしたとき、下記を実行すると位置を調整します。
NetworkXのインストールが必要です。

import bpy
import networkx as nx
from collections import defaultdict

# 有向グラフの作成
g = nx.DiGraph()
m = bpy.data.materials["Material"]
for link in m.node_tree.links:
    g.add_edge(link.from_node, link.to_node)

# 出力までの距離を算出
mo = m.node_tree.nodes["Material Output"]
dist = nx.shortest_path_length(g, None, mo)

posy = defaultdict(int)  # 現在のY座標
for nd in m.node_tree.nodes:
    d = dist[nd]  # ノードの距離(レイヤー)
    nd.location = -d * 300, posy[d]
    posy[d] -= 300

ノードの幅と高さの属性が(有効な値として)使えなかったので固定値にしています。

参考:BlenderでPythonを実行する方法

以上

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0