파이썬 스크립트로 많은 머티리얼에서 값 노드 변경

Aug 16 2020

여기 블렌더와 파이썬 newbee.

여러분 중 한 명이 제가 겪고있는 다음 문제에 대해 저를 도울 수 있다면 매우 기쁠 것입니다. 저는 스케일 모델을 블렌더로 가져 왔는데 실제 스케일로 렌더링하고 싶습니다. 모델의 크기를 조정할 때 재료가 함께 크기가 조정되지 않고 나빠 보입니다. 그러나 모든 머티리얼에는 "Scale"이라는 Value 노드 가 있습니다. 동일한 스케일로 편집하면 모델을 스케일링하고 모든 것을 수정하고 바로 보입니다.

모델이 재질이 다른 100 개가 넘는 개체를 사용하기 때문에 반자동으로 스크립트를 작성하는 것이 훨씬 쉬울 것입니다.

내가 찾은 것은 비슷한 종류의 문제가 해결 되었지만 스크립팅에 대한 사전 경험이 없기 때문에 문제를 해결하기 위해 적응할 수 없었습니다.

내가하고 싶은 것 :

  • 변경할 개체를 선택하십시오.
  • 스크립팅으로 이동
  • 그것에 스크립트를 복사
  • 선택한 모든 개체의 "scale"이라는 레이블이 지정된 값 노드에 넣어야하는 숫자를 편집합니다.
  • 스크립트 실행
  • 더 나은 렌더링 결과를 얻게되어 기쁩니다.

블렌더 2.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)