이 블로그 글에서는 Maya를 사용하여 VRayMtl 쉐이더 속성을 수집하고 이 정보를 CSV 파일로 내보내는 방법을 소개합니다. 이를 통해 3D 아티스트들은 씬 내의 머티리얼 데이터를 분석하고 공유할 수 있습니다. 이 스크립트는 WebGL 또는 다른 3D 그래픽 환경에서 사용하기 위해 엑셀 파일로 쉽게 변환할 수 있는 데이터를 생성하는 데 도움을 줍니다.
1. Python 및 필수 패키지 설치
우선, Python 및 필요한 패키지를 설치해야 합니다.
Python 설치
- Python 3.9.7 버전을 다운로드 및 설치하세요. Python 공식 웹사이트에서 다운로드할 수 있습니다.
설치 중 “Add Python X.Y to PATH” 옵션을 반드시 선택하세요.
openpyxl 및 et_xmlfile 패키지 설치
cmd명령 프롬프트를 열고 다음 명령을 실행하여openpyxl및et-xmlfile패키지를 설치하세요.
pip install openpyxl
pip install et-xmlfile
************************
openpyxl 및 et-xmlfile 패키지 역할 설명
openpyxl와 et-xmlfile 패키지는 Python에서 엑셀 파일을 다루기 위한 라이브러리입니다. 각각의 역할과 주요 기능에 대한 설명은 다음과 같습니다:
1. openpyxl
- 엑셀 파일 작성 및 편집: openpyxl은 엑셀 파일을 생성하고, 기존 엑셀 파일을 열어서 편집할 수 있는 기능을 제공합니다.
- 시트 및 행/열 조작: 엑셀 파일 내의 시트를 생성, 선택하고, 행과 열을 추가, 삭제, 수정할 수 있습니다.
- 셀 값 설정: 셀에 텍스트, 숫자, 날짜 및 다른 데이터 유형을 설정하고, 셀 서식을 지정할 수 있습니다.
- 수식 계산: 엑셀 파일 내의 수식을 계산하고 결과를 얻을 수 있습니다.
- 차트 생성: 그래프와 차트를 생성하고 엑셀 시트에 삽입할 수 있습니다.
- 데이터 필터링: 데이터를 필터링하고 정렬하는 기능을 지원합니다.
- 엑셀 파일 저장 및 로드: 작업한 엑셀 파일을 저장하고, 나중에 로드하여 변경할 수 있습니다.
2. et-xmlfile
- XML 파일 처리: et-xmlfile은 XML 파일을 읽고 쓰기 위한 라이브러리로, openpyxl과 함께 사용되어 엑셀 파일을 구문 분석하고 생성하는 데 필요합니다.
- ZIP 파일 처리: et-xmlfile은 엑셀 파일이 내부적으로 ZIP 아카이브 형식으로 구성되어 있으므로, ZIP 파일을 처리하는 데 사용됩니다. 이를 통해 엑셀 파일 내의 여러 시트, 셀, 스타일, 이미지 등을 효율적으로 관리할 수 있습니다.
- XML 스타일링: et-xmlfile은 XML 파일의 스타일과 서식을 다루는 데 필요한 도구를 제공합니다. 이를 통해 엑셀 파일의 셀 스타일, 글꼴, 색상 등을 정확하게 조절할 수 있습니다.
이러한 패키지들은 엑셀 파일을 생성, 수정, 분석하는 데 매우 유용하며, 데이터 분석, 보고서 작성 및 엑셀 파일 생성 등 다양한 엑셀 관련 작업을 자동화하는 데 활용됩니다.
3. 스크립트 작성
이제 마야에서 사용할 스크립트를 작성해야 합니다. 이 스크립트를 사용하여 VRayMtl 쉐이더 속성을 수집하고 CSV 파일로 저장할 것입니다. 아래의 코드를 스크립트 에디터에 복사하여 붙여넣어주세요.
# Copyright (c) ChungMinjae. All rights reserved.
# 이 코드의 저작권은 ChungMinjae에게 속합니다.
# 이 코드 또는 이 코드의 일부를 복제, 수정, 배포는 마음껏 하시되, 상업적으로 이용하는 것은 허용되지 않습니다.
import maya.cmds as cmds
import os
import csv
def get_vray_shader_properties_csv_transposed():
# 현재 Maya 파일 이름과 경로를 가져옵니다.
current_file = cmds.file(query=True, sceneName=True)
file_path, file_name = os.path.split(current_file)
file_name_without_ext = os.path.splitext(file_name)[0]
# 결과를 저장할 CSV 파일을 준비합니다.
output_file_path = os.path.join(file_path, f"{file_name_without_ext}_shader_properties.csv")
# 속성 데이터를 수집합니다.
data = []
headers = ['Shader', 'Reflectivity', 'Roughness', 'Metalness', 'SpecularIntensity', 'IOR', 'Sheen', 'SheenRoughness', 'SheenColor', 'Transmission']
data.append(headers)
# VRayMtl 쉐이더 유형을 가진 모든 머티리얼에 대한 정보를 수집합니다.
shaders = cmds.ls(materials=True, type="VRayMtl")
for shader in shaders:
try:
reflectivity = round(cmds.getAttr(f"{shader}.reflectionColorAmount"), 3)
roughness = round(1 - cmds.getAttr(f"{shader}.reflectionGlossiness"), 3)
metalness = round(cmds.getAttr(f"{shader}.metalness"), 3)
specularIntensity = 1.0 # 고정 값
ior = round(cmds.getAttr(f"{shader}.refractionIOR"), 3)
sheen = round(cmds.getAttr(f"{shader}.sheenColorAmount"), 3)
sheenRoughness = round(1 - cmds.getAttr(f"{shader}.sheenGlossiness"), 3)
sheenColor = rgb_to_hex(cmds.getAttr(f"{shader}.sheenColor"))
transmission = round(cmds.getAttr(f"{shader}.refractionColorAmount"), 3)
# 각 쉐이더의 속성을 리스트에 추가합니다.
shader_data = [shader, reflectivity, roughness, metalness, specularIntensity, ior, sheen, sheenRoughness, sheenColor, transmission]
data.append(shader_data)
except ValueError:
pass
# 데이터를 전치합니다.
transposed_data = zip(*data)
# 전치된 데이터를 CSV 파일에 작성합니다.
with open(output_file_path, mode='w', newline='') as file:
writer = csv.writer(file)
for row in transposed_data:
writer.writerow(row)
def rgb_to_hex(rgb):
# RGB 값을 16진수로 변환하는 함수입니다.
if isinstance(rgb, tuple) and len(rgb) == 3:
return '0x{:02x}{:02x}{:02x}'.format(int(rgb[0]*255), int(rgb[1]*255), int(rgb[2]*255))
else:
return '0x000000' # 잘못된 값이 제공된 경우 기본 검정색 반환
# 함수 호출하여 실행합니다.
get_vray_shader_properties_csv_transposed()
4. 필요한 패키지 폴더 복사
스크립트가 실행될 때 필요한 패키지 폴더를 복사해야 합니다. 이것을 수행하려면 다음 단계를 따르세요.
C:\Users\사용자이름\Documents\maya\마야버전폴더\scripts\site-packages폴더를 엽니다.- 이 폴더에서
C:\Users\사용자이름\AppData\Local\Programs\Python\Python39\Lib\site-packages폴더로 이동합니다. openpyxl및et-xmlfile폴더를 복사하여site-packages폴더로 붙여넣습니다.
5. 스크립트를 shelves에 추가
이제 스크립트를 쉽게 실행하기 위해 Maya shelves에 추가하겠습니다.
- 마야 상단 메뉴에서
Window>Shelf Editor를 선택하여 Shelf Editor를 엽니다. - 원하는 쉘프(Shelf)를 선택하거나 새로운 쉘프를 생성합니다.
- 쉘프 툴바의
New버튼을 클릭하여 새로운 아이콘을 만듭니다. 원하는 아이콘 이미지를 선택할 수 있습니다. - 쉘프에 추가할 명령을 정의하기 위해 새로 생성한 아이콘을 선택한 후
Command필드에 다음 코드를 입력합니다.
import maya.cmds as cmds
def run_vray_shader_properties_script():
# 위에서 작성한 스크립트를 호출하는 함수입니다.
exec(open("경로/스크립트파일.py").read())
run_vray_shader_properties_script()
경로/스크립트파일.py 부분을 작성한 스크립트 파일의 실제 경로로 변경합니다.
- 쉘프 툴바의
Save All Shelves버튼을 클릭하여 쉘프를 저장합니다.
6. 스크립트 실행
스크립트를 실행하기 위해 쉘프에서 아이콘을 클릭합니다. 스크립트가 실행되면 CSV 파일이 마야 파일이 있는 폴더에 저장됩니다.
7. CSV 파일 확인
스크립트가 실행된 후, CSV 파일을 확인하려면 파일 탐색기를 열고 마야 파일이 있는 폴더로 이동하세요. 그곳에 마야파일명_shader_properties.csv라는 이름의 CSV 파일이 생성된 것을 확인할 수 있습니다.