|
Python for Maya - 13. realtime lattice point random move (expression)
기반으로 복습하는 차원에서 재정리한 것입니다.
nurbs sphere에 lattice에 맴도는 키를 넣고, lattice와 nurbs sphere를 선택하고 script를 적용한다.
플레이를 해보면 nurbs sphere안에 들어간 lattice point들이 random으로 이동하게 된다.
<첨부 파일 mayaPython13.swf 참고>
* Code
# coding: utf-8 # Python for Maya - 13. realtime lattice point random move (expression) # date : 2009.04.30 import maya.cmds as cmds import random sel_ = cmds.ls(sl=1) if len(sel_) == 2: if cmds.nodeType(cmds.listHistory(sel_[0], lv=1)[0]) == 'lattice' and 'nurbsSphere' in (cmds.listHistory(sel_[1], lv=1)[0]): shape_ = cmds.listHistory(sel_[0], lv=1)[0] # lattice 정보 s_count = cmds.getAttr('%s.sd' % shape_) t_count = cmds.getAttr('%s.td' % shape_) u_count = cmds.getAttr('%s.ud' % shape_) nsp_ = cmds.listHistory(sel_[1], lv=1)[1] # expression에 넣기 위해 expr_ 변수에 넣는다. # nurbs sphere의 위치 정보 expr_ = 'vector $sp_pos = `xform -q -ws -t nurbsSphere1`;n' # 크기 정보 expr_ += 'float $radius_ = %s.radius * %s.scaleX;n' % (nsp_, sel_[1]) for s_ in range(s_count): for t_ in range(t_count): for u_ in range(u_count): # lattice 정보 lpos_ = cmds.xform('%s.pt[%s][%s][%s]' % (sel_[0], s_, t_, u_), q=1, ws=1, t=1) # lattice 정보를 정열 sort_ = "%s%s%s" % (s_, t_, u_) # expression 설정 # mag() 함수로 lattice 정보의 거리를 젠다. expr_ += 'float $dis_ = `mag($sp_pos - 〈<%s, %s, %s>>)`;n' % tuple(lpos_) #sphere의 안쪽과 바깥쪽에 움직이는 폭을 조절해서 sphere가 움직이면서 안과 밖에 부드럽게 해주기 위해 width_변수에 넣어준다. expr_ += 'float $width_ = (1 - ($dis_ / $radius_)) * %s.radius * %s.scaleY;n' % (nsp_, sel_[1]) expr_ += 'if ($dis_ < $radius_)n' expr_ += ''' { # 안밖 부드럽게 move 되기 위해 값을 넣어줌 move (%s + (noise((time + %s + 10) * 2) * $width_)) (%s + (noise((time + %s + 20) * 2) * $width_)) (%s + (noise((time + %s + 30) * 2) * $width_)) %s.pt[%s][%s][%s]; }n''' %(lpos_[0], sort_, lpos_[1], sort_, lpos_[2], sort_, sel_[0], s_, t_, u_) expr_ += ''' else { move %s %s %s %s.pt[%s][%s][%s]; }n''' % (lpos_[0], lpos_[1], lpos_[2], sel_[0], s_, t_, u_) # expression에 대입 cmds.expression(s=expr_, n="lattice_random_move")
* Comment
이미 다룬 '12) sphere를 이용한 random move'를 expression에 넣어 실시간으로 적용하는 코드이다.
12)의 코드를 expression에 넣었을 뿐이다.
{'''
move (%s + (noise((time + %s + 10) * 2) * $width_))
(%s + (noise((time + %s + 20) * 2) * $width_))
(%s + (noise((time + %s + 30) * 2) * $width_))
%s.pt[%s][%s][%s];
}n''' % (lpos_[0], sort_, lpos_[1], sort_, lpos_[2], sort_, sel_[0], s_, t_, u_)
noise()함수가 seed값에 따라 순차적인 random값을 반환하는 특징이 있다 한다.
그래서, seed값에 time을 대입하여 움직이는 random값의 변화가 순차적으로 나타나게 된다.
sort_ 값을 더해준 이유는 같은 seed값에는 같은 결과가 나오기 때문에 seed에 각각 다른 변화를 주기 위해 임의적으로 다른 숫자를 대입한 것이다.
──────────────────────────────────────────────────
source : http://cafe.naver.com/digitaldream/497
'Maya Python' 13) realtime lattice point random move(실시간 난리난 모양)
* artsOne님에 의해서 게시물 이동되었습니다 (2009-05-01 01:05)
- maya_python13.py (1.7KB) (0)
- mayaPython13.swf (1.1MB) (1)
번호 | 제목 | 글쓴이 | 조회 | 날짜 |
---|---|---|---|---|
마야 뷰포트 네비게이션 팁 | 푸딩뱃살 | 43899 | 2020.04.06 17:22 | |
Maya 버전 별 Python 버전 | 푸딩뱃살 | 65076 | 2014.01.08 17:59 | |
144 | [참고] Maya Online Help | artsOne | 3396 | 2009.08.11 01:02 |
143 | [참고] Maya 2009 Service Pack 1a | artsOne | 3611 | 2009.07.20 12:22 |
142 | [Script] Python for Maya - 14. Expression에서 python 사용 | artsOne | 5395 | 2009.05.11 17:57 |
>> | [Script] Python for Maya - 13. realtime lattice point random move | artsOne | 5094 | 2009.05.01 00:58 |
140 | [Script] Python for Maya - 12. sphere를 이용한 random move | artsOne | 4694 | 2009.04.22 00:26 |
139 | [Script] Python for Maya - 11. Lattice vertex random move (re.fin | artsOne | 5259 | 2009.04.17 12:12 |
138 | [Rigging] Expression을 이용한 Flollow Through | artsOne | 2672 | 2009.04.14 20:24 |
137 | [Script] MEL - UI / menu, frameLayout | artsOne | 2955 | 2009.04.03 00:33 |
136 | [Script] MEL, Python 표기 | artsOne | 3233 | 2009.03.30 01:26 |
135 | [Script] 자료형 - list 이해 | artsOne | 2739 | 2009.03.30 01:12 |
134 | [Script] Shape 변경하기 | artsOne | 2088 | 2009.03.11 00:13 |
133 | [Rendering] Default Color | artsOne | 2283 | 2008.09.12 01:40 |
132 | [Script] MEL - clear | artsOne | 2759 | 2008.09.12 00:12 |
131 | [Script] MEL - window #2 | artsOne | 2774 | 2008.09.01 23:49 |
130 | [Rigging] Guide Line (Deform > Point On Curve) | artsOne | 2598 | 2008.08.13 02:16 |
129 | [Base] Marking Menu Custom | artsOne | 2166 | 2008.08.04 12:48 |
128 | [Rigging] Expression을 이용한 Stretch, Squash | artsone | 2863 | 2008.06.18 00:31 |
127 | [Expression] MEL, Expression - pow | artsone | 2748 | 2008.06.16 16:09 |
126 | [Script] MEL 기초 #02 - 함수, 라이브러리, 클래스 | artsOne | 3804 | 2008.04.18 02:27 |
125 | [FX] Lesson 1: Creating nCloth collisions Step 3 | artsOne | 2143 | 2008.04.13 17:56 |