|
Python for Maya - 1. 시작
Digital Dream ( http://cafe.naver.com/digitaldream ) 카페의 'Maya Python 시작하기'의
기반으로 복습하는 차원에서 재정리한 것입니다.
Maya 8.0부터 지원하게 된 python이 Maya를 더욱 강력한 기능을 발휘할 수 있다는 것에 최근들어 관심받게 되었지만 테크니컬 엔지니어가 사용할만한 것이 3D 아티스트를 하는 유저들은 프로그래밍에 대해 전무 할뿐더러 배우기가 싶지 않다. (MEL도 힘든데 말이다. 젠장..-_-+)
Maya script를 제어했던 mel은 c언어와 유사하지만 한계가 있었던 것을 극복할 수 있는게 Python이라 하겠다.
여러 툴들이 Python을 입양하면서 유저가 직접 plug-in을 제작하여 작업에 효율성을 높일 수 있게 되었다. 얏호~*
( plug-in 샘플 위치 C:/Program Files/Autodesk/Maya2008/devkit/plug-ins/scripted )
maya에서 python을 시작해 보자.
Script Editor 창을 열면 MEL과 Python 탭이 구분되어 있다.
Python 탭에서
1+1를 입력 후 ctrl + enter나 키패드의 enter 키, 위에 플레이 버튼 을 눌러보자.
1+1 # Result: 2 #1+1의 결과값 2가 바로 출력되었다.
python이 명령어를 실행하자 마자 결과값을 출력하는 interpreter형 언어이기 때문이다.
(interpreter언어의 종류에는 Basic, QBasic, VisualBasic 등이 있다.)
MEL 탭에서 다시
1+1을 입력하여 ctrl+enter나 키패드에 있는 enter키를 누르면..
1+1 // Error: 1+1 // // Error: Syntax error //문법 에러가 나게 된다. 즉 c언어와 비슷한 MEL과 Python언어는 완전 다른 언어이기에 mel을 다룰줄 안다고 해도 python을 기초부터 배워야 한다는 얘기이다. -_-;;;)
굳이 MEL에서 출력하고자 한다면..
$temp = 1 + 1; print $temp; // 2 //$temp라는 변수에 1 + 1인 2를 넣게 되고, $temp 변수를 출력하는 것이다. (mel의 명령어의 끝인 말하는 ;(세미콜론)을 꼭 붙어야 한다.)
같은 구분으로 다시 Python에 실행해보자.
temp = 1 + 1 print temp # 2mel에서 변수 설정은 $ 기호 뒤에 영문자, _(언더바), 숫자가 오지만 python에선 변수 앞에 아무것도 적지 않는다.
python의 변수명은 영문자, _(언더바), 숫자를 사용할 수 있고 소, 대문자를 구분하여 사용하며(test와 Test는 다른 변수), 예약어는 사용할 수 없다. (예약어는 print와 같은 python에 기본으로 사용하는 명령어를 말하는 것이다.)
다음은 한글을 출력하기 위한 unicode를 사용하기.
print u'문자열' #또는 print u"문자열" print u'파이썬 인 마야' # 파이썬 인 마야print u는 maya python에서만 사용되고 만약 u붙이지 않을 경우 오류가 난다.
mel에서의 한글 사용은 그냥 print "문자열"만 사용하면 한글을 출력할 수 있다.
mel에서는 ' '(작은따옴표)는 사용할 수 없고 " "(큰따옴표)만 사용한다.
print "파이썬 인 마야"; 파이썬 인 마야다음으로 import 명령을 이용한 모듈을 불러오게 된다.
모듈(module)이라는 것은 명령어의 집합체라고 생각하면 된다.
import sys print sys.path ['C:/Program Files/Autodesk/Maya2008/bin', 'C:/Program Files/Autodesk/Maya2008/bin/python25.zip', 'C:/Program Files/Autodesk/Maya2008/Python/DLLs', 'C:/Program Files/Autodesk/Maya2008/Python/lib', 'C:/Program Files/Autodesk/Maya2008/Python/lib/plat-win', 'C:/Program Files/Autodesk/Maya2008/Python/lib/lib-tk', 'C:/Program Files/Autodesk/Maya2008/bin', 'C:/Program Files/Autodesk/Maya2008/Python', 'C:/Program Files/Autodesk/Maya2008/Python/lib/site-packages', u'C:/Documents and Settings/Administrator/My Documents/maya/2008/prefs/scripts', u'C:/Documents and Settings/Administrator/My Documents/maya/2008/scripts/', u'C:/Documents and Settings/Administrator/My Documents/maya/scripts']sys은 system에 관련된 명령어를 가진 모듈이다.
sys.path 는 python의 system path 환경 변수이다. 따라서 출력된 path 들은 python 의 모듈이 있거나 python 에 관련된 명령들이 있는 folder 들의 목록이다. 그러므로 출력된 path에 제작된 모듈을 넣으면 python 이 import로 불어 들올 수 있게 된다.
dir(sys) # Result: ['__displayhook__', '__doc__', '__excepthook__', '__name__', '__stderr__', '__stdin__', '__stdout__', '_current_frames', '_getframe', 'api_version', 'argv', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dllhandle', 'exc_clear', 'exc_info', 'exc_type', 'excepthook', 'exec_prefix', 'executable', 'exit', 'exitfunc', 'getcheckinterval', 'getdefaultencoding', 'getfilesystemencoding', 'getrecursionlimit', 'getrefcount', 'getwindowsversion', 'hexversion', 'maxint', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'setcheckinterval', 'setprofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 'version', 'version_info', 'warnoptions', 'winver'] #
dir() 함수를 사용하여 sys 모듈 안에 함수가 무엇이 있는지 알 수 있다. 위에서 사용한 path가 보인다.
모듈에 어떤 함수나 변수가 정의되어 있는지, 클래스에 어떤 메쏘드를 활용할 수 있는지 등의 정보를 리스트를 통하여 조회할 수 있다.
다음은 선택된 object를 list에 넣는 것을 알아보겠다.
nurbsSphere를 3개 만들고 선택한 후
import maya.cmds as cmd print cmd.ls( selection=True ) [u′nurbsSphere1′, u′nurbsSphere2′, u′nurbsSphere3′]선택된 object명이 list로 들어가 있는 것을 알 수 있다.
maya.cmds 클래스 또는 모듈을 사용자 변수인 cmd로 지정하여 import한다.
즉, maya 명령어를 사용할 수 있도록 import하고 maya.cmds 길어 cmd로 줄여서 사용하게 된다는 것이다.
또, 한번 import 하였으므로 계속 사용이 가능하다.
cmd.ls 명령(mel의 ls과 같다.)으로 선택된 object를 출력하게 된다.
import maya.cmds as m print m.ls( selection=True ) [u′nurbsSphere1′, u′nurbsSphere2′, u′nurbsSphere3′]cmd를 m으로 사용해도 결과는 같게 된다.
cmd.ls( selection=True ) # Result: [u'nurbsSphere1', u'nurbsSphere2', u'nurbsSphere3'] #print 명령 없이도 출력이 가능하게 된다.
하지만..
import maya.cmds as cmd cmd.ls( selection=True )이렇게 하면 출력되지 않고,
cmd.ls( selection=True ) cmd.ls( selection=True )이렇게 해도 출력되지 않는다.
이유는 '사용자의 편의를 위해서 1 줄 짜리 명령은 python idle 를 사용 하는 것과 같은 consol shell 과 같은 방식으로 실행됩니다.'라고 한다. (아직 이해가 되질 않는다. -_-;;)
mel로는..
ls -sl; // Result: nurbsSphere1 nurbsSphere2 nurbsSphere3 //
와 같다. 하지만 단지 object 선택된 것이 출력만 해줄뿐 아무 기능을 하지 못한다.
mel에는 list 개념이 없고, 배열(array)을 사용하여 데이터화해야 한다.
─────────────────────────────────────────────────
source : http://cafe.naver.com/digitaldream/423 - 'Maya Python 시작하기' 1) 시작
번호 | 제목 | 글쓴이 | 조회 | 날짜 |
---|---|---|---|---|
마야 뷰포트 네비게이션 팁 | 푸딩뱃살 | 42791 | 2020.04.06 17:22 | |
Maya 버전 별 Python 버전 | 푸딩뱃살 | 64100 | 2014.01.08 17:59 | |
104 | [Script] Python for Maya - 2. select (선택) | artsOne | 5020 | 2008.02.20 23:18 |
>> | [Script] Python for Maya - 1. 시작 | artsOne | 5816 | 2008.02.19 13:45 |
102 | [참고] Simulating Musculature in Maya | artsOne | 3011 | 2008.02.17 18:41 |
101 | [Script] MEL - checkBox | artsone | 3306 | 2008.02.11 02:49 |
100 | [Script] 연산자(Operator) 정의 | artsone | 2473 | 2008.02.09 18:17 |
99 | [Script] 변수(Varialbe) 정의 | artsone | 2385 | 2008.02.02 19:00 |
98 | [Script] [스크랩] Expressions to scale, rotate and spin by Aziz Khan | artsone | 2736 | 2008.01.31 03:36 |
97 | [Base] 속성(Attribute) 정의 | artsone | 2029 | 2008.01.29 22:39 |
96 | [Script] MEL - 이동 제어문 return | artsone | 3192 | 2008.01.28 21:48 |
95 | [Script] MEL - 이동 제어문 continue | artsone | 3111 | 2008.01.28 21:17 |
94 | [Script] MEL - 이동 제어문 break | artsone | 3326 | 2008.01.28 21:01 |
93 | [Script] MEL - 반복 제어문 for | artsone | 3446 | 2008.01.25 21:12 |
92 | [Script] MEL - 반복 제어문 for-in | artsone | 3297 | 2008.01.28 22:39 |
91 | [Script] MEL - 반복 제어문 do-while | artsone | 2842 | 2008.01.25 20:58 |
90 | [Script] MEL - 반복 제어문 while | artsone | 3126 | 2008.01.23 23:46 |
89 | [Script] MEL - 조건 제어문 ?: | artsone | 3076 | 2008.01.23 23:12 |
88 | [Script] MEL - 조건 제어문 switch | artsone | 3140 | 2008.01.23 22:50 |
87 | [Script] MEL - 조건 제어문 if | artsone | 3904 | 2008.01.21 01:23 |
86 | [Script] Expression - rand | artsone | 2406 | 2008.01.20 23:43 |
85 | [Rendering] [스크랩] Maya software render에서 그림자에도 motion blur적용하는 방법 | artsone | 4700 | 2008.01.15 17:35 |