'분류 전체보기'에 해당되는 글 209건
- 2011.08.31 어머나 이런건 기록에 남겨놔야해
- 2011.08.02 IK solver - SC solver, RP solver 차이점
- 2011.06.30 Expression in Maya Python
- 2011.06.17 Chicken chicken chicken
- 2011.06.02 파인애플 로고
- 2011.05.09 Skin Weight Map 사용하기
- 2011.05.09 Maya Useful Tips
- 2011.04.18 Everymove '우리 때문에' 사전 영상
- 2011.04.07 반전 없음
- 2011.02.11 콜라를 내놓아라
IK 를 설치할 때 SC solver, RP solver 가 존재한다. 둘의 차이점은 폴벡터의 유무 정도로만 이해하고 있는데, 둘의 차이점을 좀 더 명확하게 이해해보도록 하자.
1. 명칭의 정의
일단 정확한 명칭의 의미를 아는 것은 개념을 이해하는 데 중요하다.
SC solver 는 Single Chain Solver 를 뜻하고,
RP solver 는 Rotation Plane Solver 를 뜻한다.
2. 개념의 정의
먼저 RP solver 부터 알아보면, 관절이 일정한 방향성을 가지고 꺾일 수 있도록 Pole Vector 를 가진다. 명칭에서 알 수 있듯이, 조인트의 시작점-end effector, 그리고 pole vector 가 하나의 plane 위에 있고, 그 위에서 Rotate 하게 됨을 알 수 있다. 따라서 팔꿈치나 무릎 등을 리깅할 때에는 RP solver 를 사용하는 것이 최적인 것이다.
하지만 SC solver 는 이러한 일정한 방향성을 가지면서 꺾이도록 할 수 없다. 따라서, 두 개의 조인트로 이루어진 하나의 본(bone) 에 IK 를 설치할 때 (ex. 발 리깅을 할 때, 발목-발끝에 SC solver 를 설치하면 발끝 motion 에 따라 발목 joint 의 rotation 되는 리깅이 가능해진다.) SC solver 가 더 나은 선택이다.
ThEnd.
비둘기 프로젝트를 하는데 다음과 같은 조건을 충족시킬 문제가 떨어졌다.
1. 타임라인이 움직이면 깃털들이 랜덤하게 팔락거렸으면 좋겠다.
2. 추가로 플러그인을 만들지 말고 마야에 있는 기능으로 만들었으면 좋겠다.
이런 문제에서는 Maya Expression 이 적당하다. 각각의 깃털들에 대해서 서로 다른 Expression 이 적용되어야 하므로, Python Script 를 이용해서 Expression 을 만들었다.
코드는 다음과 같이 간단하다.
먼저 날개 mesh 들을 모두 선택한 다음, 날개 메쉬 각각에 expression 을 만들어 주는 것이다.
물론 이러면 항상 일정한 값으로 (0.0~3.0 사이 랜덤하게) rotateX 값이 깃털에 들어가게 되는데
controllable 하게 만들어 줄 수도 있다.
하지만 이 정도면 python script 상에서 어떻게 expression 을 만들면 되는지 hello world 는 찍을 수 있을 것이다.
ThEnd.
p.s.
결국 추가로 최종적으로 만든 expression 은 다음과 같다.
expression 안에 다른 attribute 를 넣고 싶으면 getAttr 같은 것을 쓸 필요 없이 바로 쓰면 되고,
if 문으로 조건문 제어가 가능하다.
Python script 로 2줄 이상의 expression 을 넣고 싶으면 일단은 다음과 같이 죽 붙여 쓰는 형태로 짜야 하는 것 같은데
다른 방법이 있는지 찾아봐야겠다.
p.s.2. 3중 따옴표 (""") 의 사용
재밌는 기능을 발견했다. Maya Python Script 에만 있는 기능은 아니고, Python 자체에 있는 기능인데 3중 따옴표를 쓰면 여러 줄의 문자열을 한 string 에 입력할 수 있다.
여러 줄의 expression 을 입력하고 싶을 때 스크립트로 다른 expression 을 입력해서 기존의 expression 을 수정하는 방법은 없는 것 같다. 그러면 또 다른 expression 이 생겨버린다. expression 을 수정하기 위해서는 expression editor 를 이용하는 방법 뿐인듯.
ThEnd.
2007 년 University of Washington 의 Doug Zongker 라는 학생이 발표한 논문.
사실 대부분의 사람들이 논문 발표에 관심이 없고, 논문도 다 거기서 거기라는 것을 패러디.
해당 논문은 http://isotropic.org/papers/chicken.pdf 에서 볼 수 있고
물론 구글 스콜라에서도 검색이 되며(http://scholar.google.co.kr/scholar?cluster=9396708367921284731&hl=ko&as_sdt=0,5&sciodt=0,5), 심지어 2회 인용(!) 까지 되었다.
ThEnd.
특정 캐릭터의 잘 된 스키닝을 다른 캐릭터로 옮겨줄 수 있을까?
이 질문에 대한 한 가지 방법으로, Skin Weight Map 을 사용하는 방법을 소개한다. 이 방법은 Maya 에 있는 Skin>Edit Smooth Skin 안에 있는 Export Skin Weight Maps... 와 Import Skin Weight Maps... 를 사용하는 방법으로, 다음과 같은 케이스일 때 사용할 수 있다.
1. 두 캐릭터의 Joint Hierarchy 구조가 동일하다.
2. 두 캐릭터 메쉬의 UV 맵이 동일하다.
즉, 두 캐릭터의 리깅이 똑같고, 메쉬 구조도 똑같으며, 두 캐릭터의 UV 맵도 동일한 경우. 즉 단지 메쉬를 deform 시켜서 만든 새로운 캐릭터인 경우라면 이 방식을 사용한 Skinning Transfer 가 최적의 성능을 보인다고 할 수 있다.
그렇게 보면 비교적 심한 제약조건이라고 볼 수 있지만, 대신 그만큼 스키닝은 잘 옮겨진다;
리깅이 완료된 여자 캐릭터의 스키닝을 남자 캐릭터로 옮겨 줄 것이다.
1. Export Skin Weight Maps
Step 1)
먼저 여자 캐릭터의 잘 된 스키닝에서 Skin Weight Map 을 뽑아준다. Export Skin Weight Maps... 메뉴를 사용하는데, 옵션 박스를 눌러 옵션을 조절할 수 있다.
여성 캐릭터 mesh 를 선택한 다음 Export Skin Weight Maps...
Alpha 와 Luminance 가 이곳에서 어떻게 적용되는지는 추후에 더 구체적으로...
맵 사이즈를 조절할 수 있는데, 맵 사이즈를 크게 뽑으면 해상도가 높은 만큼 스키닝을 그대로 정확하게 옮겨줄 수 있고 대신 맵 파일의 용량이 커진다. 맵 사이즈가 작아지면 스키닝이 옮겨졌을 때 따라오지 말아야 할 버텍스가 따라오는 등 에러가 발생하기도 한다. 경험상 대략 1024x1024 정도면 무리가 없을 듯 하다.
Step 2)
그럼 Write Map 이라는 창이 뜨는데, 현재 프로젝트 폴더의 sourceimages 폴더 안에 weight map 을 생성하게 된다. 적절한 이름을 넣고 save 를 누르면 저절로 맵을 생성한다.
생성한 다음 폴더 안에 들어가 보면 다음과 같이 Weight Map 파일이 생성되었음을 볼 수 있다.
Weight Map 의 예
그리고 아까 지정한 이름에 .weightMap 이라는 확장자를 가진 파일도 생성된 것을 확인할 수 있는데, 어떤 내용을 가지고 있는지 메모장 등에서 확인해 볼 수 있다.
생성된 .weightMap 파일 (test.weightMap)
.weightMap 의 내용
위 그림과 같이
mesh 이름 조인트 이름 해당 조인트의 weightMap 이미지파일
형태로 이루어져 있음을 볼 수 있다. 이렇게 weightMap 을 export 하는 과정은 종료되었다.
2. Import Skin Weight Maps
Step 1)
Import 하는 방법도 어렵지는 않다. 일단, smoothbind 만 되어 있는 타겟 캐릭터의 메쉬를 선택하고 -> Skin>Edit Skin>Import Skin Weight Maps... 에서 Import 하면 된다.
target 이 되는 캐릭터. 물론 리깅&SmoothBind 까지 되어있어야 한다.
Import Map 창이 뜨면 일단 아무것도 보이지 않는데, 맨 아래 Files of type: 탭을 All Files 로 바꾸어준 다음, 아까 생성했던 .weightMap 파일을 선택해주면 된다.
아까 생성했던 test.weightMap 을 import 하면 된다.
그럼 잠시 현란한 스키닝 기술을 보여주며 마야가 캐릭터를 스키닝하는 것을 볼 수 있다. 이 때 스키닝하는 방식은, 마야 스스로 Paint Skin Weights Tool 을 실행시켜서 자동으로 스키닝을 한다.
이후, 스키닝이 잘 옮겨진 것을 볼 수 있다.
3. 참고사항들
이 방식을 사용하는 데 있어서 몇 가지 참고사항이 있어서 적어본다.
1) 마야 스크립트(MEL, Python script) 로 해당 프로세스를 수행하고 싶을 경우, 타겟이 되는 캐릭터를 'bindSkin' 스크립트를 이용해서 bind 하면 이 skinWeight 명령어를 사용할 수가 없다. 'SmoothBindSkin' 이라는 스크립트를 사용해서 초기 smoothBind 를 해야 한다.
2) 남자 캐릭터의 리깅을 처음부터 다시 하는 것은 낭비가 심하다. 여자 캐릭터의 리깅을 남자 캐릭터에 옮겨줄 때, joint 와 컨트롤러 위치 정도만 바꾸어 주는 것으로 리깅을 그대로 사용할 수 있다. 이 때 조인트나 컨트롤러 상위에 NULL 노드들을 삽입해서 해당 NULL 노드들을 움직여 주는 것으로 리깅을 간편하게 옮겨줄 수 있다.
ThEnd.
1. Nurbs Curve 색깔바꾸기
넙스커브 선택
shape 노드 들어가보기
Object Display
Drawing Overrides
Enable overrides(check)
Color 변경