이창희(cagetu79@gmail.com) Animation 이창희(cagetu79@gmail.com) copyright cagetu(cagetu79@gmail.com)
copyright cagetu(cagetu79@gmail.com) Animation 정점 애니메이션 (Vertex Animation or Vertex Morphing) 계층적 애니메이션 뼈대 애니메이션 스키닝(Skinning) copyright cagetu(cagetu79@gmail.com)
copyright cagetu(cagetu79@gmail.com) Vertex Animation Quake 시리즈에서 많이 사용(MD2, MD3) Morphing 에 일종 각 정점의 애니메이션된 위치를 매 프레임마다 저장하고 있다가 이것을 선형 보간, 또는 그 외의 보간에 의해서 출력하는 것으로 원리와 구성 자체가 간단하며, 자동으로 스키닝이 된다는 장점이 있음. 데이터량이 많고, 하드웨어 가속을 받기가 어려움. 모핑 기법으로 구현되기 때문에, 키 프레임 방식으로 표현하기 어려운 것들이 가능 Facial 애니메이션 or 모델의 모습이 변화 V world = (1-a)*V 1+ a*V v (단, 0<= 0 <= 1) copyright cagetu(cagetu79@gmail.com)
copyright cagetu(cagetu79@gmail.com) 계층구조 애니메이션 캐릭터를 여러 개의 메쉬로 나눠서 각 메쉬를 부모-자식 관곌 상속시키고, 메쉬마다 이동, 축소, 회전을 포함한 매트릭스를 매 프레임 또는 변화되는 프레임마다 저장하여 사용. M transform= M local * M animation* M parent V world= V local * M transform copyright cagetu(cagetu79@gmail.com)
copyright cagetu(cagetu79@gmail.com) 뼈대 애니메이션 계층구조 애니메이션 인간의 몸 속에 뼈대가 있듯이 3차원적으로 구성된 뼈대를 만들고, 이 뼈대에 메쉬를 자식으로 붙이는 방식 뼈대는 메쉬가 아니기 때문에, 화면에 랜더링 되지 않는다. M bone_transform= M local * M bone_animation* M bone_parent V world= V local * M mesh_local * M bone_transform 관절과 관절 사이의 봉합을 하지 못함 동일한 뼈대 구조를 가진 오브젝트는 메쉬를 바꿔치기 하는 것으로 똑같은 애니메이션이 가능하기 때문에 메모리의 절약과 응용가능. copyright cagetu(cagetu79@gmail.com)
copyright cagetu(cagetu79@gmail.com) 뼈대 애니메이션의 계층 copyright cagetu(cagetu79@gmail.com)
copyright cagetu(cagetu79@gmail.com) 계층구조 만들기 부모의 이름을 이용해서, 계층구조를 만든다. 부모는 하나이지만, 자식을 여러 개를 가질 수 있음. copyright cagetu(cagetu79@gmail.com)
copyright cagetu(cagetu79@gmail.com) 애니메이션 정보 M mesh_local 을 구한다. 나와 있는 정보는 worldTM 이므로, 역행렬을 구해서, localTM을 구해야 한다. M local = M world * M inverse 구한 M inverse 을 이용해서, V local 을 구한다. V local = V world * M inverse copyright cagetu(cagetu79@gmail.com)
copyright cagetu(cagetu79@gmail.com) NODE_NAME: 부모 본의 이름 CONTROL_POS_TRACK: 위치 애니메이션 정보 위치 정보의 경우는 선형 보간을 이용해서, 애니메이션 정보를 생성한다. CONTROL_ROT_TRACK: 회전 애니메이션 정보 위에서 보는 것과 같이, 읽은 정보로 quaternion을 생성한다. Quaternion 보간을 이용해서, 애니메이션을 계산한다. CONTROL_SCL_TRACK: 스케일 애니메이션 정보 Track 키 정보는 Scene 정보에 있는 TickPerFrame 값으로 나누면, frame 값이 나온다. copyright cagetu(cagetu79@gmail.com)
copyright cagetu(cagetu79@gmail.com) 애니메이션 만들기 각 노드는 자신의 노드에 대한 애니메이션 정보(pos, rot, scale)를 가지고 있다. 따라서, 이 정보를 가지고, 현재 frame에 맞는 자신의 노드의 애니메이션 matrix를 구한다. 만일, 애니메이션 데이터가 저장되지 않은 frame의 정보는 보간(선형 보간, 구형 선형 보간)을 이용해서, 구한다. 구한 애니메이션 matrix들을 계층구조 계산에 따라, 최종 애니메이션 matrix를 구한다. copyright cagetu(cagetu79@gmail.com)
copyright cagetu(cagetu79@gmail.com) 스키닝 관절과 관절 사이의 벌어짐을 방지하기 위한 방법 메쉬를 구성하는 각각의 정점이 뼈대로부터 얼마만큼의 힘을 받는가 하는 가중치 값을 포함하고 있는 것. V world= V local*M0*W0 + V local*M1*W1 + V local*M2*W2 + V local*M3*W3 + … + n (단, Wn= 1.0-(W0+W1+W2+…+W(n-1))이며, V local은 정점의 지역 좌표, M[index(n)]은 정점에 영향을 미치는 뼈대의 애니메이션 행렬, n은 일반적으로 0~3까지 4개의 링크가 사용된다.) 정점 당 매 프레임마다 계산을 해야 하기 때문에, 계산량이 많으나, 하드웨어 가속의 지원을 받을 수 있기 때문에, 요즘에 일반적으로 사용되고 있다. 매트릭스 팔레트, Skinned Mesh copyright cagetu(cagetu79@gmail.com)
copyright cagetu(cagetu79@gmail.com) Inverse Kinematics 일반적으로 우리가 사용하는 계층구조 방식은 Forward Kinematics 임. 역기구학은 넝마 인형(rag doll)등을 사용한 자연스러운 캐릭터 애니메이션 표현을 위해서 물리학에서 사용되는 이론을 채용. PS2 의 ICO copyright cagetu(cagetu79@gmail.com)
copyright cagetu(cagetu79@gmail.com) 참고자료 3D 게임 프로그래밍 – 김용준 8장 캐릭터 애니메이션 게임 개발 테크닉 김병철_ASE화일을 이용한 본 에니메이션 copyright cagetu(cagetu79@gmail.com)
copyright cagetu(cagetu79@gmail.com) Q & A copyright cagetu(cagetu79@gmail.com)