Saturday, July 31, 2010

Trax 사용법 정리 (5) 상체와 하체에 모션을 따로 적용

범위
Maya Trax 08 상체 하체 독립적으로 적용

상하체 따로 적용
여기서는 Sub character set 를 이용해 상체와 하체에 따로 애니메이션을 적용해보자.
Think 라는 모션과 Walk 라는 모션 두개가 있는 상황에서,
Think 는 상체에, Walk 는 하체에 적용해본다.

rig 된 캐릭터에 대해 female 이라는 이름으로 character set 이 만들어져 있고
Think 와 Walk 두 clip 이 Trax 에 로딩돼있는 상태에서,
다음을 실행한다.

상체를 별도의 Sub character set 으로 분리하기
1. 상체의 rig control 들을 선택하고
2. Outliner에서 캐릭터 셋을 ctrl click 한 후
3. Character > Create Subcharacter Set (옵션박스)
-> 이름은 arms_chest_female 로 하고
-> All Keyable Except 로 해서 no scale, no visibility 해서 create

분리 완료
이제 Outliner 에 보면 female 밑에 arms_chest_female 이 있다.
Trax 에 보면 sub character set 의 clip 이 따로 보인다.
즉 상체가 다른 clip 으로 분리된 것이다.

이제 상하체에 대한 clip을 따로 움직여서 다른 모션의 조합을 넣어줄 수 있다.

Trax 사용법 정리 (4) 클립 만들어서 export/import하기, Absolute/Relative 문제해결

Trax 로 애니를 완성한 후 export 해보자.

범위
Maya Trax 07 Clip import and export

애니를 trax clip으로 만들기
1. rigging 된 캐릭터가 걷는 파일을 로딩하자.
2. rigging controller curve 들을 모두 선택하고
3. Create Character Set 하자 (메뉴 > Character > Create Character Set 옵션)
-> female 이라는 이름으로 create character set 함.
4. Trax Editor 메뉴에서 Create > Clip 하자.

생성된 클립을 export 하기
clip 을 select 하고
1. Trax Editor 메뉴에서 File > Export Clip...
2. clips 폴더에 walkCycle_female_24 와 같이 프레임수를 파일명에 넣어서 저장하자.

애니를 trax clip으로 만들기
1. 이번엔 다른 파일을 열어보자. rigging 된 캐릭터가 가만히 서서 턱을 만지는 파일을 로딩하자.
2. rigging controller curve 들을 모두 선택하고
3. Create Character Set 하자.
-> 같은 이름인 female 이라는 이름으로 create character set 됨.
4. Trax Editor 메뉴에서 Create > Clip 하자. Clip 이름은 thinking 으로.

클립을 import 하기
아까의 walk cycle 클립을 import 해보자.
1. Trax Editor 에서 File > Import Clip to Characters... (옵션박스) 를 실행해보자.
-> Put Clip in Trax Editor and Visor 를 선택하고 아까 export 된 클립을 import.
2. 그러면 이제 두 클립이 별도의 트랙에 같이 존재.

두 클립을 overlay 시키기
이제 Trax 에디터에는 두 clip 이 있다.
이들 두 clip 을, sub character set 을 이용해 다른 신체부위에 적용하여 줄 것이다.

일단 Walk Cycle 을 loop 시켜보자.

Looping 시의 Troubleshooting
1. 모션이 이상하게 나오는 경우,
absolute 여야 하는 것이 relative 로 되어 있을 수 있다.
디폴트로 translate는 relative이고 rotate는 absolute인데 대부분의 경우 그것이 좋지만
안그런 경우도 있기 때문

2. 클립에 오른클릭하고 메뉴에서 Absolute 를 찾아보자.
메뉴에 없다면, 그 원인은 어떤 것은 relative 로, 어떤 것은 absolute 로 되어 있기 때문이다.

3. Edit Clip Channel Offsets.. 를 선택해보자.
그러면 Attribute Editor 에 Channel Offsets 항목이 보이는데
어떤 것은 relative 로, 어떤 것은 absolute 로 되어 있는 것이 보인다.

4. 여기서 고쳐주면 된다. 강좌에서는 All Absolute 버튼을 눌러줬는데 그러면 looping은 힘들듯.
-> attribute 들이 많아서 로딩에 시간이 좀 걸리는데 마야가 다운된걸로 착각하지 말 것.

Trax 사용법 정리 (3) Clip 합치기/Clip Edit 하기

출처 : DIGITAL TUTORS - Maya Trax

범위
Maya Trax 06 Layering Animation Clips

Trax에 들어가 있는 기존 모션에 다른 모션 추가하기
원하는 캐릭터의 Character Set 이 선택되어 있고,
1. Trax에 걷는 모션이 들어가 있는 상태에서
2. 캐릭터가 고개를 돌리는 키프레임 모션 추가한 후,
3. Trax 윈도우 메뉴 > Create > Clip 을 해서 새 클립 생성.

두 클립을 blend 하는 법
Trax 윈도우 메뉴 > Create > Blend (옵션박스) 에서
-> Initial Weight Curve 를 Linear 로,
-> Rotation Blend 를 Quaternion Shortest 로 해주고
Blend 를 Create 해보자.

두 클립을 merge 하는 법
1. Trax 상의 두 클립을 선택하고
2. Trax 윈도우 메뉴 > Create > Merge 를 하자.

blend 및 merge 테스트해보기
1. 클립을 반으로 쪼개서
2. 서로 떼어놓은 후
3. 그들 둘을 선택하고
4. Create Blend 하자.
5. 그리고 두 클립을 선택해서 merge.

이렇게 merge 한 후에 visor 를 들여다보면
처음의 두 클립에 merge 된 클립이 하나 추가되어 있다.

Tip. 클립을 둘로 쪼개는 법
클립을 선택하고 Trax 윈도우 메뉴 > Edit > Split

Graph Editor
Trax에서 버튼을 눌러서 Graph Editor 띄울 수 있다.
그래프에디터를 보면 모든 프레임에 keyframe 이 만들어져 있음을 알 수 있는데
문제는 모든 키의 tangent 가 flat 으로 돼있음.

키도 줄일겸 해서 Simpify curve 해보자.
(Graph Editor > Curves > Simplify Curve)
Simplify Curve Options 에 보면
-> Simplify Method 가 Classic 과 Dense Data 두가지인데
-> Classic 으로 하면 simplify 가 잘 안되는 경우가 있음.
-> Dense Data 로 하면 잘됨.

Trax 사용법 정리 (2) Character Set

출처 : DIGITAL TUTORS - Maya Trax

범위
Maya Trax 05 Creating a character set

Character Set과 Clip
Motion Builder 의 Story 에서의 clip 은 캐릭터 단위로 만들어진다.
그러나 Maya Trax 의 clip 은 character set 단위로 만들어진다.

character set 이란 캐릭터보다 정교한 개념으로,
예를 들어 상반신과 하반신을 별도의 캐릭터 세트로 만들면 각각에 별도의 모션을 줄 수 있다.

따라서 Clip 을 생성할때는 원칙적으로 어떤 character set 에 대한 clip 인가를 지정해줘야 한다.
sphere 와 같은 단순한 오브젝트로 테스트할 때 character set 을 인식하지 못했던 이유는
별도로 지정 안하고 생성할 때는 character set 도 함께 자동으로 생성해주기 때문이다.

Character Set 만들어보기
rigging 된 인체모델의 walk cycle 애니메이션에서 캐릭터 세트를 만들어보자.
rigging 된 인체모델의 walk cycle 애니메이션 모델을 로딩해보자.
여기서 컨트롤러인 Nurbs curve 들을 모두 로딩해서
Character > Create Character Set (옵션박스) 을 해준다.

Character Set 옵션 세팅
Character 이름을 정해주고
Hierarchy Below Selected Node 체크는 꺼준다.
원치 않는 노드가 선택될 수도 있기 때문이다.

Attributes 는 All Keyable Except : 에서는
Scale 과 Visibility 를 선택해줄 수도 있고

From Channel Box 를 선택해서 자신이 원하는 Attribute 만 캐릭터 세트에 넣어줄 수 있다.

Outliner 에서 Character Set 다루기
이렇게 Character Set 를 생성하면 Outliner 에 캐릭터 세트를 의미하는 사람모양 아이콘이 생긴다.
(아이콘 형태가 모션빌더 캐릭터 아이콘과 비슷하다. 이것은 실제로, 모션빌더에서 캐릭터에 상응하는 노드라고 볼 수 있다)

Outliner 의 Character Set 을 열어보면 아까 넣었던 모든 커브들과 각각의 attribute 들도 보인다.
Outliner 의 Character Set 에서 원치 않는 attribute 는 지워줄 수도 있다.

Character Set의 선택
캐릭터 세트가 '선택'되었다는 것은 무슨 의미가 있는 것일까?
그것은 Trax에 그 캐릭터가 나타남을 의미한다.
일반적인 다른 UI에서는 의미가 없다.

현재 select 된 character 가 무엇인지는 마야 창 오른쪽 아래에 보인다.
여기서 character 를 골라줄 수 있다.
특별히 선택된 캐릭터가 없으면 No Character Set 이라고 써져 있다.

선택된 캐릭터 세트는 Trax Editor 에 나타난다.

Trax를 MEL로 띄우기
Trax Editor 를 MEL 로 띄우는 명령어는 CharacterAnimationEditor 이다.

Character Set 로부터 Clip 만들기
Character Set 를 선택한 후, Trax Editor 에서 Create > Clip 를 실행한다.
그러면 해당 캐릭터 세트에 clip 이 생성된 것이 보인다.

Trax 사용법 정리 (1) 기초

여기서는 DIGITAL TUTORS 의 Maya Trax 강좌를 바탕으로 Trax 사용법을 정리한다.

출처 : DIGITAL TUTORS - Maya Trax

범위
Maya Trax 01 Introduction
Maya Trax 02 (기초1) Clip 기초
Maya Trax 03 (기초2) Clipping
Maya Trax 04 (기초3) Looping, duplicating, visor 등

실제 인간 캐릭터에 Trax를 적용하는 프로세스를 빨리 보려면 다음을 볼 것
Trax 사용법 정리 (4) 클립 만들어서 export/import하기, Absolute/Relative 문제해결

간단히 Trax 테스트해보기
1. 간단히 sphere를 만들어서 키프레임 애니메이션을 만든다.
2. 이 키프레임 애니를 Trax의 clip에 넣으려면 Trax 창에서 Create > Clip 을 한다.
-> Create Clip Options 에서 Leave Keys in Timeline 옵션은 디폴트로 꺼진 채로 두고
-> Put Clip in Visor Only 말고 Put Clip in Trax Editor and Visor 를 선택함
-> Include Subcharacters in Clip 은 subcharacter 가 없다면 뭘 선택해도 상관없음

3. 이제 Trax 윈도우에 보면 clip이 생성돼있다.
-> List > Auto Load Selected Characters 를 체크하면
-> 물체가 선택되면 자동으로 Trax 에 로딩되게 됨

Visor
프로젝트 세팅시 Trax의 Clips는 clips 라는 폴더에 저장되게 되어 있음
Visor 라는 것은 단순히 폴더 액세스를 간편히 하기 위한 것이므로
(즉 폴더에서 파일을 바로 마야로 끌어온다거나 등을 간편히 하기 위한)
Clip 들 역시 Visor 에서 끌어올 수도 있다.

Visor 는 Window > General Editors > Visor... 로도 띄울 수 있지만
Trax View의 버튼으로도 간단히 띄울 수 있다.

Visor 의 Character Clips 를 보면 지금까지 만든 clip 들이 보인다.
MMB drag 로 Track에 끌어넣을 수 있음.

Trax 뷰 사용법
clip 은 Alt + MMB drag 로 move 할 수 있고 줌인/아웃 등도 다른 뷰와 사용법 동일
f 치면 frame 되는 것도 동일
Tracks의 clip은 copy, paste, duplicate 모두 가능.

Trimming / Looping
1. 클립 위쪽에 있는 양옆의 숫자는 클립의 relative frame,
-> 위쪽의 숫자에 클릭하고 양옆으로 드래그하면 클립이 clipping 됨.

2. 클립 밑에 있는 양옆의 숫자는 클립의 absolute frame 을 나타냄
-> 아래쪽의 숫자에 클릭하고 양옆으로 드래그하면 클립이 scale 됨
-> 아래쪽의 숫자에 Shift 클릭하고 양옆으로 드래그하면 클립이 loop 됨

가위 아이콘을 클릭하면 현재 커서 앞 또는 뒤가 trim 됨.

클립을 둘로 쪼개려면 클립을 선택하고 Trax 윈도우 메뉴 > Edit > Split

Track을 disable하기
트랙을 지우지 않고 disable 만 시킬 수 있다. 트랙 왼쪽의 disable 버튼을 누르면 된다.

테스트해보자.
1) 세로로 움직이는 애니가 들어간 트랙을 disable 하고
2) 가로로 움직이는 키프레임 애니를 만들어준 후
3) 트랙을 enable 해주면, 가로 세로 움직임이 overlay 되어 나타남

Clip 단위로 disable 할수도 있다. 클립에 오른클릭해보면 Enable 체크박스가 있다.

Relative Movement
x축으로 전진하는 Trax의 clip 둘을 duplicate 해서 나란히 놓으면
원점으로 돌아왔다가 다시 전진하는게 아니라 상대위치에 맞춰 계속 전진하는데
그 이유는 clip이 Relative clip 으로 돼있기 때문.

Attribute Editor 에 보면 Absolute / Relative 세팅으로 세팅해줄 수도 있고
좀더 쉽게 Trax의 clip에 오른클릭하고 메뉴에서 Relative Clip 체크를 토글해줄 수 있다.
(absolute와 relative가 섞여 있으면 메뉴에 나타나지 않음에 유의)

Clip 들을 group 하기
clip 들을 선택한 후 Trax Window 메뉴 > Edit > Group 하면 그룹됨.

Wednesday, July 28, 2010

MotionBuilder에서 Rotation값 직접 입력한 직후 마우스가 잘 안듣는 증상

질문 : MotionBuilder에서 Rotation값 직접 입력한 직후 마우스가 잘 안듣는 증상이 있다. 이럴 때는 View 에서 카메라가 움직이지를 않는데 어떻게 해야 하는가?
답 : 모션빌더 UI의 약간의 버그인듯. View 에 클릭한 후 Enter 를 치면 제대로 됨.

Tuesday, July 27, 2010

MotionBuilder의 Character Settings 창에서 모든 부위 선택하는 법

질문 : MotionBuilder의 Character Settings 창에서 모든 부위 선택하는 법?
답 : 검은 바탕 부분을 클릭하면 아무것도 선택 안된 상태와 모든 부위 선택된 상태가 토글된다.

MotionBuilder에서 Pose 다루기

Pose 를 create 하는 방법
캐릭터의 rig ctrl 들로 포즈를 잡은 다음
Asset Browser의 Pose Controls 창에서 Create 버튼 누름

Pose 를 적용하는 방법
Character Controls 창에서 Pose 를 적용할 캐릭터를 선택.
Character Controls 창에서 Keying mode 를 Full Body 로 선택.
Asset Browser의 Pose Controls 창에서 적용할 pose 를 더블클릭.

팔이나 다리 등 일부 body part에만 Pose 를 적용하는 방법
Character Controls 창에서 Pose 를 적용할 캐릭터를 선택.
Character Controls 창에서 Keying mode 를 Body Part로 선택하고
적용할 몸 부위 선택.
Asset Browser의 Pose Controls 창에서 적용할 pose 를 더블클릭.

출처 : MotionBuilder 2009 Help > Animating Characters > Control rigs > Poses

Monday, July 26, 2010

MotionBuilder 에서 object 의 pivot 변경하는 방법



Object Mode 버튼에서 Model 모드를 Pivot 모드로 전환하면 된다.

MotionBuilder의 Navigator에서 Group하는 방법

질문 : 모션빌더의 Group은 Maya의 Group과 다른 의미로 사용되는 것 같다. 씬그래프(Scene graph)에서 hierarchy로 묶어주는 마야의 그룹 같은 것은 어떻게 해야 만들 수 있나?

답 :
Scene > Insert Object > Null
하면 마야의 "empty group"에 해당하는 것이 생기는데
그 밑에 원하는 object 들을 드래그 앤 드롭 해주면 된다.
(drag and drop 시 parent 선택)

C3D 파일 포맷의 Mocap Data를 MotionBuilder에서 사용하는 법

C3D 파일 포맷의 Mocap Data를 MotionBuilder에서 사용하는 법

모션캡처 데이터가 BVH로 돼있으면 사용이 간편하지만 옵티컬 마커가 그대로 저장돼있는 C3D 포맷 데이터도 자주 볼 수 있다. 이런 데이터를 사용하려면 다소 손이 가는데 그 절차를 여기서 정리해본다.

여기서는 Pipeline Techniques Maya and Motionbuilder 비디오를 중심으로
직접 해본 것을 정리한 설명이다.

1. C3D 파일 import
New Scene 에서,
c3d 포맷의 모션캡처 파일을 임포트 해보자.
c3d 란 optical data 파일이다.

디폴트 옵션으로 import 해도 되는데
Create Unused Optical Settings 는 필요 없으므로 꺼주고 import 하는게 좋다.
"Pipeline Techniques Maya and Motionbuilder" 에서는 디폴트 옵션으로 import 해줌.

2. Actor 를 Create
되도록 T-Stance 에 가까운 포즈로 이동해서
(사실 T-pose 아니라 아무 포즈라도 무방하지만 편의상 T-pose가 좋음)
Actor 를 create 하자. (Asset 에서 Actor 를 끌어 넣음)

Actor 를 움직여서 dots 에 일치하도록 맞춰줌
(Translate, Rotate, Scale 모두 사용할수 있음)

3. Actor의 Marker Set 을 Create
Navigator pane 에 Actor 를 띄워놓고
Marker Set > Create 해줌.

마커 셋의 역할은 단순히, 마커가 어떤 부위에 해당하는지를 지정해 주는 것이다.

4. Actor의 Marker Set 에 마커들을 지정
View에서 머리에 있는 4개의 마커를 선택해서 Navigator의 Actor의 머리 포인트에 끌어 넣음
(alt + drag 또는 maya key 세팅이라면 x + drag)

Upper Arm, Lower Arm, Hands 등 각 부위에 대해 다 해줌.

주의 : 하나의 body part에 넣을 수 있는 dots의 수는 최대 5개이므로
예를 들어 Chest 에 7개의 마커가 있다고 해도 5개까지만 선택해서 끌어넣을 것.

Tip : 이미 끌어넣은 마커를 지워주려면 navigator의 Actor Settings 에서 마커를 선택(테이블의 왼쪽 column)한 후 Delete 키 누르면 됨

5. Actor를 Activate 시킴
이제 어떤 마커가 어떤 부위를 나타내는 지 지정해 주었으므로
Actor 의 Active 체크박스를 클릭해준다.

이제 Actor 는 모션 캡처 points 를 따라 움직이게 된다.

6. Motion Capture를 기존캐릭터에 적용하기
이제 기존의 캐릭터(characterize된 사람 모델)를 이 씬에 Append 하자.
File > Merge 함.
옵션창에서 Append All Elements 하고 merge.

이제 기존에 만들어둔 캐릭터가 로드됐음.
그 캐릭터를 선택하고
navigator panel 에서 input type 을 그 actor 로 지정해줌.

(필요할 경우, Take 를 제대로 지정. Take001 에서 Mocap take 로 변경)

이제 캐릭터가 actor 를 follow 함.

참고 : Character의 발바닥 충돌 오브젝트 위치가 틀리면
모션이 매우 이상해지므로 제대로 발바닥에 위치시켜야 함
예를 들어, 발바닥 충돌 오브젝트가 실제 발바닥보다 밑으로 내려가 있으면 공중에 떠버림.
character와 actor의 위치가 일치하지 않으면 모션이 깨져버림.

7. 사이즈 일치시킴
그런데 캐릭터의 사이즈와 Actor의 사이즈가 다르므로
이를 매치해주기 위해 Character Settings의 Match Source 에 체크해줌.

8. 일부 관절들에 대해 FK/IK 양자택일시킴
Timeline 을 Scrub 해보면 모션이 잘 따라갈 수도 있고 좀 이상하게 움직일 수도 있는데
그 경우 character controls 창에서 IK와 FK 컨트롤이 모두 존재하는 관절들에 대해
Reach T, Reach R 값을 0% 와 100% 둘 중의 하나로 주면 더 모션을 잘 따라가는 값이 있을 것임. (보통 0%로 해서 Full FK 로 하면 잘 됨)

키워드 : 모션캡처, Motion Capture

출처 :
MBM://Pipeline Techniques Maya and Motionbuilder/12 Motion Capture 사용하기.html
MBM://Pipeline Techniques Maya and Motionbuilder/13 Motion Capture를 기존 캐릭터에 적용하기. Optical data cleanup 하기.html
MBM://C3D Motion Capture Mocap 다루는 법/Importing C3d and Mapping Actor in MotionBuilder Tutorial

Optical marker 나 actor 등 Object type 별로 show/hide하는 법

질문 : Optical marker 나 actor 등 Object type 별로 show/hide하는 법? 선별적으로 보여주는 법?

답 :
크게 두군데에 나뉘어져 있는데
1. View Window
Viewer 의 Display 버튼 > Models Visibility 에 Markers 나 skeleton 을 켜고 끄는 옵션이 있고


2. Character Control 창
Character Controls 창의 Show 에서 물체들을 선별적으로 보여주는 옵션이 있음
Floor Contact 등을 show/hide 가능.

Sunday, July 25, 2010

MotionBuilder에서 Story창에 모션 FBX 파일 끌어넣었는데 애니메이션이 안보이는 경우 해결법

이런 경우의 문제는 보통 다음 중 하나이다.

1. Story 창에서 Story 모드가 꺼져있는 경우
-> 이런 경우는 Chracter Control 창의 왼쪽 위에 Story라고 표시가 안돼있을 것이다.
이 경우는 Navigator의 Story 창 왼쪽 위의 Story 버튼에 클릭해주면 됨

2. Character Track 이 아닌 일반 Animation Track 등에 끌어넣은 경우
-> 이런 경우는 생성된 Clip의 색깔이 주황이 아닌 초록 등 다른 색으로 보일 것이다.
모션이 들어 있는 FBX 파일을 Asset Browser에서 Story윈도우로 바로 끌어넣을 경우,
보통은 자동으로 Character Track이 생성되는데,
그렇지 않고 Generic Animation Track이 생성되는 경우가 있다.
이런 경우 애니메이션은 전혀 적용되어 보이지 않으므로 당황하기 쉽다.
이 경우 해결법은,
  1. Story 창에 오른클릭해서 Insert > Character Animation Track 해서 수동으로 캐릭터 트랙을 만들고
  2. 트랙의 Character 에서 적용할 캐릭터를 선택한 후
  3. Asset Browser 에서 FBX를 끌어넣으면 된다.
참고: Character Settings 의 Input Type 이 Active 로 돼있거나 안돼있는건 상관이 없다.
참고: 때로는 아래쪽 트랙에 다른 모션을 넣어놓아 의도한 모션이 안보이는 경우가 있는데 이럴 때는 트랙들이 겹쳐져 그런 것이므로 같은 트랙에 겹치지 않도록 놓으면 해결된다.

Thursday, July 22, 2010

별 이유 없이 rendering이 안될때의 해결법

displacement map 등 넣고 씬이 복잡해졌을 때
파일이 잘못되었는지 간혹 배치 렌더가 안되고 한장씩만 될 경우가 있는데
(물론 command line render 도 안됨)
이럴 때는 물체를 하나씩 따로 export 한 후
New Scene 에서 다시 import 해서 합쳐주면 잘 되곤 한다.

Tuesday, July 20, 2010

Maya에서 follicle 이용해서 object를 surface에 attach하는 법

질문 : Maya에서 object를 surface에 attach하는 법?
(예를 들어 T-shirt에 button 단추 다는 등)

답 :
Follicle 노드가 현재로서는 유일하게 UV에 부착되는 노드이므로 follicle을 쓰는 것 외의 방법은 모두 편법에 불과하다. 그런데 Follicle을 그냥 쓰려고 하면 hair를 생성할때 follicle의 위치가 random으로 생성되어 컨트롤할 수 없다. 따라서 다음 MEL을 쓰는 것이 정답.

사용법 :
1. attach할 object 선택
2. attach할 surface 선택
3. parentToSurface 실행

출처 : http://www.kylenikolich.com/scripting/lod/parentToSurface.mel

주의점 : 오른쪽과 왼쪽이 대칭으로 같은 texture 를 공유하거나 하는 경우 UV space 를 공유하게 되므로 이 MEL로 follicle을 제대로 심을 수가 없다. (왼쪽에 follicle을 심으려 했는데 왼쪽에 심어지는 식이 돼서 엉망이 됨)

parentToSurface.mel 의 내용 :

// parentToSurface

// This mel command allows one to attach selected objects to a selected mesh or nurbs surface.
// The objects will follow any deformation or transformation of the surface.

// Usage: put this script in your local scripts directory. In Maya select object(s) to attach
// followed by a mesh or nurbs surface to attach then enter "parentToSurface" in the
// command line. A follicle node will be created at the point on surface closest to
// the center of the object and the object will be parented to this follicle. Note that
// if the surface to attach to is a mesh it must have well defined UVs that range from 0-1
// with no areas sharing the same value.
//
// For convenience drag the parentToSurface string onto the shelf to make a shelf button.
//
// This command uses the follicle node, which is normally used by the hair system. The follicle node
// is currently the only node in maya that can derive a rotate and translate based on a uv position
// for both meshes and nurbs surfaces.
//
// One use of this script might be to attach buttons to a cloth object, or any deforming surface. To
// attach several buttons, first position the buttons where desired then select them followed by the
// object to attach to and run this command.
// For more info or to report problems with this script go to Duncan's Corner:
// http://area.autodesk.com/blogs/blog/7/

global proc float convertToCmFactor()
{
string $unit = `currentUnit -q -linear`;
if( $unit == "mm" ){
return( 0.1 );
} else if( $unit == "cm" ){
return( 1.0 );
} else if( $unit == "m" ){
return( 100.0 );
} else if( $unit == "in" ){
return( 2.54 );
} else if( $unit == "ft" ){
return( 30.48 );
} else if( $unit == "yd" ){
return( 91.44 );
} else {
return( 1.0 );
}
}

global proc attachObjectToSurface(string $obj, string $surface, float $u, float $v )
{
string $follicle = `createNode follicle`;
string $tforms[] = `listTransforms $follicle`;
string $follicleDag = $tforms[0];


connectAttr ($surface + ".worldMatrix[0]") ($follicle + ".inputWorldMatrix");
string $nType = `nodeType $surface`;
if( "nurbsSurface" == $nType ){
connectAttr ($surface + ".local") ($follicle + ".inputSurface");
} else {
connectAttr ($surface + ".outMesh") ($follicle + ".inputMesh");
}
connectAttr ($follicle + ".outTranslate") ($follicleDag + ".translate");
connectAttr ($follicle + ".outRotate") ($follicleDag + ".rotate");
setAttr -lock true ($follicleDag + ".translate");
setAttr -lock true ($follicleDag + ".rotate");
setAttr ($follicle + ".parameterU") $u;
setAttr ($follicle + ".parameterV") $v;

//parent -addObject -shape $obj $follicleDag;
parent $obj $follicleDag;
}

global proc parentToSurface()
{
string $sl[] = `ls -sl`;
int $numSel =size($sl);
if( $numSel < 2 ){ warning( "ParentToSurface: select object(s) to parent followed by a mesh or nurbsSurface to attach to."); return; } string $surface = $sl[$numSel-1]; if( nodeType($surface) == "transform" ){ string $shapes[] = `ls -dag -s -ni -v $surface`; if( size( $shapes ) > 0 ){
$surface = $shapes[0];
}
}
string $nType = `nodeType $surface`;
if( $nType != "mesh" && $nType != "nurbsSurface"){
warning( "ParentToSurface: Last selected item must be a mesh or nurbsSurface.");
return;
}
string $clPos = "";
float $minU, $minV, $sizeU, $sizeV;
float $convertFac = 1.0;

if( $nType == "nurbsSurface" ){
$clPos = `createNode closestPointOnSurface`;
connectAttr ($surface + ".worldSpace[0]") ($clPos + ".inputSurface");

$minU = `getAttr ($surface+".mnu")`;
float $maxU = `getAttr ($surface+".mxu")`;
$sizeU = $maxU - $minU;
$minV = `getAttr ($surface+".mnv")`;
float $maxV = `getAttr ($surface+".mxv")`;
$sizeV = $maxV - $minV;
} else {
int $pomLoaded = `pluginInfo -query -l nearestPointOnMesh`;
if( !$pomLoaded ){
loadPlugin nearestPointOnMesh;
$pomLoaded = `pluginInfo -query -l nearestPointOnMesh`;
if( !$pomLoaded ){
warning( "ParentToSurface: Can't load nearestPointOnMesh plugin.");
return;
}
}
// The following is to overcome a units bug in the nearestPointOnMesh plugin
// If at some point it correctly handles units, then we need to take out the
// following conversion factor.
$convertFac = convertToCmFactor();

$clPos = `createNode nearestPointOnMesh`;
connectAttr ($surface + ".worldMesh") ($clPos + ".inMesh");
}

int $i;
float $closestU, $closestV;
for( $i = 0; $i < $numSel -1; $i++ ){
string $obj = $sl[$i];
if( nodeType( $obj )!= "transform" ){
warning( "ParentToSurface: select the transform of the node(s) to constrain\n");
continue;
}
float $bbox[] = `xform -q -ws -bb $obj`;
float $pos[3];
$pos[0] = ($bbox[0] + $bbox[3])*0.5;
$pos[1] = ($bbox[1] + $bbox[4])*0.5;
$pos[2] = ($bbox[2] + $bbox[5])*0.5;
setAttr ($clPos + ".inPosition") -type double3
($pos[0]*$convertFac)
($pos[1]*$convertFac)
($pos[2]*$convertFac);
$closestU = getAttr( $clPos + ".parameterU");
$closestV = getAttr( $clPos + ".parameterV");
if( $nType == "nurbsSurface" ){
$closestU = ($closestU + $minU)/$sizeU;
$closestV = ($closestV + $minV)/$sizeV;
}

attachObjectToSurface( $obj, $surface, $closestU, $closestV );
}


if( $clPos != "" ){
delete $clPos;
}

}

parentToSurface;

기타 다른 방법: 다음과 같이 Attach to Motion Path 를 쓰는 방법(Object to Surface Constraints in Maya)도 있긴 하지만 실제로 써보면 속도가 너무 느려져서 (불필요한 연산이 많이 수행되는듯) 사용하기 안좋다. Play시간이 엄청 길어지는데, 멀쩡히 돌아가던 마야가 거의 멎는 수준.

Saturday, July 17, 2010

지브러쉬 작업시 메모리 부족으로 다운.또는 세이브시 다운

지브러쉬 작업시 메모리 부족으로 다운.또는 세이브시 다운

[출처] 지브러쉬 작업시 메모리 부족으로 다운.또는 세이브시 다운|작성자 풰인

ztl파일이 안열릴 경우가 있다. 메모리 어쩌구 저쩌고 자시고 쑤시고 하면서.
이것은 에러가 아닌 지극히 계산적으로 연산된 결과이다.
이렇게 에러났다고 판단되는 파일의 용량을 보면 특이할정도로 용량이 높다.
아마 다른 파일들의 4배의 용량일 것이다.
그렇다면??
정말 좋은 컴퓨터를 가진 지인에게 파일을 열어달라고 한다.
그럼 열린다.
그파일은 틀림없이 스컬핑중 부분적으로 하이드된상태에서 세이브된 파일일 확률이 80퍼센트 이상이다.
그렇다.하이드 된파일과 전체가 보이는 ztl파일의 용량은 정확히 4배가 차이가 난다.
그래서 안열리는 거란 말이다 당신의 컴퓨터에서..

잘못된 지식을 사실인것처럼 혼동하지 말자.지브러쉬 디바이드 최상의 단계에서 세이브하나 최하위에서 세이브하나 똑같고.단지 메모리 부족에러가 나는경우는 당신이 세이브할때 오브젝트가 하이드된상태인가 아닌가에 달려있당.
ㅇㅋㅂㄹ?

Maya 에서 Select 할 때 select 에서 빼기 select 에 더하기 하는 방법

Select mode 에서
Ctrl + Drag : Remove from Selection
Shift + Drag : Toggle
Ctrl + Shift + Drag : Add to Selection

select from only one side? in maya (backface culling)

select from only one side? in maya (backface culling)

I think you are talking about "Backface culling". It is in Options under Display/Custom Polygon Display. Actually there are a ton of options in there.

Thursday, July 15, 2010

Photoshop tip : tab 키로 그림 윈도우만 남기기

layer 및 tool bar 등 윈도우들이 많아 자리를 많이 차지하는데
이럴 때는 tab 키를 누르면 현재 에디트하는 윈도우만 보이도록 토글된다.

Tuesday, July 13, 2010

To increase the accuracy of your nCloth collisions

To increase the accuracy of your nCloth collisions

Step 1. Select the nCloth or passive object for which you want to increase its accuracy and improve its collisions.

Step 2. In the Attribute Editor do the following:
  1. Adjust the Thickness of your nCloth or passive object. Select the nClothShape or nRigidShape tabs, and in the Surface Properties, change the Thickness value. For best results, the collision volume should appear to cling closely to your nCloth.
  2. Adjust the Self Collision Thickness of your nCloth object. Select the nClothShape tab, and in the Surface Properties, change the Self Collision Thickness value.
  3. Adjust the Collision Flag for your nCloth object. Select the nClothShape tab, and in the Quality Settings section, change the selection in the Collision Flag drop-down list. Face creates the most accurate collisions and Vertex creates the least accurate collisions.
  4. Adjust the Self Collision Flag for your nCloth. Select the nClothShape tab, and in the Quality Settings section, change the selection in the Collision Flag drop-down list.
  5. Increase the number of collide iterations for your nCloth by adjusting its Max Collide Iterations attribute in the Quality Settings section of its nucleus tab.
  6. Resolve interpenetration for your nCloth by adjusting its Trapped Check, Push Out, and Crossover Push attributes in the Quality Settings section of the nClothShape and nRigidShape tabs.
출처 : Create and edit nCloth collisions (from Maya Reference)

Tuesday, July 6, 2010

orient joint 하면 non-zero rotations 에러 뜨는 문제

질문 :
orient joint 하면
non-zero rotations 에러 뜨는 문제
어떻게 해결하나?

답 :
select hierarchy 한 후
Freeze Transformations 한 후
orient joint 하면 해결