마야의 힘을 깨워라: 몇 분 만에 나만의 셰이더 카운터 만들기!

마야의 힘을 깨워라: 몇 분 만에 나만의 셰이더 카운터 만들기! | 지식에 대한 탐구

당신의 마야 씬에 실제로 얼마나 많은 셰이더가 사용되고 있는지 궁금하셨나요? 마야 스크립팅의 세계에 빠져들어, 단 몇 줄의 코드로 셰이더를 세는 간단하면서도 강력한 도구를 만드는 방법을 알아보세요. 초보자와 전문가 모두에게 완벽한 튜토리얼입니다!

 

마야 스킬을 한 단계 업그레이드할 준비가 되셨나요? 이 튜토리얼에서는 Autodesk Maya용 맞춤형 셰이더 카운터 스크립트를 만드는 과정을 단계별로 안내해 드리겠습니다. 이 유용한 도구는 씬의 셰이더 수를 추적하는 데 도움을 주어, 프로젝트의 복잡성과 성능을 더 잘 제어할 수 있게 해줍니다. 시작해 볼까요?

목차

  1. 소개
  2. 사전 준비 사항
  3. 스크립트 설정하기
  4. 셰이더 카운팅 함수 만들기
  5. 사용자 인터페이스 구축하기
  6. 모두 합치기
  7. 마야에서 스크립트 실행하기
  8. 문제 해결 및 팁

 

1. 소개

복잡한 3D 씬에서 셰이더 수를 추적하는 것은 성능 최적화와 리소스 관리에 중요할 수 있습니다. 우리의 셰이더 카운터 스크립트는 마야 씬의 셰이더 수를 빠르고 쉽게 정확하게 세는 방법을 제공합니다.

 

2. 사전 준비 사항

시작하기 전에 다음 사항을 확인하세요:

  • Autodesk Maya 2022 이상 버전 설치
  • 기본적인 Python 프로그래밍 지식
  • 텍스트 에디터 (예: Notepad++, Visual Studio Code, 또는 Maya의 내장 Script Editor)

 

3. 스크립트 설정하기

필요한 모듈을 임포트하고 스크립트 구조를 설정하는 것부터 시작하겠습니다.

import maya.cmds as cmds
import maya.api.OpenMaya as om  # Maya 2022용 OpenMaya API

# 나중에 여기에 함수들을 추가할 예정입니다

if __name__ == "__main__":
    # 여기서 메인 함수를 호출할 예정입니다
    pass

이 설정에서:

  • maya.cmdscmds로 임포트합니다. 이는 Maya의 명령줄 함수에 접근할 수 있게 해줍니다.
  • maya.api.OpenMayaom으로 임포트합니다. 이는 더 고급 작업을 위한 Maya의 API에 접근할 수 있게 해줍니다.
  • if __name__ == "__main__": 블록은 스크립트가 직접 실행될 때만 실행되고, 모듈로 임포트될 때는 실행되지 않도록 합니다.

 

4. 셰이더 카운팅 함수 만들기

이제 스크립트의 핵심인 셰이더를 세는 함수를 만들어 보겠습니다.

def count_shaders():
    # 건너뛸 셰이더 이름 목록
    skip_shaders = ['lambert1', 'particleCloud1', 'shaderGlow1', 'standardSurface1']

    # 씬의 모든 셰이더 가져오기
    shaders = cmds.ls(materials=True)
    
    # skip_shaders에 없는 셰이더만 세기
    shader_count = sum(1 for shader in shaders if shader not in skip_shaders)

    return shader_count

이 함수를 자세히 살펴보겠습니다:

  1. 건너뛸 기본 셰이더 목록을 정의합니다. 이들은 일반적으로 Maya에 의해 자동으로 생성되며 사용자 정의 재질의 일부가 아닙니다.
  2. cmds.ls(materials=True)를 사용하여 씬의 모든 재질(셰이더) 목록을 가져옵니다.
  3. sum()과 리스트 컴프리헨션을 사용하여 skip_shaders 목록에 없는 셰이더의 수를 셉니다.
  4. 최종적으로 총 개수를 반환합니다.

 

5. 사용자 인터페이스 구축하기

스크립트를 사용자 친화적으로 만들기 위해, 결과를 팝업 창에 표시하는 함수를 만들어 보겠습니다.

def execute_shader_counter():
    try:
        total_shaders = count_shaders()
        
        # 팝업 창에 결과 표시
        cmds.confirmDialog(
            title="셰이더 카운터 결과",
            message=f"총 셰이더 수: {total_shaders}",
            button=["확인"],
            defaultButton="확인",
            cancelButton="확인",
            dismissString="확인"
        )

        # 스크립트 에디터에도 결과 표시
        om.MGlobal.displayInfo(f"총 셰이더 수: {total_shaders}")
        
    except Exception as e:
        om.MGlobal.displayError(f"오류 발생: {str(e)}")

이 함수는:

  1. count_shaders() 함수를 호출하여 총 개수를 가져옵니다.
  2. cmds.confirmDialog()를 사용하여 결과를 보여주는 팝업 창을 만듭니다.
  3. om.MGlobal.displayInfo()를 사용하여 Maya의 스크립트 에디터에도 결과를 출력합니다.
  4. 발생할 수 있는 예외를 잡아 표시하는 오류 처리를 포함합니다.

 

6. 모두 합치기

이제 모든 코드를 하나의 완전한 스크립트로 합쳐 보겠습니다:

import maya.cmds as cmds
import maya.api.OpenMaya as om  # Maya 2022용 OpenMaya API

def count_shaders():
    # 건너뛸 셰이더 이름 목록
    skip_shaders = ['lambert1', 'particleCloud1', 'shaderGlow1', 'standardSurface1']

    # 씬의 모든 셰이더 가져오기
    shaders = cmds.ls(materials=True)
    
    # skip_shaders에 없는 셰이더만 세기
    shader_count = sum(1 for shader in shaders if shader not in skip_shaders)

    return shader_count

def execute_shader_counter():
    try:
        total_shaders = count_shaders()
        
        # 팝업 창에 결과 표시
        cmds.confirmDialog(
            title="셰이더 카운터 결과",
            message=f"총 셰이더 수: {total_shaders}",
            button=["확인"],
            defaultButton="확인",
            cancelButton="확인",
            dismissString="확인"
        )

        # 스크립트 에디터에도 결과 표시
        om.MGlobal.displayInfo(f"총 셰이더 수: {total_shaders}")
        
    except Exception as e:
        om.MGlobal.displayError(f"오류 발생: {str(e)}")

if __name__ == "__main__":
    execute_shader_counter()

 







 

7. 마야에서 스크립트 실행하기

Maya에서 이 스크립트를 실행하는 방법:

  1. Maya를 열고 새 씬을 만들거나 기존 씬을 엽니다.
  2. 스크립트 에디터를 엽니다 (Windows > General Editors > Script Editor).
  3. 스크립트 에디터에서 새 Python 탭을 만듭니다.
  4. 전체 스크립트를 Python 탭에 복사하여 붙여넣습니다.
  5. “Execute” 버튼을 클릭하거나 Ctrl+Enter (Mac에서는 Cmd+Enter)를 눌러 스크립트를 실행합니다.

총 셰이더 수가 표시된 팝업 창이 나타나고, 같은 정보가 스크립트 에디터의 출력 창에 출력될 것입니다.

 

8. 문제 해결 및 팁

  • 모듈이 없다는 오류가 발생하면 Maya 2022 이상 버전을 사용하고 있는지 확인하세요. 이 스크립트는 새로운 OpenMaya API를 사용합니다.
  • 건너뛸 셰이더 목록을 사용자 정의하려면 count_shaders() 함수의 skip_shaders 리스트를 수정하세요.
  • 대규모씬에서는 스크립트 실행에 시간이 걸릴 수 있습니다. 기다려 주세요!
  • 이 스크립트를 자주 실행하려면 Maya의 선반 버튼에 추가하여 쉽게 접근할 수 있도록 하세요.

 

전체 코드

파일명: maya_shader_counter.py

import maya.cmds as cmds
import maya.api.OpenMaya as om  # Maya 2022용 OpenMaya API

def count_shaders():
    # 건너뛸 셰이더 이름 목록
    skip_shaders = ['lambert1', 'particleCloud1', 'shaderGlow1', 'standardSurface1']

    # 씬의 모든 셰이더 가져오기
    shaders = cmds.ls(materials=True)
    
    # skip_shaders에 없는 셰이더만 세기
    shader_count = sum(1 for shader in shaders if shader not in skip_shaders)

    return shader_count

def execute_shader_counter():
    try:
        total_shaders = count_shaders()
        
        # 팝업 창에 결과 표시
        cmds.confirmDialog(
            title="셰이더 카운터 결과",
            message=f"총 셰이더 수: {total_shaders}",
            button=["확인"],
            defaultButton="확인",
            cancelButton="확인",
            dismissString="확인"
        )

        # 스크립트 에디터에도 결과 표시
        om.MGlobal.displayInfo(f"총 셰이더 수: {total_shaders}")
        
    except Exception as e:
        om.MGlobal.displayError(f"오류 발생: {str(e)}")

if __name__ == "__main__":
    execute_shader_counter()