Maya와 Arnold 렌더러를 사용하는 3D 아티스트들은 종종 StandIn 오브젝트의 경로를 일괄적으로 업데이트해야 하는 상황에 직면합니다. 이 글에서는 Python 스크립트를 사용하여 선택한 Arnold StandIn 오브젝트의 경로를 효율적으로 업데이트하는 방법을 단계별로 설명하겠습니다.
단계별 가이드
1단계: 필요한 모듈 준비
이 스크립트는 Maya의 내장 Python 환경을 사용하므로 추가 모듈 설치가 필요하지 않습니다. Maya에 기본적으로 포함된 `maya.cmds`와 Python 표준 라이브러리의 `os` 모듈만 사용합니다.
2단계: 스크립트 작성
Maya의 스크립트 편집기를 열어 다음 코드를 입력합니다:
import maya.cmds as cmds
import os
class SelectedArnoldStandInPathCorrectorUI:
def __init__(self):
self.window_name = "selectedArnoldStandInPathCorrectorUI"
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="Selected Arnold Stand-In Path Corrector", widthHeight=(400, 180))
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.separator(height=10, style='in')
self.selected_nodes_text = cmds.text(label="Selected Stand-In nodes: 0")
cmds.button(label="Refresh Selection", command=self.refresh_selection)
cmds.separator(height=10, style='in')
cmds.button(label="Update Paths", command=self.update_paths)
# 창 표시
cmds.showWindow(self.window_name)
self.refresh_selection()
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 get_stand_in_nodes(self, selected_nodes):
stand_in_nodes = []
for node in selected_nodes:
if cmds.nodeType(node) == "aiStandIn":
stand_in_nodes.append(node)
elif cmds.nodeType(node) == "transform":
shapes = cmds.listRelatives(node, shapes=True, type="aiStandIn") or []
stand_in_nodes.extend(shapes)
return stand_in_nodes
def refresh_selection(self, *args):
# 선택된 노드 갱신
selected_nodes = cmds.ls(selection=True, long=True)
self.selected_stand_ins = self.get_stand_in_nodes(selected_nodes)
cmds.text(self.selected_nodes_text, edit=True, label=f"Selected Stand-In nodes: {len(self.selected_stand_ins)}")
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
if not self.selected_stand_ins:
cmds.confirmDialog(title="Error", message="No Arnold Stand-In nodes selected.")
return
updated_count = 0
for node in self.selected_stand_ins:
# 현재 .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}")
self.refresh_selection()
# UI 생성 및 표시
ui = SelectedArnoldStandInPathCorrectorUI()
3단계: 코드 실행
- Maya를 실행합니다.
- 스크립트 편집기를 엽니다 (Windows > General Editors > Script Editor).
- Python 탭을 선택합니다.
- 위의 코드를 Python 탭에 붙여넣습니다.
- 코드를 선택하고 실행 버튼을 클릭합니다.
4단계: UI 사용하기
스크립트를 실행하면 “Selected Arnold Stand-In Path Corrector” 창이 나타납니다:
- Maya 씬에서 경로를 업데이트하고 싶은 Arnold StandIn 오브젝트들을 선택합니다.
- “Refresh Selection” 버튼을 클릭하여 선택된 StandIn 노드의 수를 확인합니다.
- “Browse New Path” 버튼을 클릭하여 새로운 경로를 선택합니다.
- 선택한 경로가 텍스트 필드에 표시됩니다.
- “Update Paths” 버튼을 클릭하여 선택된 Arnold Stand-In 오브젝트의 경로를 업데이트합니다.
- 프로세스가 완료되면 업데이트된 노드의 수를 보여주는 확인 창이 나타납니다.
코드 설명
이 스크립트는 다음과 같이 작동합니다:
SelectedArnoldStandInPathCorrectorUI클래스를 정의하여 사용자 인터페이스를 생성합니다.create_ui메소드에서 Maya 명령어를 사용하여 창과 UI 요소들을 생성합니다.browse_new_path메소드는 폴더 선택 다이얼로그를 표시하고, 선택된 경로를 텍스트 필드에 설정합니다.get_stand_in_nodes메소드는 선택된 노드 중 Arnold StandIn 노드를 찾아 반환합니다.refresh_selection메소드는 현재 선택된 StandIn 노드의 수를 업데이트합니다.update_paths메소드는 실제 경로 업데이트 작업을 수행합니다:- 새 경로를 가져옵니다.
- 선택된 각 StandIn 노드의 현재 .ass 파일 경로를 가져옵니다.
- 새 경로와 원래 파일 이름을 조합하여 새 파일 경로를 만듭니다.
- 노드의 ‘dso’ 속성을 새 경로로 업데이트합니다.
- 마지막으로, 업데이트된 노드의 수를 표시하는 확인 창을 보여줍니다.
이 스크립트를 사용하면 프로젝트의 파일 구조가 변경되었을 때 선택한 Arnold Stand-In 오브젝트의 경로를 쉽고 빠르게 업데이트할 수 있습니다. 이는 특히 큰 규모의 프로젝트에서 파일 관리와 워크플로우 최적화에 매우 유용합니다.
주의사항
- 이 스크립트를 실행하기 전에 반드시 작업 중인 Maya 씬의 백업을 만들어두세요.
- 경로를 업데이트하기 전에 새 경로에 필요한 .ass 파일들이 실제로 존재하는지 확인하세요.
- 대규모 씬에서는 많은 수의 StandIn 노드를 업데이트하는 데 시간이 걸릴 수 있으므로 인내심을 가지고 기다려주세요.
추가 팁
- 이 스크립트를 Maya의 셸프(Shelf)에 추가하면 더 쉽게 접근할 수 있습니다.
- 프로젝트의 요구사항에 맞게 스크립트를 수정하거나 확장할 수 있습니다. 예를 들어, 특정 이름 패턴을 가진 StandIn 노드만 업데이트하는 기능을 추가할 수 있습니다.
- 에러 처리를 더 강화하여 스크립트의 안정성을 높일 수 있습니다.
이 Python 스크립트를 사용하면 Maya에서 Arnold StandIn 오브젝트의 경로를 효율적으로 관리할 수 있습니다. 특히 대규모 프로젝트나 복잡한 씬에서 작업할 때 시간을 크게 절약할 수 있습니다. Python과 Maya API에 대해 더 깊이 이해하게 되면, 여러분의 워크플로우를 더욱 효율적으로 만들 수 있는 다양한 스크립트를 개발할 수 있을 것입니다.