posted by cimple 2011. 5. 9. 16:47

특정 캐릭터의 잘 된 스키닝을 다른 캐릭터로 옮겨줄 수 있을까?

이 질문에 대한 한 가지 방법으로, 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.

posted by cimple 2011. 5. 9. 15:27


1. Nurbs Curve 색깔바꾸기

넙스커브 선택

shape 노드 들어가보기

Object Display

Drawing Overrides

Enable overrides(check)

Color 변경


 

posted by cimple 2011. 1. 31. 01:00
  • 무비킴 감사합니다. (_ _)(그저 인사만) 2010-12-14 02:06:00
  • 저는 오늘, 삼성 코엑스에서 열리는 시그라프 아시아 2010 에 갑니다. 부스 만들어놓고 있을테니 혹시 참석하시는 분들 서울에서 뵙죠.(오랜만에 대전 벗어난다 으하하) 2010-12-15 11:04:32
  • 여기는 시그라프 아시아 2010 랩부스!!(me2mms me2photo) 2010-12-16 15:57:29

    me2photo

  • 정신을 차리고 보니 12월 23일이었다.(너무 일찍 정신을 차렸어) 2010-12-23 23:34:05
  • 크리스마스 이브에 논문을 쓰며, 연구에 대해 느끼는 것 2가지. 하나. 세상에 혼자 할 수 있는 일은 아무것도 없다. 둘. 그럼에도 불구하고, 결국 모든 것은 스스로 해내야만 한다.(폭풍 라이팅!) 2010-12-24 16:30:49
  • 연구실에서 혼자논문쓰고있는데 카이스트학생들이 연구실에 새벽송을돌면서불러주네요 참 좋은일하는 친구들입니다 그들이주고간 먹거리(me2mms me2photo) 2010-12-25 01:31:44

    me2photo

  • 앗 화이트 크리스마스(깨알같은 하얀눈) 2010-12-25 23:09:37
  • 크리스마스가 지난 지금, 내년의 크리스마스를 맞을 나에게 부탁한다. 제발, 올해처럼 기숙사에서 홀로 너구리에 햇반을 말아먹는 우울하고 청승맞은 크리스마스는 보내지 말라고.(그렇다면 즐겁고 경쾌하게 짜파게티를 끓이고 있을지도 모르지.) 2010-12-26 03:27:10
  • 엇, 너무 멋지게 나왔다. 라비, 벤머, 디지털 미개인까지… 닭사줘서 special thanks 에 들어간 Crescendo 까지 포함하면 연을 두고 있는 작품이 4개나 되네 . 크~;
    [영상] Ajou Univ. Division of Digital Media Demo Reel http://durl.me/4fzrp by 서리 에 남긴 글 2010-12-26 23:18:59
  • 무비킴 님의 말을 듣고 문득 그려보고 싶어서 만들어낸 꼬마시인 님의 찐빵 캐릭터. 발로 슥삭 그렸는데, ㅡ_ㅡ 엇 왜 닮았지(일단 좀 크게 그리면 됩니다. me2photo) 2010-12-28 03:03:07

    me2photo

  • 좋은 아이디어가 생각난 찐빵맨(찐빵맨 시리즈 1 me2photo) 2010-12-28 03:08:07

    me2photo

  • 여자친구로 인해 발그레해진 찐빵맨(찐빵맨 시리즈 2 me2photo) 2010-12-28 03:08:28

    me2photo

  • 연구가 잘 안되는 찐빵맨(찐빵맨 시리즈 3 앞으로 계속 업데이트예정 me2photo) 2010-12-28 03:08:54

    me2photo

  • 셀라비(네이버 영화 셀라비. 혹시나 했는데 정말 있네; me2movie 셀라비) 2010-12-29 12:48:09
    셀라비
    셀라비
  • 내가 요즘 어지간히 조급한가보다. 목소리가 커지고, 안절부절 못하며, 짜증이 늘고, 소란스러워지기 시작했다.(차분해지자. 침묵하라.) 2010-12-30 12:21:40
  • 시온의 자녀들아 너희는 너희 하나님 여호와로 말미암아 기뻐하며 즐거워할지어다. 그가 너희를 위하여 비를 내리시되 이른 비를 너희에게 적당하게 주시리니 이른 비와 늦은 비가 예전과 같을 것이라 (요엘 2:23) - 2011년 올해, 내게 주어진 말씀.(새해는 언제나 교회에서 송구영신 예배로 맞는 것이, 나에게 가장 맞게 느껴진다. 올해 내게 주어진 말씀. 이른 비와 늦은 비.) 2011-01-01 03:13:51
  • CASA2011 에 논문을 제출했습니다. 도와 주신 모든 분들. 특히 헌신스럽게 수고해주신 병국이형, 그리고 영호에게 정말로 감사하다는 말씀을 전합니다.(그리고, 다시 시작!) 2011-01-04 22:08:43
  • 이런 메일이 와 있더라고요. 뭔가, 되게 기분이 좋았습니다. 'Author' 라니. 내가.(후아;; me2photo) 2011-01-05 07:14:39

    me2photo

  • 요청받은 투덜 찐빵맨(투덜투덜 나는 잘 본적없지만 me2photo me2photo) 2011-01-05 07:33:07

    me2photo

  • 영화를 사랑하는 찐빵맨 (응?)(남들보다 더욱 각별한 찐빵맨의 영화사랑 me2photo) 2011-01-05 07:33:37

    me2photo

  • 연구실에 일찍 출근한 날이면 맛볼수있는, 연구실에서 바라보는 일출.(me2mms me2photo) 2011-01-07 08:04:24

    me2photo

  • 새다(새다 새 me2photo) 2011-01-09 20:43:44

    me2photo

  • 마야에서 손쉽게 Skeleton 을 렌더링 할 수 있도록 만들어 주는 파이썬 스크립트를 짜 보았습니다. 필요하신 분들은 자유롭게 사용하세요~(Maya Python Script Solid Skeleton me2photo) 2011-01-10 21:32:23

    me2photo

  • Solid Skeleton using Python 이 하루만에 버전 2.0 이 나왔습니다; (요구에 의해) UI 가 추가되었고, 실시간으로 조인트 크기와 모양을 변경할 수 있습니다. 유용하게 쓰세요!(Maya Skeleton Rendering Solid Skeleton using Python Script me2video) 2011-01-11 03:46:53

  • 이번겨울은 참 눈도많이오고 춥군요 딱히 누가 결혼한대서 이러는건 아니야(me2sms) 2011-01-15 04:46:18
  • 잔혹한 날씨고, 잔혹한 시간이다.(힘들어 하는 사람을 지켜볼수밖에 없다니;) 2011-01-16 02:34:44
  • 영화가 너무 보고싶다. 그래서 혼자서 극장으로 달려갈 계획임(자전거 타고 둔산 CGV까지 고고고고거곡) 2011-01-17 19:19:06
  • 영하10도의 날씨를 뚫고 자전거를 타고 학교에서 여기까지 온건 객기였나 끝나면 열두시 넘을텐데 어떻게가지 ㅠㅠ(me2mms me2photo) 2011-01-17 21:01:09

    me2photo

  • 하루종일 폰을 기숙사에 두고왔는데 열어봐도 별다를게 없구나. 미투나 해야지.(me2sms) 2011-01-25 08:32:52
  • '반쪽바리' 소리를 들으면서도 '이충성'이라는 이름을 버리지 않은, 일본에 귀화한 한 축구선수. 그의 인터뷰와, 그의 일대기가, 기성용의 저열함과 왜 이렇게 극명히도 대비될까.(이번 대회의 승리자라는 영예는 그의 몫으로 예비되어 있었을지도.) 2011-01-30 13:18:25

이 글은 cimple님의 2010년 12월 14일에서 2011년 1월 30일까지의 미투데이 내용입니다.

posted by cimple 2011. 1. 11. 03:42



Solid Skeleton 이 하루만에 버전 2.0 이 나왔습니다. 사용자 입장에서 조금 큰 폭으로 바뀌었기에 아예 버전을 2.0 으로 한 단계 높였습니다. 강화된 기능은 다음과 같습니다.


1. UI 제공
2. 조인트의 크기와 모양을 실시간으로 변환 가능


다음은 시연 동영상입니다.






쉐이더까지 자동으로 입힐 수 있으나, 렌더링은 각자 용도에 맞게 하시면 되리라 생각되어 구태여 넣지 않았습니다.

그럼 유용하게 사용하세요!





Version 2.1 로 업그레이드 되었습니다.

수정 사항은

- 캐릭터가 하나의 조인트 구조가 아닌 여러 개로 따로 떨어진 조인트 구조를 가졌을 경우, 각각의 조인트의 root 를 선택하고 generate 버튼을 계속 누르는 방식으로 추가할 수 있습니다.

- 물론 처음부터 root 에 해당하는 모든 조인트를 선택하고 generate 버튼을 눌러서 생성할 수도 있습니다.

아래는 시연 동영상입니다.




ThEnd.

posted by cimple 2011. 1. 10. 21:23




캐릭터의 Skeleton 을 렌더링 하고 싶을 때가 있지요. 하지만 조인트는 렌더링 되지 않습니다, 따라서 해당 위치에 sphere 와 cylinder 를 넣어주는 마야 파이썬 스크립트를 짜 보았습니다.

원래 Solid Skeleton 이라는 멜이 있지만, 해당 스크립트는 cone 을 생성하는 방식으로 되어 있어서, 파이썬 버전으로 새롭게 만들었습니다.

사용 방법은 간단합니다.



1. root 조인트를 선택
2. makeSolidSkeleton() 실행



이렇게 하면 됩니다,
(물론, 파이썬 스크립트이므로 스크립트 에디터의 파이썬 탭에서 실행해야 하는 건, 다들 아시죠?)

그리고 파라미터를 조절해서 스켈레톤의 구와 막대의 크기를 조절하는 것이 가능합니다.

makeSolidSkeleton(ballScale, edgeScale)

여기 ballScale 과 edgeScale 의 값을 바꾸어 주면 됩니다. 기본값은 둘다 1.0 으로 되어 있습니다.

ex) makeSolidSkeleton(2, 0.5)
이렇게 하면 구는 두배로 커지고 edge 는 절반으로 가늘어 질 것입니다.


마음껏 사용하시고, 버그나 수정사항이 발견되면 말씀해 주세요!

ThEnd.
posted by cimple 2010. 8. 12. 19:12

1. Python Scripting 시작하기

Maya 에서 Python Scripting 을 가장 간단히 할 수 있는 방법은 MEL 과 똑같이 Script Editor 를 사용하는 방법과 Command Line 을 사용하는 방법이다.

하지만 Python Script 를 실행하기 위해서는 해당 실행창에서만 실행 가능하다.

Script Editor 에서는 Python 탭에서 실행해야 하고,



Command Line 에서는 좌측의 MEL 글자를 클릭하면 Python 스크립트 입력창으로 바뀌게 된다.




2. Hello World 찍어보기

Script Editor 의 Python 탭에서 간략하게 Hello World 를 찍어보자.
다음과 같이 입력하면 된다.


print "Hello, World!"






이렇게 입력한 뒤 실행하면 위쪽의 History 창에 실행 결과가 표시될 것이다.
다음도 가능하다.


print 25
print 25 / 2
print 25.0 / 2
print 25 / 2.0






3. Cube 하나 만들어보기

Python Script 를 실행하기 위해서는 maya 의 특정한 모듈들을 import 해야 한다.
그리고 그 모듈 안에 들어 있는 명령어를 실행하는 방식으로 이루어진다.

요약하면

Step 1) 필요한 Maya 모듈 import
Step 2) 필요한 명령어 실행


순으로 이루어지는데, 큐브를 하나 생성하려고 하면

ex)
import  maya.cmds
maya.cmds.polyCube()


이런 식으로 실행해야 한다.



import 는 한 번만 해도 되지만, 명령어를 실행할 때에는 매번 위와 같이
maya.cmds.명령어()
의 형태로 입력해야 하며, 커맨드를 하나의 function 처럼 인식하므로 뒤에 괄호 () 를 붙여 주어야 한다.

물론 저렇게 입력하는 것이 tedious 한 일이므로, 좀더 간결하게 입력하기 위해서

import maya.cmds as mc

이렇게 mc 라는 단축어로 import 하면 앞으로

mc.polyCube()

로 실행해도 정상적으로 실행할 수 있다.





4. MEL command 의 Echo 를 Phython Command 에서 실행하는 방법
(Phython Command 에 각종 Flag 를 추가하여 실행하는 방법)


마야의 메뉴를 클릭하거나 Shelf 에 있는 버튼 등을 눌러서 특정 명령을 실행하면, Script Editor 에서 그에 해당하는 커맨드가 표시되는 것을 확인할 수 있다.

이러한 식으로 커맨드의 Echo 를 받아 스크립트를 작성하는 방법을 자주 활용하게 되는데, Python Command 에서 이러한 MEL command 의 Echo 를 받아서 실행하는 방법은 다음과 같다.

MEL command 에서는 polyCube 를 생성할 때

polyCube -w 1 -h 1 -sx 1 -sy 1 -sz 1 -ax 0 1 0 -cuv 4 -ch 1

이런 식으로 명령어가 호출되는데, Phython command 에서는 다음과 같이 하면 된다.

(위에서 import 를 단축어로 받아왔다고 가정한 후)

mc.polyCube (w=1, h=1, d=1, sx=1, sy=1, sz=1, ax = (0, 1, 0), cuv = 4, ch = 1)

여기서 ax = (0, 1, 0)  과 같이 하나 이상의 배열 형태로 되어 있는 Flag 에 주목하자.



이 외에, scale 을 조정할 때 Maya command 에는 다음과 같이 표현된다.

scale -r 4 4 4;

하지만 여기서 -r 은 numeric value 를 attribute 로 받는 Flag 가 아니라, relative 하게 크기를 조절할 것인지를 결정하는 Boolean type Flag 이다. 따라서 이를 Python script 에서 실행하고 싶으면

mc.scale(4, 4, 4, r=True)

이런 식으로 실행해야 한다.



또 한 가지. polyBevel 같은 명령어의 경우, 커맨드의 맨 마지막에 해당하는 오브젝트의 이름이 오게 된다.

polyBevel -offset 0.5 -offsetAsFraction 1  ......... -angleTolerance 180 -ch 1 pCube1;

python script 에서는 이 때 해당하는 오브젝트의 이름을 맨 앞으로 가지고 오고, 쌍따옴표를 붙인다.

mc.polyBevel ("pCube1", offset=0.5, ...., ch=1)



MEL 과 마찬가지로 Script Editor 에서 완성된 Python script 를 드래그 한 후 가운데 버튼을 클릭하고 shelf 에 드래그&드랍하면 아이콘이 생성된다. 이것을 클릭해서 스크립트를 실행할 수 있다.





Script Editor 에서 각종 명령어들 (예를 들면 scale 등) 의 flag 를 확인하고 싶다면 해당 명령어를 드래그하고, 우클릭을 하고 있으면 나타나는 메뉴에서 Quick Help 라는 메뉴를 확인할 수 있다. 클릭하면 우측 하단에 해당 명령어에 해당하는 flag 들이 표시된다. 하지만 어떤 type 을 사용하는지까지는 표시되지 않아서 효용성을 잘은 모르겠다;






ThEnd.
posted by cimple 2010. 3. 18. 15:40

랩 후배가 어느날 물었다.

"형, 커브 그리는데 CV 커브가 좋아요, EP 커브가 좋아요?"

"...그냥 CV 커브 써."



아무 생각 없이 curve 를 그려서 사용하지만, 사실 curve 에 대해서 정확하게 알지 못하고 그냥 대충 만들어서 사용하는 경우가 대부분이다.

그래서 오늘은 이제까지 내가 알고 있는 Maya Curve 에 대한 지식들을 정리해 보고자 한다.



1. Maya Curve 의 구조에 대하여

Maya Curve 는 다음과 같은 구조로 되어 있다.


(curve 를 생성한 뒤 object 모드에서 선택하고, Attribute editor 에서 Component display 의 속성들을 체크해 주면 CV, EP, Hull 등을 볼 수 있다.)


CV : Control Vertex 이다. Maya 는 curve 를 생성할 때 Nurbs curve 방식으로 생성하기 때문에, 하나의 curve 를 생성하기 위해서는 적어도 4개의 point 가 필요하다. 이 point 들을 Control vertex 라고 부른다. 따라서 이 CV 들을 조작함으로써 curve 를 edit 할 수 있는 것이다.

nurbs curve 가 어떤 식으로 생성되는지는 다음의 wikipedia 링크 참고.
http://en.wikipedia.org/wiki/Non-uniform_rational_B-spline


Convex Hull : CV 들을 연결한 선이라고 보면 된다. 4개의 CV로 하나의 Nurbs curve 가 만들어 질 때, 그 Nurbs curve 는 CV들을 연결한 Convex hull 안에 반드시 위치하게 된다.
이 Convex Hull 을 직접 조작하거나 하는 경우는 없지만, Computer Graphics 에서 여러 계산을 할 때 Covex hull 은 꽤나 유용한 의미를 지닌다.


EP : Edit Point 이다. EP 는 curve 위에 놓여지며, curve span, 즉 curve 를 얼마나 나누어 놓았느냐에 따라 갯수와 위치가 정해지게 된다.


예를 들어 위 그림처럼, curve 를 만든 다음 curve span 을 4를 주면, curve 는 4개의 구간으로 나뉘게 되고, 따라서 EP 는 curve 를 4등분하는 각각의 위치에 놓여지게 된다.






따라서 CV curve 로 생성하든, EP 커브로 생성하든 똑같은 Nurbs curve 가 생성되기 때문에 차이는 없다. 단지 커브를 사용하는 목적에 따라서 어떤 방식으로, 또 어떤 기준으로 커브를 생성하는 것이 좀 더 직관적이고 편할 것인가에 대한 차이가 있을 것이다.

(이 포스트는 차후에 지속적으로 업데이트 될 예정입니다.)
(업데이트 목록들)
- construction plane 관련내용
- curve degree
- knot spacing
- curve edit



ThEnd.

posted by cimple 2009. 11. 13. 07:27

2012
감독 롤랜드 에머리히 (2009 / 미국, 캐나다)
출연 존 쿠색, 아만다 피트, 치웨텔 에지오포, 탠디 뉴튼
상세보기

영화 2012 포스터.



스타게이트, 인디펜던스 데이, 고질라, 투모로우.

이 정도의 영화 제목만 나열하더라도, 롤랜드 에머리히라는 감독이 우리에게는 꽤나 친숙한 영화들의 감독이구나, 하는 것을 알 수 있습니다. 또한, 이 영화들에게서 느껴지는 어떠한 '공통적인' 느낌들도 우리는 알고 있지요. 화려한 예고편을 보거나, '출발! 비디오 여행' 과 같은 프로그램에서 소개해 줄 때 '저 영화 좀 끌리는데?' 하는 느낌을 주게끔 만드는 그런 영화들. 그런데 직접 영화를 보고 나면 드는 느낌이, 그러니까 굳이 그 느낌을 개인적으로 비유하자면 김치 없이 라면을 먹는 듯한(?), 뭔가 좀 진짜 맛있는 음식 먹었다는 느낌은 안 드는, 그런 영화들. 차분하게 집에서 DVD 같은 것으로 보기에는 왠지 좀 께름칙하고, 오히려 극장에 앉아 쏟아지는 물량공세를 눈과 귀로 즐기는 것이 경제적으로 느껴지는 영화들. 아닌가요?

<2012> 는 바로 그 롤랜드 에머리히 감독의 영화입니다. 영화를 보기 전부터, 영화를 보는 도중, 그리고 영화를 보고 나서. 그 느낌, 그 컨셉. 정말로 그동안 겪었던 그 공식 그대로 충실합니다. 왠지 영화를 보기 전부터 '이 영화 이러지 않을까?' 하는 마음으로 기다리고 준비했다가, 정말 정직하게도 예상하던 딱 그대로의 느낌을 주는 영화. 영화를 볼 때 으레 따르는 운이나 복불복의 느낌 없이, 자판기에 동전 넣으면 그 가격에 맞는 상품이 튀어나오는 식으로 돌려주는 영화. 그런 면에서 롤랜드 에머리히는 자신의 분명한 스타일을 구축하고 있다고 해도 틀린 말은 아닐 겁니다.

아, 그렇다고 정말 제가 <2012> 의 AtoZ 를 모두 예상하고, 영화 전체가 모두 제 손바닥 위에서 놀았던 것은 아닙니다. 아무리 지레짐작하고 아무리 가늠해도, 도저히 제가 예상하고 감당할 수 있는 수준 밖을 보여준 것도 있었습니다. 말할 것도 없이, 그 엄청난 CG 였습니다.



<2012> 의 CG, 태풍 메치기.

뜬금 없이 만화 이야기를 아주 잠깐만 할까요? '신 공태랑 나가신다 - 유도편' 에 다음과 같은 에피소드가 있습니다.
유도편의 주인공 격인 샌님 '시로' 는 환상의 필살기 '태풍 메치기' 를 선보이는데, 라이벌인 '대오' 가 이 태풍 메치기를 하지 못하게 원천봉쇄합니다.

신 공태랑 나가신다 - 유도편 이야기.



그 때, 시로가 이 봉쇄를 깨기 위해 선택한 방법이 무엇일까요? 엇박이나, 변칙적 기술이 아니라, 그냥 '더욱 더 큰 힘' 으로 메다꽂아버립니다. 그러면서 무도는 '강'도, '유'도 정답이 아닌 '강유일체' 라는 멋진 말이 나오죠.

영화 <2012> 에서 느꼈던 CG도 이것과 비슷한 느낌이었습니다. CG? 당연히 예상 했지요. 대놓고 롤랜드 에머리히 감독에다가 대놓고 재난영화. 어차피 스토리텔링이야 할리우드 답안지 그대로 베꼈을 테고, 처음부터 끝까지 CG로 끝장을 볼 영화 아니냐. 게다가 같은 CG 를 하는 사람으로서, 얼마나 스펙터클한 CG로 러닝타임을 채워 넣었는지, 어디 한번 너희가 만든 것 보여줘 봐라. 조금이라도 흠잡을 데 나와만 봐라. 하는 일종의 억하심정 잔뜩 가지고 극장에 들어섰습니다.

헌데, 그런 저를 어떠한 변칙도 없이, 영화 <2012> 는 그냥 순수하게 CG의 힘만으로 메쳐버리더군요. 영화의 초반부, LA 전체가 말 그대로 '땅이 꺼져버리는' 씬에서, 저는 정말 숨도 제대로 쉬지 못했습니다. 정말로요. 땅이 제멋대로 갈라지며 춤추다가 끝도 없이 무너져내리고, 빌딩이 산산히 바스라져 붕괴되고, 지하철이 공중을 날아다니며 고가도로가 엿가락처럼 휘어버리는, 정말로 세상이 망해버리는 듯한 아비규환. 단지 그 씬 하나만 가지고도, 이제까지의 모든 재난영화의 그것과 맞먹는 듯한 스케일이다 하는 느낌을 받았습니다. 처음엔 놀랐고, 그 다음엔 질렸으며, 그 다음엔 '이제 이런것까지 나왔는데 CG로 뭘 더하나?' 하는 생각마저 들더군요.

숨조차 쉬지 못하게 만드는 CG


사실 영화의 CG는 그 이후로 디크레센도(decrescendo)의 느낌입니다. 러닝타임도 제법 길고, 워낙 전지구적 스케일의 지각변동이어서 감각이 무뎌진 것도 있겠지만, 일단 초반부의 도시 붕괴 장면에 공을 많이 들였다는 것은 확연했습니다. 하지만 그 이후로도 거의 흠잡을 데 없이, <2012> 의 CG는 무척 훌륭합니다. 디크레센도의 느낌이 난다는 것은 뒤로 갈수록 별볼일 없어진다는 건 아니고, 영화의 후반부에 히말라야 산맥을 넘어오는 쓰나미 같은 것을 보면서 사실 좀 '해도 너무한다' 싶은 생각이 들어서지요. 좌우지간 CG에 쏟아부은 1500억원이라는 제작비가, 천문학적 돈의 액수가 아닌 그 결과물로 피부에 와 닿았습니다. 100억짜리 영화 한편 찍는것도 큰일이나 난것처럼 떠들썩한 우리나라에서는, 이런 데에 '넘사벽' 이라는 표현을 쓰는거구나, 싶었죠.

 

이혼한 가족, 젊은 과학자, 미국 대통령, 돈, 성경, 희생.

 
위의 키워드들만 나열해 놓으면, 대충 영화를 보지 않으신 분들도 2012 의 스토리 라인을 구상해보실 수 있으실 것 같습니다. (참 신기하죠?) 존 쿠삭이라는 배우는 영화의 중심에 있지 않으면서, 누군가 한 사람정도 주인공은 있어야 하기에 존재하는, 그 정도 무게감을 제공하기에 적절한 배우였던 것 같습니다. 바로 그 존 쿠삭이 맡은 이혼당한 남편, 그리고 전 부인, 반항기 있는 아들, 그리고 귀여운 딸로 구성된 가족. 그리고 재앙을 적절하게 파악하고 대처할 젊은 과학자가 등장하고, 숭고한 가치를 신념으로 삼는 헌신적인 리더인, 미국 대통령. 그 대통령의 딸. (캐릭터들이 전형적이어도 너무 전형적이네요; 어쨌든.) 그들이 적절하게 얽혀 만들어 나갈 이야기라는 것이 사실 별거 있겠습니까. 멸망하는 지구를 사람의 힘으로 막을 수 있는 것도 아니고, 열심히 도망다닐 수 밖에요.

그 다운 연기를 했던, 존 쿠삭.

2012년으로 끝나 있는 마야인(재미있게도 Maya 는 영화에서 가장 널리 쓰이는 3D 컴퓨터 그래픽 소프트웨어이기도 하죠)의 달력에서 착안한 이 영화의 스토리 라인은, 전체적으로 성경에 나오는 '노아의 방주' 이야기와 오버랩되는 부분이 많습니다. 2012년 태양 활동으로 인해 지구의 핵이 들끓게 되고 그로 인해 지표면이 계란껍질처럼 바스라져 버린다는 과학적 고증(!)을 가지고, 그 재앙 속에서 인류는 어떠한 모습일까, 알아보는 것이 영화의 주된 목적이지요. 영화에는 말씀드렸다시피 정말로 '노아의 방주' 가 등장합니다. 다행히도 소설 '파피용' 처럼 우주로 도망가는 우주선을 만들지 않아서 영화 전체가 코믹스럽게 변해버리는 것만은 막았는데, 그렇다고 히말라야 산속 한 가운데에 만든 커다란 방주에 코끼리, 기린 등을 날라다가 싣는 장면까지 설득력있어 보이지는 않았습니다. 이 외에도 브라질의 거대 예수상이 무너지고, 바티칸에서 인류 최후의 미사를 드리다가 성 베드로성당이 무너져서 사람들을 깔아뭉갠다거나 하면서, 감독은 거대 재앙 앞의 종교와 신앙이라는 부분을 대해 빈번하게 툭툭 건드립니다. '지구가 멸망하는데 무슨 종교 타령이냐' 하는 식의 까칠함이 묻어 있었지만, 그렇다고 그것이 비하라거나 조롱으로까지 이어지지는 않습니다. 적당히 까칠합니다.

문제는 '누가 방주에 타느냐' 겠죠. 글쎄요. 누가 타야 할까요? 영화의 답안은 꽤나 현실적입니다. 돈 내고 타라는 거죠. 영화에서 한 개인이 자신의 생명을 보존하는데 지불해야 하는, 현대판 '노아의 방주' 의 뱃삯은 10억 유로입니다. 1조 7천억정도 되는군요. 우리나라에서는 누가 살아남을 수 있을까요? 겨우 손가락을 헤아릴 정도일 것 같습니다.
인류에게 귀중하다고 느껴지는 학자, 예술가 등을 선별해서 태워야 할 것 같은데, 그냥 별 거 없이 마지막 인류로 살아남을 수 있는 자격을 부여하는 것이 돈이라는 게 좀 어이없습니다. 하지만 나름 납득할 만한 이유는 있습니다. 그 돈을 받아야 그 정도 방주를 제작할 수 있다는 거죠. 하지만 그렇다고 모든 사람이 10억 유로를 내고 탑승하는 것 같지는 않습니다. 미국 대통령의 딸은 그냥 미국 대통령의 딸이어서 탄 것 같고, 미국의 관료들, 방주의 승무원들은 그냥 관료이고 승무원이기에 탄 것 같습니다. 그런데, 그렇다면 그 사람들이 살고, 밖의 사람들이 죽어야 할 마땅한 이유는 무엇일까요? 영화 <2012> 에서 한번 깊게 생각해 볼만한 주제, 화두는 바로 이것뿐이었습니다.

 

누가 살아야 하고, 누가 죽어도 될 것인가.


영화는 의외로, 우리에게 쉽지 않은 질문을 던졌습니다. 다른 사람을 위해서 나를 희생할 것인가 말 것인가? 이런 질문은 오히려 간단한 편이죠. 당신에게 삶의 선택권이 있다고 합시다. 누군가는 살고, 누군가는 죽어야 할 때, 당신은 어떠한 결정을 내릴 것입니까?

다른 사람보다 당신이 살아야만 하는 이유가 있다면, 그것은 무엇입니까? 아니면, 당신은 당신보다는 다른 사람을 살게끔 할 것입니까?

만약, 다른 사람을 살게 한다면, 어떤 사람을 살릴 것입니까? 왜 그 사람은 다른 사람보다 살 만한 가치가 있는 것입니까?

비슷하지만, 반대로, 누군가를 죽게 내버려 두어야 한다면, 어떤 사람을 죽게 놔둘 것입니까? 왜 그 사람은 그렇게 되어야만 합니까?

누가 살아남은 자가 될 것인가.

영화는 이 문제를 건드리고는 있지만, 진지하게 다루고 있지 못합니다. 아니, 진지하게 다루기는 하지만, 전혀 그 방법이 틀려먹었습니다. 바로 이 문제를 가장 직접적으로 다룬 장면에서, 그 어긋난 표현 방법은 몹시도 어색하기 짝이 없는 것이었습니다.
영화 중에, 여러 대의 방주중 한 대에 문제가 생겨서, 수많은 사람들을 태우지 못하는 상황이 발생합니다. 섣부르게 문을 열어 주었다가는 그 과정에 무언가 차질이 발생해서 전체가 피해를 입을 수도 있다는 것이지요. 영화는 이 장면을 엄청나게 부풀립니다. 그리고 인간으로서의 사랑과 존엄, 인륜을 운운하면서, 이 사람들에게 문을 열어 주는 것을 굉장히 거룩하고 숭고한 결정인 것처럼 포장합니다. 자식들에게, 후대에게 무엇이라고 할 것이냐 하면서 말이죠. 결국 방주에 탑승하고 계시던 각 나라 국가 원수들이 (그것도 G8 국가들) 하나로 뜻을 모아서 문을 열어 주자는 고귀한(?) 결정을 내리고, 문을 열어 주고, 밖에서 바둥거리던 사람들이 추가로 방주에 탑승하게 됩니다.

이 장면에서, 당시에는 뚜렷한 이유도 없이, 감동은 커녕 지독한 위화감을 느꼈는데, 영화를 보고 나니 그 위화감의 실체가 드러났습니다. 먼저 일단 밖에서 동동거리던 그 사람들은 전 세계 모든 인류가 어떻게 되든 아랑곳 하지 않고, 자기 자신들만 생존하겠다고 10억 유로를 내고 비밀리에 방주 탑승권을 구입한 사람들입니다. 또한, 그들에게 문을 열어주네 마네 하면서 고뇌에 차 있다가 인간다운 인간을 위해서 문을 열어준다는 결정을 내린 사람들 또한 방주 안에 있던 사람들입니다. 자식들, 후손들 운운하면서 뭐라 하기에는 그들은 벌써 전세계 수십억의 인구를 감쪽같이 속이고 자신들만 살겠다 도피한 비겁한 이기주의자들입니다. 폐허가 되어버린 세상 도처에 남겨져 있는 '보통 사람들' 과, 방주 주위에서 옥신각신 하는 '선택받은 사람들' 간의 차이는 이미 극명합니다. 영화 내내, 그들은 그 돈없고, 힘없고, 이름없이 죽어가는 사람들에 대한 어떠한 인간적인 공감도 보내주지 않습니다. 단지

"그들도 알 권리가 있다. 어머니는 아들을 다독여주고, 아버지는 딸에게 사과를 할 시간을 주어야 한다."

라며, 그들이 죽음을 준비하면서 맞이할 수 있도록 하자. 라는 식의 배부른 소리를 하는 것이 방주 바깥의 사람들을 대하는 그들의 태도입니다. 감독의 태도이기도 하지요. 삶과 죽음이라는 결코 가볍지 않은 이 모든 질문에 대해서, '이런 상황에서는 어쩔 수 없는 것 아니냐' 라면서 영화는 어물쩡 넘어갑니다. 그래, 하긴 그렇긴 하지. 지구가 망한다는데 뭘 어쩌겠어. 하면서 그냥 수긍해 버릴 수도 있지만, 과연 그것이 전부일까요? 방주 안에 있는 자와 방주 밖에 있는 자. 그 괴리에저 빚어지는 깊은 고뇌. 이러한 고민과 감정들을 정말 진지하게 다루었다면, 이 영화는 정말 인간 본성과 가치의 심연까지 들여다볼 수 있는 깊이있는 영화로 탄생했을 지도 모릅니다. 하지만 그러지 못하였고, 그것이 롤랜드 에머리히 영화의 결정적인 한계입니다.

답은 물론 없습니다. 삶과 죽음의 선택에 어떤 정답이 있겠습니까. 하지만, '어차피 답 없으니까 많이 생각할 거 없어' 라고 스리슬쩍 넘겨버리는 것이 아니라, 답 없는 문제이지만 지독히도 고민하고 또 고민해서, 결코 그 문제가 쉬운 문제가 아니라는 것 만큼은 분명하게 각인시켰어야 하는 것이 아닌가 합니다. 단지 살아남기 위해 아둥바둥 한다고 해서 인생이 소중하게 여겨지는 것이 아니고, 자기의 자식을 방주 위에 던져넣고 낭떠러지에 떨어지는 억만장자 아버지의 모습에서 거룩한 희생을 발견할 수 있는 것이 아니라, 누구나 공평한 삶과 죽음의 경계선에 주어지는 '삶의 자격'을 치열하게 고민하는 모습에서 인간 존엄의 가치를 재발견할 수 있지 않았을까 생각합니다. 방주 안에 안전하게 살아남은 입장에서 방주 밖의 절규를 보며 슬프다 눈물짓는, 오만하기 짝이 없는 악어의 눈물이 아니라, 진정으로 그들의 죽음에 대해 아파하고 어떻게든 그들에게 가까이 가려고 노력해서 '하나된 인류, 진짜 인간' 이라는 공감을 줄 수는 없었을까요?

그런 면에서 어떤 부분에서는 <2012> 는 불쾌함마저 느껴지는 영화였습니다. 아니, 어쩌면 저는 그 안에서 제 안의 이기적인 모습을 발견했을런지도 모를 일이죠. 그래서 불쾌함보다는 불편함이 맞을지도 모릅니다. 모든 것이 무의미해지고 모든 것이 사라져버리는 순간. 과연 저는 무엇을 하고 있을까요? 그 때의 저는 어떤 사람일까요?

그래도 다행인 건, 오늘도 아침 해는 조용히 떠오르고 있고, 우리가 딛는 땅은 변함없이 건재하다는 것입니다.

그래서, 아직 우리는 고민과 소통을 통해 서로 좀더 나은 사람이 될 수 있는 기회들이 주어져 있다는 사실에, 새삼스럽게 가슴 선뜩하도록 안도하게 만드는, 영화 <2012> 였습니다.

ThEnd.

posted by cimple 2009. 11. 7. 06:58


squash&stretch 는 애니메이션 10대 법칙중 하나입니다. 디즈니의 카툰풍 애니메이션을 보면, 캐릭터들의 팔, 다리, 얼굴 등등이 무지막지하게 눌렸다가, 쭉쭉 늘어나는 것을 볼 수 있습니다. 캐릭터들의 동작을 더욱 역동적이어 보이게 하고, 오히려 더욱 실재감이 느껴지는 애니메이션을 위한 중요한 요소이지요. 
때문에, 3D 애니메이션에서도 이러한 squash&strech 를 구현할 수 있도록 해 주는 Stretch IK 는 셋업에 있어서 중요한 요소 중의 하나라고 할 수 있습니다.

팔 다리가 이렇게 쭉쭉 늘어나야 재미있겠죠?

그럼 마야에서 어떻게 하면 Strech IK 를 만들 수 있을 것인지, 알아보도록 하겠습니다.

stretch IK 를 위한 준비물들

stretch IK 를 만들기 위해서는 다음과 같은 준비물들이 필요합니다.

1. spline IK
2. arc length
3. multiply divide node

그럼 이러한 준비물들이 필요하다는 사실을 염두에 두고, stretch IK 를 만들어 보도록 하겠습니다.


1. 조인트를 그려줍니다.


일단 조인트를 바닥에 아무렇게나 그려 보도록 하겠습니다.


2. 조인트에 spline IK 를 설치합니다.




spline IK 는 IK 를 nurbs curve 로 contol 할 수 있도록 하여서, 척추 등의 부드러운 움직임을 표현하는 데 효과적으로 사용되는 IK 시스템입니다. spline IK 를 설치하면 그림과 같이 IK 와 함께 nurbs curve 가 생성되는데, 이 nurbs curve 의 control vertex 를 조작하면 조인트를 부드럽게 움직일 수 있습니다. spline IK 를 생성하는 옵션에서 span을 늘려 주면 CV 들이 늘어나면서 좀더 부드러운 curve 를 얻을 수 있는데, 3 정도로 준 후 조작을 간편하게 하기 위해서 CV 들을 2개씩 묶어서 클러스터를 설치하겠습니다.




3. Nurbs curve 의 arc length 를 구합니다.

Arc length 는 nurbs curve 의 길이입니다. 만약 유저가 spline IK 의 nurbs curve CV 를 조작한다면, curve 의 arc length 가 달라지게 될 것입니다. 원래 길이에서 달라진 길이의 변화량을 측정해서, 그 값을 조인트의 size 에 곱하면 조인트가 효율적으로 stretch 된다는 것이 stretch IK 의 기본 개념입니다.

마야 메뉴의 Creates > Measure Tools > Arc Length Tool 로 이 nurbs curve 의 arc length 를 구할 수 있습니다.




자, 저는 24.456062 라는 값이 나왔군요. 이 값은 꼭 필요한 값입니다.


4. multiply divide 노드를 만듭니다.

그럼 아까 설명했던 대로 nurbs curve 의 arc legnth를 가지고, (변화량/절대값) 을 구해야 할 것입니다. 이러한 나눗셈을 하기 위해 필요한 것이 multiply divde 노드입니다.

multiply divide 노드를 만드는 방법은 2가지가 있습니다. Maya>Hypershade 에서 multiply divide 노드를 찾아서 생성할 수 있습니다.




또는 간단하게 마야 커맨드 창에 다음과 같이 입력해도 multiply divide 노드를 생성할 수 있습니다. 물론 이렇게 하면 노드의 이름까지 정해주면서 만들 수 있겠지요.


이렇게 만들어진 multiply node 에, 이제 '변화량' 과 '절대값' 에 해당하는 값을 입력해 주어야 할 것입니다.

multiply divide 노드는 input 1X-input 2X 에 들어온 값을 계산해서 output X 로 내보내는 기능을 하고 있는 노드입니다. (물론 마찬가지로 input 1Y, input 2Y 를 계산해서 output Y 로 내보냅니다.) 나눗셈을 할 때에는 1X 를 2X 로 나누어서 몫을 출력합니다. 즉 변화량을 1X 에 입력하고, 절대값을 2X 에 입력하면 되는 것입니다.

먼저, multiply divide 노드를 attribute editor 로 열어서 계산을 divide 로 바꾸어줍니다. 그리고, input2X 에 아까 계산했던 arc length 의 길이. 24.456062 를 입력합니다.



그리고 난 후, outliner 와 connection editor 를 엽니다. outlinder 의 display 에서 DAG object only 를 해제하면 DAG object 들이 아닌 노드들도 확인할 수 있습니다. 그리고 Shapes 를 체크하면 감추어져있던 shape 노드들도 확인할 수 있습니다.

먼저 arc length 노드는 spline IK 를 만들면서 생성된 nurbs curve 의 shape 노드로 존재합니다. 찾아서, connection editor 의 Outputs(from) 위치에 둡니다.
다음 우리가 아까 만들었던 multiplyDivide 노드를 찾아서 connection editor 의 Inputs(to) 위치에 둡니다.



그리고 난 후, connection editor 에서 arcLength 와 inputX 를 연결시켜 줍니다.


이렇게 하면, 아마 channel box 에서 다음과 같이 바뀌어 있는 것을 볼 수 있을 것입니다. 이제 input1X 를 input2X 로 나누어준 계산값이 outputX 로 출력되게 됩니다.


5. 계산된 값을 각 조인트의 scale 에 연결시킵니다.

이제 계산된 값을 조인트의 scale 에 연결시켜서 쭉쭉 늘이는 일만 남았습니다.
connection editor 에서 이제 우리가 만든 multiply divide 노드를 Outputs(from) 위치에 불러들이고, 각각의 조인트들을 Inputs(to) 위치에 불러들입니다. 그리고, outputX 와 각각 조인트들의 scaleX 에 연결시켜줍니다.



이제 다 되었습니다. 결과물을 확인해봅시다.





이런 식으로 간단한 stretch IK 를 만들어 보았습니다. 물론 좀더 발전적인 방법이 있을 수 있습니다. 그래도 혹시라도 어떤 분들이 도움을 받을 수 있다면, 보람된 포스팅이 될 것입니다.

쭉죽 늘어나는 팔다리를 만들어 봅시다!

stretch 하면 빼놓을 수 없는 이분.


ThEnd.

posted by cimple 2009. 11. 7. 05:29


리깅에는 많은 관심을 가지고 있었지만, 사실 리깅을 제대로 배워보거나 접해본 기회는 없었다.
학부 시절 수업시간에 2시간 편성되어 인체를 한번 리깅했었는데, 워낙 빠르게 진행되었고 원리나 구조를 배우기보다는 과정을 단지 따라하는 형태였다. 그나마 한번 해봤다는 경험이 많은 도움이 되기는 했지만, 리깅이라는 파트도 상당히 매력적이고, 장인정신과 전문가정신이 필요한 부분임에 분명한데 그 부분에 대한 좀 더 체계적인 배움이 없었다는 것이 아쉬움이라면 아쉬움이다.

비둘리 리깅을 절반정도는 객기로 덥석, 맡겠다고 한 다음. 꾸역꾸역 밤을 새워가면서, Due day 를 4~5일씩이나 미루어가면서 지금의 결과물에 이르렀는데, 사실 이번에도 내 스스로 뚝딱 만든 것은 아니고, 랩에 있는 리깅 고수 형에게서 거의 사사받다시피 비둘기 리깅을 배웠다. 이제껏 내가 알고 있던 대충 스켈레톤 박고, 컨스트레인 걸어서 컨트롤러 박고 하면 되겠지 뭐. 그런 리깅이 아니라, 정말 정확하고 아름다움이 느껴지는 리깅이라는 것이 어떠한 것인가 배우는 과정이었던 것 같다.

최종 결과물

뼈만 남은(!) 비둘기;;













ThEnd.