회원 로그인
정보기억 정보기억에 체크할 경우 다음접속시 아이디와 패스워드를 입력하지 않으셔도 됩니다.
그러나, 개인PC가 아닐 경우 타인이 로그인할 수 있습니다.
PC를 여러사람이 사용하는 공공장소에서는 체크하지 마세요.
소셜네트워크 서비스를 통해서 로그인하시면 별도의 로그인 절차없이 회원서비스를 이용하실 수 있습니다.


최근 게시물

1.노션에서 작성 중

1.노션에서 작성 중

개편하기 전까지 노션에서 작성 중

2024.04.04//read more

2.ChatGPT

2.ChatGPT

OpenAI로 대규모 언어 모델대화형...

2023.03.16//read more

3.노코딩 게임 엔진 - 빌..

3.노코딩 게임 엔진 - 빌..

빌드 지원안드로이드iOS윈도우즈특이사...

2023.03.14//read more

4.(완료) 미접속 회원 정..

4.(완료) 미접속 회원 정..

[완료] 36명의 회원을 정리하였습니...

2023.02.16//read more

5.매뉴얼 플러스 - 전자제..



안정적인 DNS 서비스 DNSEver
DNS Powered by DNSEver.com


Python for Maya - 1. 시작

artsOne | 2008.02.19 13:45 | 조회 5815

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
# 2
mel에서 변수 설정은 $ 기호 뒤에 영문자, _(언더바), 숫자가 오지만 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) 시작

466개(19/24페이지)
마야
번호 제목 글쓴이 조회 날짜
공지 마야 뷰포트 네비게이션 팁 푸딩뱃살 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