Maya에서 Python을 이용해 Arnold의 StandIn(.ass) 오브젝트들의 경로 업데이트하기

Maya에서 Python을 이용해 Arnold의 StandIn(.ass) 오브젝트들의 경로 업데이트하기 | 지식에 대한 탐구

Maya에서 Arnold 렌더러를 사용할 때, StandIn 오브젝트의 경로를 일괄적으로 업데이트해야 하는 경우가 있습니다.
이 글에서는 Python 스크립트를 사용하여 이 작업을 자동화하는 방법을 단계별로 설명하겠습니다.

단계별 가이드

 

1단계: 필요한 모듈 설치

이 스크립트는 Maya의 내장 Python 환경을 사용하므로 추가 모듈 설치가 필요하지 않습니다. Maya에 기본적으로 포함된 `maya.cmds`와 Python 표준 라이브러리의 `os` 모듈만 사용합니다.

2단계: 스크립트 작성

Maya의 스크립트 편집기를 열어 다음 코드를 입력합니다:

import maya.cmds as cmds
import os

class ArnoldStandInPathCorrectorUI:
    def __init__(self):
        self.window_name = "arnoldStandInPathCorrectorUI"
        self.create_ui()
    
    def create_ui(self):
        # 이미 존재하는 창 삭제
        if cmds.window(self.window_name, exists=True):
            cmds.deleteUI(self.window_name)
        
        # 새 창 생성
        cmds.window(self.window_name, title="Arnold Stand-In Path Corrector", widthHeight=(400, 150))
        cmds.columnLayout(adjustableColumn=True, columnAttach=('both', 5))
        
        # UI 요소 추가
        cmds.text(label="New Path:")
        self.new_path_field = cmds.textField()
        cmds.button(label="Browse New Path", command=self.browse_new_path)
        cmds.button(label="Update Paths", command=self.update_paths)
        
        # 창 표시
        cmds.showWindow(self.window_name)
    
    def browse_new_path(self, *args):
        # 폴더 선택 다이얼로그 표시
        path = cmds.fileDialog2(fileMode=3, dialogStyle=2)
        if path and path[0]:
            cmds.textField(self.new_path_field, edit=True, text=path[0])
    
    def update_paths(self, *args):
        # 새 경로 가져오기
        new_path = cmds.textField(self.new_path_field, query=True, text=True)
        if not new_path:
            cmds.confirmDialog(title="Error", message="Please specify the new path.")
            return
        
        # 씬에서 모든 Arnold Stand-In 노드 찾기
        stand_in_nodes = cmds.ls(type="aiStandIn")
        
        updated_count = 0
        
        for node in stand_in_nodes:
            # 현재 .ass 파일 경로 가져오기
            current_path = cmds.getAttr(f"{node}.dso")
            
            if current_path and current_path.lower().endswith('.ass'):
                # 현재 경로에서 파일 이름 추출
                file_name = os.path.basename(current_path)
                
                # 새 파일 경로 생성
                new_file_path = os.path.join(new_path, file_name)
                
                # 새 경로로 속성 업데이트
                cmds.setAttr(f"{node}.dso", new_file_path, type="string")
                
                print(f"Updated: {node}")
                updated_count += 1
            else:
                print(f"Skipped: {node} (Not an .ass file or no path)")
        
        # 완료 메시지 표시
        cmds.confirmDialog(title="Complete", message=f"Total Arnold Stand-In nodes updated: {updated_count}")

# UI 생성 및 표시
ui = ArnoldStandInPathCorrectorUI()

 







 

3단계: 코드 실행

  1. Maya에서 스크립트 편집기를 엽니다 (Windows > General Editors > Script Editor).
  2. 위의 코드를 Python 탭에 붙여넣습니다.
  3. 코드를 선택하고 실행 버튼을 클릭합니다.

4단계: UI 사용하기

스크립트를 실행하면 “Arnold Stand-In Path Corrector” 창이 나타납니다:

  1. “Browse New Path” 버튼을 클릭하여 새로운 경로를 선택합니다.
  2. 선택한 경로가 텍스트 필드에 표시됩니다.
  3. “Update Paths” 버튼을 클릭하여 모든 Arnold Stand-In 오브젝트의 경로를 업데이트합니다.
  4. 프로세스가 완료되면 업데이트된 노드의 수를 보여주는 확인 창이 나타납니다.

코드 설명

 

이 스크립트는 다음과 같이 작동합니다:

  1. ArnoldStandInPathCorrectorUI 클래스를 정의하여 사용자 인터페이스를 생성합니다.
  2. create_ui 메소드에서 Maya 명령어를 사용하여 창과 UI 요소들을 생성합니다.
  3. browse_new_path 메소드는 폴더 선택 다이얼로그를 표시하고, 선택된 경로를 텍스트 필드에 설정합니다.
  4. update_paths 메소드는 실제 경로 업데이트 작업을 수행합니다:
    • 씬에서 모든 Arnold Stand-In 노드를 찾습니다.
    • 각 노드의 현재 .ass 파일 경로를 가져옵니다.
    • 새 경로와 원래 파일 이름을 조합하여 새 파일 경로를 만듭니다.
    • 노드의 ‘dso’ 속성을 새 경로로 업데이트합니다.
  5. 마지막으로, 업데이트된 노드의 수를 표시하는 확인 창을 보여줍니다.

이 스크립트를 사용하면 프로젝트의 파일 구조가 변경되었을 때 Arnold Stand-In 오브젝트의 경로를 쉽고 빠르게 업데이트할 수 있습니다.

© 2024 지식에 대한 탐구. All rights reserved.