본문 바로가기
3DMAX/Setup

캐릭터 셋업 책 정독 및 정리 - 1차 기초 다지며 개념잡기

by tartist 2015. 12. 16.

맥스 스크립트와 캐릭터 셋업의 정석인 이상원님의 '캐릭터 셋업 테크닉'을 오랜기간 정독중에 있습니다. 1차로 정리한 내용을 올려볼까 합니다.





캐릭터 셋업 책 리포트

Seccion1 . 기초다지기> 개념을 잡자!(34p~291p)

 

1. 축의 개념 - 뷰, 로컬, 월드, 페어런트의 정확한 개념 이해하기

           (1) 부모자식간의 개념 확실히 이해하기

           - 링크관계일때와 아닐때의 위치 좌표의 변화

           (2) 좌우 대칭이 되는 Point Helper 만들기

           - 모델링 맵핑과 마찬가지로 좌우 대칭의 개념을 아는 것은 매우 중요하다.

           로컬 트랜스폼에 대한 개념을 깨우치자.

 


2. 본에 대해서 숙지하기

           (1) 본 오브젝트는 위치, 회전, 스케일 정보만 가지고 있는 헬퍼라고 생각하는게 좋다.

           (2) 본의 Mirror와 일반 Mirror는 완전다르다. 일반 미러는 스케일값을 반전 시키기때문에

           Y혹은 Z축이 뒤집히게 되면서 다양한 문제를 발생시킨다.

           (3) scale형식과 squash형식 이해하기

           (4) Auto-Align 의 기능 살펴보기(자식본을 바라보느냐 안하느냐)

 


3. 오일러와 쿼터니언

           (1) Roll , Pitch, Yaw 숙지하기.

           (2) 짐벌락에 대해 이해하고, 짐벌락을 피해가는 방식을 고려해 본다.

           -가령 사람의 척추는 Y,Z축으로는 많이 움직이지만, X축움직임이 거의 없기 때문에

           YXZ ZXY로 회전순서를 설정하면 짐벌락의 현상을 최소화 시킬수 있다.

 (3) Script Controller에서 F(frame), NT(normalized time), S(secs), T(ticks) 의 개념 이해하기.

 (4) 쿼터니언은 3개의 방향을 가지고 있는 백터와 그 벡터의 바라보는 위치값을 결정하는 w값에 의해서 최종 회전 방향이 결정된다.

 

 

4. Pivot 관련 개념 잡기

           (1) Adjust Pivot, Working Pivot, Adjust Transform 개념 잡기

           (2) Link Info 개념잡기

           - Lock 롤아웃 : 애니메이터가 잘못된 축을 이용하지 못하도록 원천적으로 막아주는 기능.

           - Inherit 롤아웃 : Inherit의 개념 정확히 이해하기~ 상속의 개념

           (3) Reset Stretch

           - Max Script Stertch   = objectoffsetTM * stretchTM * nodeTM

 - 한글로 = 오브젝트의 트랜스폼 = 오프셋 값과 Stretch 값과 노드 값이 모두 반영되어서 결정됨

           - 상품의 가격 = 소매점 마진 + 유통 마진 + 생사자 원가


 

5. 본의 IK 이해하기

(1) HI Solver

- 캐릭터 애니나 길이가 긴 애니메이션 추천. 이 방식은 계층 구조 내에서 여러개의 IK Chain을 동시에 사용할 수 있는데,예를 들어서 캐릭터의 다리를 만들때 엉덩이로부터 발목까지를 하나의 체인으로 구성하고 뒤꿈치에서 발가락까지 또 다른 체인으로 구성할 수 있다.

전체 애니메이션 내용과 무관한 알고리즘으로 작동하기 때문에 애니메이션 길이가 얼마나 길게 만들어졌는지에 상관없이 빠른 연산 속도를 유지한다. , 전체 애니메이션 길이가 2000프레임으로 되어 있는 경우와 10프레임으로 되어 있는 경우가 모두 같은 속도로 작동한다. 또한 뷰포트에서 지글거리는 증세가 적고 안정적인다.

- HI IK Solver에는 IK Solver Plane이라는 개념이 사용되고 있는데 Swivel Angle이라는 값에 의해서 IK Solver Plane이 제어된다. Swivel Angel값은 직접 애니메이션 되거나 타깃 오브젝트를 통해서 애니메이션 되는 값이다.

 

(2) HD Solver

- HD Solver Interactive IK와 같은 기능이 있다. 그렇기 때문에 Hierachy 판넬의 IK 버튼에 각종 롤아웃의 기능들, Terminator 라던가 Bind to Folow 라던가 Precedence 등의 기능이 동일하다.

HD Solver Interactive는 대체로 기계를 움직일 때 적합한 방식이다. 특히 IK 애니메이션 특성에 의해서 미끄러지는 특성을 가진 기계에 적합하다.

(3) Ik Limb Solver

- 본이 두개인 경우에만 사용된다. 캐릭터의 팔과 다리에 쓰기에 적합한 방식. 이 녀석을 쓰기 위해서는 최소한 세 단계 이상의 본이나 오브젝트로 구성된 계층구조가 필요하다. 그 외에는 HI SOlver와 같은 방식으로 기능한다.

(4) Spline IK Solver

- Spline Ik Solver는 스플라인을 이용해서 여러개의 본이나 링크로 이어진 오브젝트를 부드럽게 휘어지도록 제어한다.

 

 

6. Controller 이해하기.

           -3DS MAX를 처음 설치 했을 때 오브젝트에 적용되는 Default Controller는 다음과 같다.

           위치 : Position XYZ

           회전 : Euler XYZ

           스케일 : Bezier Scale

           -맥스의 대부분의 애니메이션은 Bezier Controller에 의해서 제어된다.

  - Controller에 가능한 것들 : 애니메이션 키값 저장, 절차적인(Procedual) 애니메이션 설정 , 애니메이션 키 사이의 보간(Interpolation)

           - 트랙뷰에서 컨트롤러 접근이 가능하다.

           (1) 컨트롤러의 분류와 구조

           - Single-Parameter(단일) Controller : 단순히 한 가지 값이 애니메이션 되는 경우이다.

 - Compound Controller : 애니메이션 되는 값이 하나가 아니고 여러 개인 경우이다. 쉬운 예가 Euler XYZ Rotation Controller인데XYZ의 각 축 방향마다 서로 다른 Controller를 적용할 수 있다. 이런 경우 외에도 PRS, Transform Scrip, List Controller등 상위 레벨의 Controller 또한 Compound Controller 이다.

         (2) 일반적인 목적의 Controller

  - Bezier Controller : 가장 자주 사용되는 컨트롤러이고, 애니메이션 키와 키 사이사 보간할 때 스플라인 커브 방식으로 보간 된다Normilize Time 숙지 필요.

 - TCB Controller : 커브 기반의 애니메이션 컨트롤러지만 커브를 제어하기 위해서 탄젠트를 사용하지 않는다. 대신에 Tension, Continuity, Bias라는 값을 사용한다. Rotaion WindUP 기능에 대해서 아는게 좋음.(180도이상 돌지 못하는 TCB 360도까지 돌게 하는 기능. 하지만여러가지 문제가 많아 지향하는 방식은 아님)

          

 - Linear Controller : 애니메이션 키와 키 사이를 일정한 간격으로 보간(Interpolation)한다.

 - Noise Controller : 불규칙적이고 랜덤한 애니메이션 값을 계산적으로 만들어내는 컨트롤러. Ignore 방식은 전체 프레임에서 발동하고 Respect 방식은 보여주는 키프레임안에서만 발동한다.

          

- XYZ Controller :

1) Position XYZ : X,Y,Z축으로 분리되어 있어 각 축마다 서로 다른 Controller를 지정할 수 있다

 2) Euler XYZ : Position XYZ와 비슷하며, 회전을 제어하는 컨트롤러중에서는 유일하게 커브 편집이 가능하다.

           - Audio Controller

 

(3) 특수한 목적의 Controller

- List Controller : List Controller는 여러 개의 Controller를 혼합해서 최종 결과를 만들어 내는 Controller이다. 적용방향은 위에서부터 아래쪽으로 순차적으로 적용 된다.

리스트 컨트롤러의 세부조절 설명

    1. Editable Name Field : 그림의 빨간색 박스를 통해서 현재 활성화된 Controller의 이름을 변경할 수 있다.

    2. Set Active : 어떤 Controller가 활성화 되는지를 결정하는 버튼인데 Controller 이름에서 더블 클릭을 통해서도 활성화 지정이 가능하다.

    3. Delete : Controller를 삭제한다.

    4. Cut/Paste : 선택된 Controller를 삭제하고 클립보드에 기억시킨다.

    5. Weight : Controller의 효과가 과장되거나 작게 줄어들게 조절할 수 있다. 기본 값은 100인데 100이상의 값도 가능하다.

    6. Average Weight : 이 옵션은 Position List Scale List에만 있는 옵션이다. 이 옵션이 켜지면 모든 Weight값을 비율로써 계산하게 된다.

    7. Pose TO Pose : Rotation List에 쓰임. 예제 34 파일을 참고. 말로 설명이 어려움.

 

(4) Zero Transform

- Freeze Tranform이나 Freeze Rotation을 오브젝트에 적용한 뒤에 애니메이션 작업 도중에 Tranform to Zero 혹은 Rotation To Zero를 적용하면 Freeze를 했던 순간의 트랜스폼으로 되돌아가게 된다.

(5) Parameter Wiring

- Parameter Wire는 두 오브젝트간 Parameter가 연동되도록 연결하는 기능으로서 리깅 작업뿐 아니라 전반적인 3D 작업을 위해서 매우 요긴한 기능이다.

리깅을 예로 들어 새가 날개짓을 하는 애니메이션을 할 때 한 쪽 날개만 움직여도 다른 쪽 날개가 똑같이 움직이도록 연결하거나 페이셜 애니메이션을 위해서 표정제어를 위한 각종 Manipalutor를 설치해서 슬라이더 하나만 움직여도 다수의 본이 동시에 움직여서 웃는 표정을 짓는다거나 하는 작업에 활용될 수 있다.

    • 마우스 우클릭의 wire parameter를 이용하여 사용할 수 있고, Animation 메뉴를 통해서도 접근할 수 있다.

    • 과도하게 사용될 경우 CPU 연산 부하량이 많아 최대한 낮은 CPU 비용으로 간결하고 직관적으로 셋업하는 것이 훌륭한 셋업이다.

 

(6) Reaction Controller

- 오브젝트가 가까이 가면 자동으로 라이트가 켜진다거나 근육이 부풀어 오른다거나 공이 땅에 닿으면 가로로 찌그러진다거나 하는 설정을 할 수가 있다. 또한 파티클을 발생시키는 트리거로도 사용될 수 있고 몰핑의 퍼센트 조절을 해줄수도 있다.

Maya Set Driven Key 기능과 매우 유사하다.

, 버그가 미친듯이 많아서 사용을 권장하지는 않는다.

 

(7) 트랜스폼 제어

- Position , Rotation, Scale의 세정보가 합쳐져서 트랜스폼이 된다. 지금까지 설명했던 각종 Animation Controller는 모두 트랜스폼을 제어하는 Position / Rotation / Scale Controller의 하위 Controller였다.


1) Link Constraint - 0프레임은 월드에 1프레임은 오브젝트에 30프레임은 본오브젝트에 링크하듯이 프레임마다 다양한 속성으로 링크가 가능하다.

단점은, 애니메이션의 저장과 불러오기가 불가능하다.


2) Transform Script Controller

- 포지션,  로테이션, 스케일을 Script로 표현하는 Controller이다. 일반적인 Scrpit Controller와 대부분 동일하지만 리턴 값이 Matrix3 형태여야 하는 점이 다르다.

 

7. Animation Constrints(애니메이션 컨스트레인트)

           - 가장 대표적인 것으로는 LookAt Orientation Constraints가 있고 포지션에 대해서

           Path Position Constraint가 있다.

    • 모든 컨스트레인트는 다른 오브젝트를 참조해서 자신의 포지션이나, 로테이션 혹은 전체 트랜스폼을 결정하게 된다. 예를 들어 룩앳 컨스트레인트는 하나이상의 다른 오브젝트들을 바라봄으로써 자신의 로테이션이 결정된다.

(1) LookAt Constraint

    • 다른 물체를 바라보게 함으로써 자신의 Rotation이 결정되도록 하는 Controller.

(2) Orientation Contraint

    • 기본적인 목적은 다른 오브젝트의 Rotation을 그대로 따라하는 기능인데 여러 오브젝트를 지정해서 평균적인 회전 방향을 사용하거나 가중치를 다르게 지정하는 것도 가능하다.

(3) Path Constraint

    • Spline Path 를 이용해서 오브젝트의 위치를 제어하는 Contraint이다.

(4) Position Constraint

    • 다른 오브젝트의 위치를 참조해서 자신의 위치를 결정하는 역할을 하는데, 하나 이상의 오브젝트를 참조할 수 있기 때문에 두 오브젝트의 중간 위치를 얻어낼 때 자주 사용된다.

(5) Attachment Constraint

    • 오브젝트를 다른 오브젝트의 메쉬에 부착시키는 역할을 한다.

(6) Surface Constraint

    • 어태치먼트는 접착제로 부착하는 느낌이라면 Surface는 타깃 오브젝트의 표면을 미끄러지듯이 이동하기 위한 목적에 주로 사용된다. 매우 제한적으로 사용할 수 있고, 사용할 수 있는 오브젝트 타입도 제한적이다.

    • Sphere , Cone, Cylinder, Torus, Quad Patches, Loft object, NURBS object에만 사용할 수 있다. 이 오브젝트들의 공통점은 수학적으로 표현되는 오브젝트라는 점이다.

 

8. 기타 Controller


(1) Limit Controller

- 오브젝트의 움직임에 한계값을 지정하는 Controller이다. 예를 들어 손가락 방향으로는 90도 정도의 회전을 하지만 손등 방향으로는 거의 꺽이지 않는 한계 각도가 있다. 이런 특징을 가지고 있는 손가락 관절에 Limit Controller를 적용하게 되면 지정된 각도 이상으로 관절이 꺽이지 않도록 강제도 막아줄 수 있다.


(2) Spring Controller

- 마치 보이지 않는 고무줄에 매달려 있는 것처럼 탄력적으로 흔들리는 움직임으로 특성이 바뀐다. 이렇게 되기 위해서는 미리 Position Animation이 적용되어 있어야 하는데, 오브젝트 자신이 움직여도 되고 오브젝트 부모가 움직여도 된다.

그런데 현실에서의 Spring이나 고무줄 움직임을 시뮬레이션 하기에는 많이 부족한 기능이라서 본 오브젝트에 간단히 사용해서 응용하는 방향으로 주로 사용되며, 우리 회사에서도 세컨더리 애니메이션으로 많이 사용되고 있다.

    1. Mass : 오브젝트의 무게 설정. 이 값이 증가하면 모션이 과장된다.

    2. Drag : 공기 저항. 이 값을 높이면 물속에 있는 거처럼 큰 저항을 받게 된다.

    3. Add / Remove : Add 버튼에 의해서 다른 오브젝트를 Spring으로 추가할 수 있고, Remove 버튼에 의해서 제거할 수 있다. 하지만 Self Influence는 제거할 수 없다.

    4. Tension : 얼마나 팽팽하게 당겨지는지에 대한 강도를 조절한다. 이 값이 작아지면 잘 늘어는 고무줄이 되고 높아지면 뻣뻣해서 잘 늘어나지 않는 고무줄이 된다.

    5. Damping : 얼마나 빨리 안정화되는지를 결정한다. 탄력이 줄어드는 정도 혹은 감쇄되는 정도의 역할이다.

    6. Relative / Absolute : 이 선택에 의해서 달라지는 것은 Tension Damping의 값을 입력하는 방식이 달라지게 된다. Relative Absolute중에서 어떤 것을 선택하는가에 의해서 Spring 움직임에 직접적인 변화는 전혀없다.

    • 스프링 컨트롤러의 단점인 Loop가 안되는점을 보완하기 위해 지글 본 방식을 선호한다. 지글 본은 덜렁거리는 본인데 3ds max에서는 대부분 본이 Spring을 바라보게 해서 덜렁거리도록 리깅을 하는 경우가 많다.

    • 많이 사용하면 느려지는 문제가 있다. 이것을 보완하기 위해서 Spring Quick Edit 옵션을 켜면 Spring에 관련된 연산이 조금 빨라진다. 대신 연산의 정확도가 낮아진다.

    • X / Y / Z Effect 값을 Wire Parameter로 스위치에 연결해서 스위치를 켜면 전체 Spring Effect가 정상적인 값이 되고 스위치를 끄면 전체 Spring Effect 0의 값이 되도록 설정한다.

(3) Waveform Controller

- Wave 형태의 파형을 만들어주는 Controller 이다. 거의 쓰이지 않는다.


(4) LookAt Controller

- 룩앳 컨스트레인트와 매우 비슷한 룩앳 컨트롤러이다. 예를 들어 타깃 카메라 오브젝트를 생성하면 카메라는 자동으로 카메라 타깃을 바라보게 되는데 이 때 자동으로 지정되는 컨트롤러가 룩앤 컨트롤러이다.

(5) Smooth Rotationg Controller

- 키위 위치를 옮겨줌으로서 타이밍을 바꿔줄 수 있을 뿐인 컨트롤러이며, 자주 사용되지 않으며 설명할 내용도 없는 컨트롤러


(6) On / Off Controller, Boolean Controller

- 0이나 1 둘 중의 한 가지 값만 가질 수 있는 Controller이다.

(7) Layer Controller

- Animation Layers 툴 바(Tool bar)를 중심으로 작업되는 애니메이션 레이어 기능이다.

- 페이셜 리깅에 활용하기 좋다. 캐릭터의 얼굴에 표정 연출을 위한 다수 본들이 배치되어 있고, 그 본들의 웃는 표정을 위한 본들의 Transform(포지션, 로테이션, 스케일) 전체를 Smile이라는 이름으로 Animation Layer로 만들 수 있다.Smile Layer에는 Transform 값이 변하는 애니메이션 키는 적용되지 않지만 Transform 정보가 웃는 표정이기 때문에 Smile Layer Weight 값을 0에서 100으로 증가시킬수록 웃는 표정을 만들어 낼 수 있게 된다. 비슷한 방식으로 입을 벌린다거나 눈을 깜빡이는 등의 타깃 표정들을 Layer에 추가하면 다양한 표정들이 서로 자연스럽게 섞이는 표정 애니메이션이 가능하다.


- 캐릭터 리깅에 다수의 Animation Layer가 적용되면 3ds max가 생각 이상으로 느려지는 문제가 발생한다.