Samsung Software Membership 3D MIM 신진수 Skinning Animation Samsung Software Membership 3D MIM 신진수
Introduction Animation Skinning Skinning Animation Vertex animation Hierarchical animation Bone based animation ( Skeleton animation) Skinning animation Inverse kinematics (역운동학) Skinning mesh를 애니메이션 할 때 접합 부위를 자연스럽게 이어붙이기 위한 기술들 Skinning Animation Skeleton animation + vertex animation
Index Vertex Animation Hierarchical Animation Skeleton Animation Skinning Animation
Vertex ANIMATION 각 정점의 애니메이션 된 위치를 매 프레임 저장하고 있다가 이것을 선형보간, 그 외 보간으로 출력. ( = vertex morphing) Vw = (1-a) * V1 + a * V2 ( 0 <= a <= 1 ) 자동 스키닝 구현 방법이 쉬움 데이터 양이 많음 하드웨어 가속이 어려움 (행렬 연산 x)
Hierarchical ANIMATION 계층 구조 (hierarchical structures) 인간을 비롯한 대부분의 관절을 가진 오브젝트의 구조 Parent – Child 링크 구조 효율적인 애니메이션이 가능 Mtrans = Mlocal * Manim * Mparent Vw = Vlocal * Mtrans 관절 사이가 자연스럽지 못함 현대 애니메이션의 기술적 토대
SKELETON ANIMATION Mb-trans = Mb-local * Mb-anim * Mb-parent 계층적 애니메이션을 범용적 발전 인간 몸 속의 뼈대를 착안 뼈대를 만들고 메시를 자식으로 붙히는 형식 Mb-trans = Mb-local * Mb-anim * Mb-parent Vw = Vlocal * Mmesh-local * Mb-trans 관절과 관절 사이를 봉합하지 못함 메모리 절약 동일한 뼈대 구조에 메시를 바꾸어 재사용 가능
SKinning ANIMATION 뼈대 애니메이션의 관절 문제 해결 Weight (가중치) 메시를 구성하는 정점들이 뼈대로부터 받는 힘 Vw = Vlocal * M0 * W0 + Vlocal * M1 * W1 + Vlocal * M2 * W2 + Vlocal * M3 * W3 ( W3 = 1.0 – (W0 + W1 + W2) ) 루프를 돌면서 정점, 가중치, 행렬을 연산
SKinning ANIMATION Matrix Palette 가중치를 사용하는 정점 생성 256개의 매트릭스 팔레트에 매트릭스를 입력하여 가중치 연산 하드웨어 가속이 어려울 땐 index로 연산 (아래의 식) Vw = Vlocal * M[index0] * W0 + Vlocal * M[index1] * W1 + Vlocal * M[index2] * W2 + Vlocal * M[index3]* W3
SKinning ANIMATION Skinned vertex 구조 float position[3] // 위치 float weight[3] // 본에 의한 가중치 DWORD BI ( or unsigned char BI[4] ) // 본 인덱스 DWORD diffuse Float normal[3] // 노말 좌표 flaot Tu, Tv // 텍스처 좌표 weight[3] = 0.6, 0.2, 0.1 ( 4번째 가중치는 1.0-(0.6+0.2+0.1) ) BI = | 5 | 6 | 10 | 11 | 라고 하면 Vw = Vlocal * M[5] * 0.6 + Vlocal * M[6] * 0.2 + Vlocal * M[10] * 0.1 + Vlocal * M[11]* 0.1
SKinning ANIMATION 정점 쉐이더를 이용한 스키닝 GPU 프로그램을 작성
Q&A