Pythonスクリプトを使用して多くのマテリアルの値ノードを変更する
Aug 16 2020
ブレンダーとパイソンニュービーはこちら。
私が遭遇している次の問題について、あなたの1人が私を助けてくれたらとてもうれしいです:私は実際のスケールでレンダリングしたいスケールモデルをblenderにインポートしました。モデルをスケーリングすると、マテリアルがそれに合わせてスケーリングされず、見栄えが悪くなります。ただし、すべてのマテリアルには「スケール」という名前の値ノードがあります。同じスケールで編集すると、モデルをスケーリングし、すべてを修正して、すぐに表示されます。

私が見つけたのは、この種の同様の問題が解決されたことでしたが、スクリプトの経験がないため、問題を解決するためにそれを適応させることができませんでした。
私がしたいこと:
- 変更したいオブジェクトを選択します
- スクリプトに入る
- スクリプトをコピーします
- 選択したすべてのオブジェクトの「スケール」というラベルの付いた値ノードに配置する必要がある数値を編集します
- スクリプトを実行する
- より良いレンダリング結果を得ることができて幸せです。
私はBlender2.83.4を使用していますが、コンソールのスクリプトでPYTHON INTERACTIVE CONSOLE 3.7.4(デフォルト、2020年2月17日、16:23:28)[MSC v.1916 64ビット(AMD64)]と表示されます。
すべての助けは大歓迎です!
回答
1 RobertGützkow Aug 16 2020 at 18:07
以下のスクリプトは、選択したすべてのオブジェクトを反復処理し、ラベルがに設定されている場合は、割り当てられたマテリアルの値ノードを調整します"Scale"
。
import bpy
def set_scale_nodes_selected_objects(scale_val):
for obj in bpy.context.selected_objects:
for mat_slot in obj.material_slots:
set_scale_nodes_material(mat_slot.material, scale_val)
def set_scale_nodes_material(mat, scale_val):
if mat is not None and mat.use_nodes and mat.node_tree is not None:
for node in mat.node_tree.nodes:
if node.label == "Scale" and node.type == "VALUE":
node.outputs["Value"].default_value = scale_val
if __name__ == "__main__":
scale_val = 1.0
set_scale_nodes_selected_objects(scale_val)