컴퓨터 그래픽스

2024.7.21(일) - 13장 캐릭터 애니메이션

새우급여기 2024. 7. 21. 18:12

캐릭터 골격과 공간 이전

실시간 캐릭터 애니메이션을 위해서는 대체로 캐릭터의 골격을 이용한다.

캐릭터의 골격은 다수의 뼈로 구성된 관절체이다.

골격

캐릭터의 기본 자세를 드레스 포즈라고 한다.

캐릭터의 폴리곤 메시와 골격.

(b)는 3ds Max에서 제공하는 기본 골격인 바이페드이다. 편집이 가능하다.

(c)의 골격은 바이페드의 척추 뼈 네 개를 하나로 합치는 등의 편집을 통해 만들어졌다.

뼈와 공간 이전

골격 구성하는 뼈들은 계층적으로 부모-자식 관계를 형성한다.

골반을 루트 노드로 정한다.

계층 구조를 가지는 20개의 뼈로 이루어진 모습이다.

뼈는 관절로 연결되어 있으므로 한 뼈가 움직이면 그 뼈에 속한 정점도 움직여야 한다.

세 개의 뼈와 세 개의 관절.

하단 2차원 그림의 배경으로 주어진 격자를 사용하면 뼈 공간 좌표를 쉽게 이해할 수 있다.

(f)에서와 같이 드레스 포즈에 골격이 맞춰지면, 부모와 자식 뼈 사이의 상대적인 위치와 방향이 결정된다. 한 뼈에 속한 정점을 그 부모의 뼈 공간으로 변환하는 것을 부모 변환이라고 하는데,

아래팔에서 위 팔로의 공간 이전을 살펴보자.

위 팔 좌표계를 아래팔 좌표계에 포개는 행렬과 같다.

x축을 따라 4만큼 이동하는 행렬로 표현.

이는 아래팔 공간에서 (2,0) 좌표를 가지는 vf를 위팔 공간으로 변환

손의 부모 변환을 생각해보면 위 행렬과 같다.

vf는 아래팔 공간으로 변환된다.

아래와 같이 고쳐 쓸 수 있다. 

한 뼈의 정점이 주어졌을 때 부모 변환 행렬을 계속 결합하면 골격 계층 구조의 어떤 조상이든지 그것의 뼈 공간으로 정점을 변환할 수 있다.

캐릭터 공간에서 뼈 공간으로의 변환

드레스 포즈의 골격이 주어지면, 각 뼈 공간에서 캐릭터 공간으로의 변환을 결정할 수 있다.

부모 변환.

척추 공간에서 캐릭터 공간으로 변환하는 행렬을 구해보자.

이는 다음과 같이 두 개 행렬의 결합으로 정의된다.

척추의 정점은 척추의 부모인 골반의 뼈 공간으로 우선 변환되고, 그 후 캐릭터 공간으로 변환된다.

나머지 뼈에 대해서도 같은 방식을 적용 가능하다.

쇄골 정점은 세 개의 행렬을 통해 캐릭터 공간으로 변환된다.

드레스 포즈 골격에서 캐릭터 공간과 뼈 공간 사이의 변환을 보여준다.

앞 수식은 다음과 같이 간략화될 수 있다.

위와 같이 일반화된다.

그러나 관절체 애니메이션에서 필요한 것은 그 역변환이다.

 

정기구학

애니메이션이 완료된 정점을 렌더링에 사용하기 위해서는 이를 다시 캐릭터 공간으로 변환해야 한다.

이렇게 해야 애니메이션 포즈의 캐릭터 전체가 GPU 파이프라인을 따라 월드 변환, 뷰 변환 등을 거쳐서 최종적으로 스크린에 렌더링 될 것이다.

지역적인 특성을 반영한 변환을 지역 변환이라 부른다.

위와 같이 일반화 된 식을 사용한다.

애니메이션 포즈에서 각 뼈 공간에서 캐릭터 공간으로의 변환은 위와 같다.

드레스 포즈 골격이 결정되면 (d)와 같이 골격 계층 구조를 따라 위에서 아래로 내려가면서 각 뼈마다 단 한 번씩 Mi,d-1을 계산한다. 애니메이션 포즈가 결정되면 마찬가지로 위에서 아래로 각 뼈마다 Mi,d를 계산한다. 이는 애니메이션의 각 프레임마다 반복된다.

  • 기구학: 질량이나 힘을 고려하지 않고 물체의 움직임을 기술하는 학문 분야.
  • 정기구학: 모든 뼈의 변환을 계산하여 관절체 전체의 모습을 결정하는 것
  • 역기구학: 관절체 말단 노드의 위치와 방향이 주어졌을 때 이를 위하여 관절체의 뼈에 어떠한 변환을 적용해야 하는지 결정

스키닝

캐릭터의 폴리곤 메시를 피부라고 부르기도 하는데, 이 파트에서는 골격 움직임에 따라 어떻게 피부를 부드럽게 변형하는지 다룬다.

 

정점 블렌딩

한 정점은 오직 하나의 뼈에 속한다는 제약 때문에 변형된 피부가 부드럽지 않을 수 있다는 점을 위 그림을 통해 확인 가능하다.

→ 위의 문제를 완화하기 위해 여러 개의 뼈가 한 정점에 영향을 주도록 하고, 그 결과를 블렌딩 하는 방법을 사용한다.

각 뼈가 한 정점에 얼마나 영향을 주는지 미리 정해야 하는데, 이 것을 블렌딩 가중치(또는 가중치)라고 부른다.

정점 블렌딩을 통해 최종 위치를 결정한 모습이다.

일반적으로 한 정점에 영향을 주는 뼈들과 그 가중치는 애니메이션 과정 전체에 걸쳐 일정하게 유지되는데, m개의 뼈가 한 정점에 영향을 준다고 가정하면 다음과 같이 일반화 된다.

스키닝 알고리즘의 입력 및 작동 원리를 나타낸 그림이다. 팔레트 인덱스와 가중치는 정점별로 고정되어 있으며, 스키닝 알고리즘은 드레스 포즈의 v를 애니메이션 포즈의 v’로 변환한다.

일반적으로 스키닝 알고리즘은 정점 쉐이더로 구현되는데, 정점 쉐이더에게 행렬 팔레트는 유니폼으로 제공된다. 반면 팔레트 인덱스, 블렌딩 가중치는 정점 위치, 노멀, 텍스처 좌표 등과 함께 정점 배열에 저장된다. 이들은 모두 정점 쉐이더에게 애트리뷰트로 제공된다.

 

키프레임 애니메이션에서의 스키닝

스키닝을 키프레임 애니메이션에 적용해보자. 애니메이션 포즈는 키프레임에서만 정의될 것이므로 키프레임에서 정의된 Mi,a를 보간하여 중간 프레임에 사용해야 한다.

지역 변환은 회전 행렬로 국한된다. 한편 Mi,p는 회전과 이동이 결합된 공간 이전 행렬이다.

따라서 Mi,p, Mi,l은 강체 변환임을 알 수 있다.

아래 코드는 키프레임 애니메이션에서의 스키닝 알고리즘의 슈도코드와 스키닝을 이용한 키프레임 애니메이션이다.

(a)는 키프레임 및 중간 프레임, (b)는 겹쳐서 그려진 프레임이다.

 

역기구학

로봇 팔의 끝에 부착되어 물체를 잡고 다루는 등 용도로 쓰이는 기구를 말단 장치라고 한다.

정기구학은 로봇 팔의 관절 각도를 입력으로 받아 말단 장치의 위치 및 방향을 결정한다.

이러한 작업의 역순을 **역기구학(IK)**이라고 하는데, 목표로 하는 말단 장치 위치 및 방향이 입력으로 주어지면 이 목표를 달성하기 위해 필요한 각 관절의 각도를 계산하는 것이다.

 

해석적 기법

  • 자유도: 물체의 상태를 정의하는 독립적인 변수의 개수
  • 1자유도 관절: (a)의 팔꿈치는 기구학적으로 경첩과 같다. 아래팔을 위아래로 움직이는 자유도만 가지고 있으므로 1자유도 관절이라고 함.
  • 3자유도 관절: 어깨는 볼 조인트와 같으며, 스크루 드라이버처럼 회전이 가능하므로 3자유도를 갖는다.

(a) 목표 위치 G와 초기 자세를 입력으로 받아 최종 자세가 출력된다.

(b) 1자유도 팔꿈치의 관절각을 계산한다.

(c) 3자유도 어깨에서는 회전축, 회전각을 계산한다.

θ는 위와 같이 계산된다.

 

CCD 알고리즘

→ 많은 관절을 가진 복잡한 관절체에서는 CCD 알고리즘을 채택한다.

말단 장치로부터 시작해 계층 구조를 거슬러 올라가며 말단 장치와 목표 지점 간 거리가 최소화되도록 관절각을 조정한다.

최종 목표는 T와 G를 같에 하는 것이다.

(a)는 초기 자세이며, (b)를 보면 손이 회전했고 다음은 아래팔이 회전할 차례이다.

(c)는 아래팔 회전 후 위팔이 회전할 차례를 보여준다. (d)에서 위팔이 회전하였지만

T와 G간 거리가 충분히 가깝지 않으면 다시 손부터 시작하는 회전을 반복한다.

날아가는 공을 응시하고 공을 향해 손을 뻗는데 IK가 사용됐다.

게임에서는 자연스러운 캐릭터 애니메이션을 위해 IK를 자주 사용하므로 확실히 학습하자.

 


이미지 출처: [OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문]

위 서적을 보고 공부한 내용을 정리함