회원 로그인
정보기억 정보기억에 체크할 경우 다음접속시 아이디와 패스워드를 입력하지 않으셔도 됩니다.
그러나, 개인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 - 13. realtime lattice point random move (expression)

artsOne | 2009.05.01 00:58 | 조회 5093
Digital Dream ( http://cafe.naver.com/digitaldream ) 카페의 'Maya Python 시작하기'의
기반으로 복습하는 차원에서 재정리한 것입니다.




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)

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