본문 바로가기

러프한 작업들

[R&D]Spring Controllers 와 Bone 을 이용한 계층적 움직임

 안녕하세요 아무개 입니다. 오랜만에 움직이는 뼈다귀란에 글을 올립니다.


 조금 예전 일이긴 합니다만, 회사 이펙터 분이신 (워낙 오랜세월 근무하셔서 사실 이펙터 보다

는 CG아티스트에 더 가깝다고 생각 될 정도로 지식이 풍부하신 분입니다 'ㅁ') 형님에게 문제의
 
동영상을 받으면서 이야기가 시작됩니다 ㅇㅁㅇ;;....


(출처 - 지인께서 웹 상에서 찾으심. 정확한 출처를 알게되면 수정하겠습니다.)


 잘 짜여진 튜토리얼 인지라.. 훌덕훌떡 보면서 따라하면 안성 맞춤이었습니다만..당췌 '어째서'

어째서 저런 방법으로 하는지를 통 몰라서 구조를 알아보려 분석을 해 보았습니다.

(물론 이 세팅은 제가 개발해 낸것이 아닙니다 ---;//)



* 차례

1. 제작 순서 및 용도
2. Box Object 의 구성 및 유기적인 HI Solver와 Box Object의 관계

 
1. 제작 순서 및 용도

 지금 하는 본 세팅은 머리카락이나 천, 망토, 깃발, 채찍등 물리적으로 움직이는 것들을 세팅
 
하기 위함입니다. 스프링 컨트롤러의 움직임의 강약이나 튀어오름이 다르므로 이에 관한 수치는

사용자의 개인적인 용처에 맞게 조절하시면 될듯 합니다. 또한 일반 본 세팅에서처럼 각각의 본

을 제어하는것이 아닌 부모 본 하나만의 제어로 모든 본을 관리 하므로 프레임 조절이나 기타
 
애니메이션에 있어 약간의 재약이 생길 수 있을꺼 같습니다. 너풀거리는 치마나 천 제질의 의상,

망토 등의 세팅은 크고작은 여러가지 방법이 있고 각각 일장일단있으므로 '이것이 최선이다'

라고 말씀 드리긴 어렵습니다. 하지만 사용처에 맞게 잘쓴다면 작업시간을 줄일수 있고 보기

좋은 움직임이 나올 수 있다고 기대해 봅니다.

 

 시작하기에 앞서 미리 설명을 드리자면 본 동영상 교제만 있다면 충분히 봐가면서 만들 수 있는
 
구조입니다. 저 또한 이번 R&D를 통해 모르는 지식을 습득하였고, 분명 다른 복잡한 구조의

리깅에 조금이나마 도움이 될 것이라는 생각이 드는데요. 처음부터 구조를 짚어 나가는것보다는
 
일단 제작의 전반적인 진행을 보고, 그 후 그곳에 구조를 알아가는것이 좀 더 쉬울꺼라 예상하여
 
하나하나 짚어나가는 것이 아닌 제작 순서부터 나열하기로 했습니다. (동영상의 진행을 글로

풀었습니다. 애매한 부분이 있다면 동영상을 보시면 참고가 되겠습니다.)


#제작 순서

① 원하는 관절의 수와 크기에 맞는 본을 설치합니다. HI Solver를 설치 하기위해 엔드본(EndBone:본 설치 마무리에 생겨나는 작은 크기의 본)은 지우지 않습니다. 앞으로 움직임의
제어는 가장 부모의 본이 하게 됩니다.

② 기본 오브젝트인 박스를 만듭니다. 박스 타입은 큐브로 설정하면 한번에 정사각형의 박스를 만들 수 있습니다. 박스 제작 후 피봇의 위치를 정 중앙으로 놓습니다. (단 생성시 피봇의 위치가 정중앙에 있다면 피봇을 맞추지 않으셔도 됩니다.)

③ 박스 선택 후 디스플레이 텝- 디스플레이 프로퍼티스(Display Properties)항목의 디스플레이 에즈 박스(Display as Box) 를 활성화 해 줍니다. 이렇게 해 놓으면 박스 오브젝트는 에지 형태만 보이므로 본 과의 연동 작업에서 편하게 하실 수 있습니다. 설정 적용 후 부모본의 세번째 본에 정열(Align)시켜줍니다.(정확히 부모본의 앞의본 꼭짓점에 박스 오브젝트가 위치합니다.)
부모본의 세번째 본에 정렬을 시키는 이유는 후에 자세히 설명 드리겠습니다


④ 정렬시켜놓은 박스는 엔드본 까지 동일하게 복사하고 정렬합니다. 완료가 되면 아까와 같은 방법으로 작은 스케일의 박스를 만들어 큰 박스 오브젝트 들과 동일하게 위치시킵니다.

(큰 박스안에 작은 박스가 들어갈 것입니다.) 


⑤ 박스와 본의 정렬이 완성 되었다면 만들어 놓은 작은 박스를 본에 직접 링크를 겁니다. 링크는 가장 부모본이 가장 앞의 작은 박스를 하위로 링크하고 그 다음 본은 그 다음 박스를 하위링크..이런식으로 순차적으로 링크를 걸게 됩니다.


⑥ 그다음 큰 박스가 같은 위치의 작은 박스를 따라가게끔 링크를 걸어줍니다.

⑦ 본에 Hi Solver를 달아줍니다. 상단메뉴 Animation텝 - IK Solvers - HI Solver 를 적용하여 달아주시면됩니다. Hi Solver는 부모 바로 다음본부터 엔드본 전의 본까지 순차적으로 달아
주시면 됩니다.


⑧ 각각 생성된 Hi Solver는 같은 위치에 있는 큰 박스에 움직임을 따라가게끔 링크를 걸어
줍니다.

⑨ 큰 박스를 하나씩 선택하여 포지션 컨트롤러를 스프링으로 바꾸어 줍니다. 상단메뉴 Animation텝 - Position Controllers - spring 을 적용해 주면 됩니다.

⑩ 부모본과 가장 가까운 위치의 큰 박스부터 가장 끝 부분 박스까지 각각 스프링 적용수치를 달리합니다. 큰 박스를 선택 후 우측메뉴 Motion텝 - Spring Dynamics 항목의 Drag 수치를 조절해 주시면 됩니다.(필요에 따라 조절되는 값이므로 개개인의 활용 용도에 따라 변하게 됩니다.)

⑪ 모든 세팅이 완료되었습니다. 부모본이 움직이는 각도에 따라서 자식 본들은 순차적으로 뒤따르게 됩니다.


2. Box Object 의 구성 및 유기적인 HI Solver와 Box Object의 관계

지금까지 개략적인 진행 순서였습니다. 그럼 지금까지의 세팅에 관해 좀더 자세하게 알아
보겠습니다.

1) 부모본과 엔드 본 
 처음 본 작업 당시 부모본부터 시작해서 원하는 위치, 크기, 관절갯수를 맞춘 본을 설치하였
습니다. 일반적인 상하좌우, 360도를 움직이는 본과는 달리 엔드본을 남긴 이유는 HI Solver를 설치하기 위함이었습니다. Hi Solver 란 history Independence solver 의 약자로 3Ds Max 3.0 이후 개발되었다고 합니다.

 Solver라는 단어는 사전적 의미처럼 해결해주는자~ 정도가 되겠습니다.기존 IK(역운동 - 하위의 조인트가 움직이면 상위의 조인트가 따라움직이는 방식) Solver 였던 HD Solver(history dependence solver)는 최상위부터 최하위까지 설정을 하면 각각의 본에 하나씩 체인이 형성
되어 하위 조인트를 움직이면 조금 기계적으로 움직였던 반면, HI Solver는 최상위 부터 최하위까지 한개의 체인으로 적용되어 체인끝의 포인트 이동만으로 부드러운 움직임을 만들 수 있게 되었습니다.

(HD Solver와 Hi Solver. 상단이 HD방식이고 하단이 HI방식입니다.)

 다만 솔버가 연결된 본은 체인으로만 컨트롤이 가능 합니다. 그래서 전체 본을 컨트롤 할 수 있도록 부모본에는 체인을 걸지 않습니다. 또한, 체인은 1개 이상의조인트에 적용이 되므로
엔드본을 남겨두어 마지막 본까지 체인이 적용되도록 설치
하는 것입니다.  


2) 두개의 박스와 본, Chains의 유기적인 관계 

 본을 생성 후 각각 피봇 위치에 두개의 크고작은 박스를 생성하였습니다. 그후 링크 구조를 본(최상위) - 작은 박스 - 큰박스 - 체인 으로 연결을 하게 되었는데요, 작은 박스는 최초 제일
앞의 박스가 부모본을 따라가게 되어있습니다. 이는 부모본(컨트롤)바로 다음 조인트 가 부모 본을 따르고 그 다음 본은 그 다음 조인트가 따르게 하여 순차적인 움직임을 주기 위함 입니다. (사진 참조)


 사진의 빨간 화살표를 보시면 각각 박스가 그 앞쪽의 본을 따라 움직이게 됩니다. 그움직임은 스프링 컨트롤러가 적용 된 큰 박스가 조금 느리게 따라가고 그 큰박스를 본의 움직임을 컨트롤 하는 체인이 쫒아가게 되는 것입니다. 각각 앞의 조인트를 따라가는 작은 박스와 그 박스를 점차 느리게 따라가는 큰 박스, 그리고 본의 움직임을 관리하는 체인이 큰 박스를 따라감으로서 점진적인 움직임이 이루어지는 것입니다.

(점점 느리게 따라가는 큰 박스들..)

 이렇게 되서 부모본의 로테이션이나 포지션에 따라 점진적으로 움직이는 본들이 만들어
졌습니다.


(리뷰용으로 만든 세팅이 끝난 후 움직여 보았습니다. 이상없이 잘 됩니다.)


  장횡한 설명과 부족한 실력으로 글을 작성하니 부끄럼이 앞서네요 ㅜㅜㅜ 나름데로 검색하고 분석해 보고 적었습니다만, 부족한 부분도 많고 막상 글을쓸려니 어려워서 부족함을 많이 느꼈습니다.

 틀렸다 생각되는 부분, 설명 부족이라던가 내용이 다르다, 혹은 수정이 필요하다 싶은 부분은 덧글 달아 주시면 최대한 노력해서 매워 나가도록 하겠습니다.

감사합니다.  m(__)m


'러프한 작업들' 카테고리의 다른 글

좀비  (0) 2011.05.08
듀라한  (0) 2011.05.06
[R&D]Link Constraint 를 이용한 Bone의 Biped식 움직임 구현  (0) 2010.08.02
스컬피 두개골 2010/05/14 金  (0) 2010.05.14
스컬피 왼손 2010/05/13 木  (0) 2010.05.13