[DX11 입문 제25장] 오프셋 행렬에대해 궁금한점이있어 질문드립니다.

GPG 시리즈 관련 질답, 논의 공간.

운영자: 류광

Post Reply
SaGunZa
전체글: 8
가입일: 2015-10-13 00:54
사는 곳: 한국산업기술대학교

오프셋 행렬에대해 궁금한점이있어 질문드립니다.

전체글 글쓴이: SaGunZa » 2017-02-26 16:52

오프셋행렬이 결속 공간의 정점들을 뼈대 공간으로 바꾸는 행렬인거는 이해가 되었습니다.
오프셋행렬이 결속 공간에서의 행렬이 toRoot(i) = toParent(i) * toRoot(parent) 이거면 toRoot(parent)의 역행렬인지 아니면 toRoot(i)의 역행렬이라는건지 너무 헷갈려서 질문올립니다. 제 생각에는 toRoot(i)의 역행렬인거같은데 스키닝을 위해 다시 toRoot(i)가 곱해졌을 때 toParent(i)가 있어서 아예 로컬공간이 되어버린 정점이 toParent(i)행렬에 의해 뼈대공간으로 변환되고 나머지 toRoot(parent)로 계산이 완료되는거 같은데 너무 헷갈립니다.

사용자 아바타
류광
전체글: 3760
가입일: 2001-07-25 09:00
사는 곳: GPGstudy
연락처:

Re: 오프셋 행렬에대해 궁금한점이있어 질문드립니다.

전체글 글쓴이: 류광 » 2017-02-26 18:30

질문에서 주어가 잘 파악이 안되는데요. "toRoot(i)가 무엇의 역행렬인가?"가 질문인지요? toRoot(i)는 설명 그대로 현재 뼈대 정점들이 기준으로 하는 결속 공간 좌표계를 뿌리 뼈대 좌표계의 변환하는("가는") 행렬이고요. 뿌리 뼈대의 좌표계로 가려면 부모의 좌표계로 간 후 부모의 뿌리 뼈대의 좌표계로 가면 된다는 것이 그 공식이 뜻하는 바입니다.

사실 한 뼈대의 변환 방법 자체는 본질적으로 25.1.1에 나온 것과 다를 바가 없습니다. 제가 파악하기로 25.2.2에서 핵심은
* 주어진 뼈대를 단번에 뿌리 좌표계로 보낼 수 있는 하나의 변환 행렬을 뼈대마다 미리 만들어 둔다(그래야 GPU에서 뼈대 정점들을 효율적으로 변환할 수 있으므로)
* 그러한 변환은 주어진 뼈대부터 뿌리까지 거슬러 올라가는 변환 과정을 하나로 합친, 즉 뼈대 조상들의 변환들이 모두 누적된 변환이다.
* 그런 재귀적 뼈대 변환을 상향식이 아니라 하향식으로 계산해서 효율성을 높인다.
인 것 같습니다.

SaGunZa
전체글: 8
가입일: 2015-10-13 00:54
사는 곳: 한국산업기술대학교

Re: 오프셋 행렬에대해 궁금한점이있어 질문드립니다.

전체글 글쓴이: SaGunZa » 2017-02-26 18:41

오프셋행렬이 어떠한 행렬인지가 궁금합니다. 결속 공간의 정점들을 뼈대 공간으로 바꾸는 행렬이라는데 정점에 오프셋 행렬을 곱해지면 그 정점의 공간이 toParent(i)의 공간이 되어 toRoot(i)( toRoot(i) = toParent(i) * toRoot(parent) ) 를 곱해질 때 재대로 된 행렬변환이 이루어지는지 아니면 그 정점의 공간이 Local 공간이 되어 toRoot(i)( toRoot(i) = toParent(i) * toRoot(parent) ) 를 곱해질 때 재대로 된 행렬변환이 이루어지는지 궁금합니다. 따라서 오프셋 행렬이 결속공간을 만들 때 행렬 toRoot(i)의 역행렬인지 toRoot(parent)의 역행렬인지가 궁금합니다.

사용자 아바타
류광
전체글: 3760
가입일: 2001-07-25 09:00
사는 곳: GPGstudy
연락처:

Re: 오프셋 행렬에대해 궁금한점이있어 질문드립니다.

전체글 글쓴이: 류광 » 2017-02-26 19:21

아 이제 질문을 이해한 것 같습니다. 정점에 오프셋 행렬을 곱하면 정점은 뼈대의 국소 공간이 되니까, 골격이 결속 자세 그대로인 상태라면 뿌리 변환의 역변환이 곧 오프셋 변환이겠네요.

SaGunZa
전체글: 8
가입일: 2015-10-13 00:54
사는 곳: 한국산업기술대학교

Re: 오프셋 행렬에대해 궁금한점이있어 질문드립니다.

전체글 글쓴이: SaGunZa » 2017-02-26 20:50

감사합니다!! 결국 오프셋행렬은 결속 공간의 정점을 local로 변환시키고 키 프레임 애니메이션의 toRoot(i) = toParent(i) * toRoot(parent) 행렬을 곱해서 애니메이션에 맞는 정점의 위치가 나오는 거군요

Post Reply