본문 바로가기
그래픽스ㆍDirectX

[KUOCW] 13. 캐릭터 애니메이션 - 2. 본 스페이스에서 캐릭터 스페이스로

by imagineer_jinny 2022. 6. 5.

본 내용은 <한정현 컴퓨터그래픽스(13장 -캐릭터 애니메이션)> 강의를 토대로 작성하였습니다.

 

이제 뼈들이 움직인다.

근데..

기껏 뼈 공간으로 들어 왔는데,

다시 캐릭터 공간으로 들어가야 한다고?? 

 

=> 뼈 공간으로 들어 왔는데 (렌더링을 위해서 애니메이션 된 다음에) 다시 캐릭터 공간으로 와야 한다.

 

그림을 보면 forearm이 90도 회전해서 방향이 바뀜.

이 예에서는 forearm만 움직였지만 실제로는 온갖 뼈들이 다 움직임.

 

근데 이 움직인 결과를 우리는 렌더링을 해야함 화면에 보여줘야 하니까.

근데 화면에 보여줄려면 렌더링 파이프라인을 거쳐야함

 

렌더링 파이프라인의 첫 번째 변환? 월드 변환. 

월드 변환은 어느 공간에서 어느 공간을 움직이는 것이지?

오브젝트에서 월드로 가는 것

 

그럼 캐릭터에서 오브젝트 공간이라는 것은 뭐지?

캐릭터 공간, 캐릭터 스페이스지!!!!!!!!!!!!

 

캐릭터 스페이스가 바로 우리가 렌더링 파이프라인을 시작한 오브젝트 공간임

그 얘기는 무슨 얘기냐?

 

지금 각각 자기가 속한 뼈 공간으로 정점들이 갔는데 얘네가 애니메이션 거친 다음에 다시 캐릭터 공간으로 집합을 해야함.

그래야지 렌더링 파이프라인에 들어갈 수 있음

 

1. default pose일 때 캐릭터 스페이스에서 뼈 공간으로 가는 변환 후에는(Mid-1) animation pose가 만들어 질 것임.

2. 그럼 뼈들이 움직인거잖아. 즉 뼈들의 움직임에 따라 폴리곤의 정점들이 같이 움직였을 거 아니야

3. 이 모든 정점들은 다 캐릭터 공간에 와야 한다.

4. 그래서 우리가 계산을 해야 하는 행렬은 v5를 예로 들면 얘를 1)애니메이션 시켜야 함.

그리고, 이 v5를 2)다시 캐릭터 공간으로 보내줘야함

5. 즉, 이 두가지를 해주는 행렬이 필요하다.(M5a)

 

 

뼈들은 각각 움직임

뼈가 움직이는 것, 뼈가 가질 수 있는 변화는 회전 밖에 없음

forearm이 회전할 때는 자신의 아래쪽 관절인 팔꿈치를 기준으로 해서 움직임

즉, 자기가 붙어 있는 local joint를 중심으로 움직인다고 해서 local transform이라고 함

 

ex. v5(2,0)(뼈 공간으로 옮긴 좌표)에서 90도 회전 행렬을 곱해서 v5'(0,2)(아래 팔이 90도 회전한다)가 됨

 

우리의 궁극적인 목표는 이 좌표를 캐릭터 공간으로 다시 보내는 것

일단 v5'를 upperarm에 보내본다.

0,2는 회전되기 전의 x, y 기준의 좌표임 (그림 표시 참고)

회전되기 전의 upperarm과 forearm의 관계는 parent 변환으로 우리가 알고 있다.

그래서 여기에 parent 변환을 적용하면 부모인 upperarm 기준 공간 좌표 v5''(4,2)가 나옴

 

다시 짚는 우리의 목표

애니메이션 시킨다음에 캐릭터 공간으로 보내는 것이 궁극적 목표

근데 이걸 하기 전에 애니메이션 시킨다음에 일단 부모한테 보냈다.

 

근데 이 부모도 움직일 것임. 4번 뼈 애니메이션 시킨다음에 캐릭터 공간으로 보내야 함

그럼 4번 뼈인 M4a가 캐릭터 스페이스까지는 보내 줄 것임

 

밑의 식이 의미하는 바는

i 번째 뼈 공간으로 들어온 버티컬이 있다.

그 정점을 애니메이트 시킨 후에 캐릭터 공간으로 보내고 싶은 것

그럼 i 번째 뼈의 고유한 애니메이션(로테이션)을 적용함

그 다음에 얘를 부모로 보낸다. 

그럼 부모는 가는 길을 알고 있다.

즉, M1a가 알려지면 다 끝나는 것

M1a를 그냥 아이덴터티로 놓자

이렇게 해서 모든 정점들이 캐릭터 공간으로 모이는 것 완료함

 

요약

Mil은 애니메이터가 정해준 포즈, Mip는 dress pose, M1a는 identity

 

1. 골반을 기준으로 캐릭터 스페이스가 있고 20개의 뼈를 가진 스켈레톤을 갖다 붙임

 

2. 중간에 본 스페이스가 20개가 나오고 Bone Space 20개로 보냄

왜? 20개의 뼈가 각자 따로 움직이기 때문에

 

3. 이후 다시 캐릭터 스페이스로

 

 

[KUOCW] 한정현 컴퓨터그래픽스 (13장 - 캐릭터 애니메이션) - YouTube

37:40 ~ 1:12:44

1:04:48 ~ 1:12:44 복습

댓글