2012-02-02 6 views
1

현재 현재 프로젝트의 스켈 레탈 애니메이션 시스템을 개발 중입니다. 나는 많은 독서를 한 후에 어떻게 작동하는지 이해하지만 다른 프로젝트의 근원을 보면서 왜 각 뼈의 크기, 회전 및 평행 이동 값이 별도로 저장되는지 궁금합니다. 하나의 매트릭스에 모든 것을 저장할 수 있습니까? 더 효율적이지 않습니까, 아니면 효율성이 떨어지는 별도의 값을 얻기 위해 더 많은 수학이 필요합니까?스켈 레탈 애니메이션을위한 SRT 값 저장하기

나는 또한 여기에 매트릭스를 사용하거나 벡터와 쿼터니언을 사용하여 값을 저장하는 일반적인 두 가지 방법을 사용합니다. 후자는 짐발 잠금을 피하기 위해 더 자주 사용됩니다. 그러나 나의 프로젝트는 2 자유도 밖에 없다. 내 값을 저장하는 가장 효율적인 방법은 무엇입니까?

답변

1

아니요, 4x4 매트릭스를 사용해야하므로 매트릭스가 더 효율적이지 않으므로 16 개의 부동 소수점을 사용할 수 있습니다. 이것은 주로 회전 + 이동이 행렬에 저장되는 방식 때문입니다.

값을 SRT 형식으로 저장하면 회전시 쿼터니온의 w 구성 요소가로드시 다른 구성 요소와 다시 계산 될 수 있으므로 9 개의 부동 소수점으로 끝납니다.

또한 많은 게임 엔진이 비 균일 스케일링을 지원하지 않으므로 스케일의 경우 1 float로 축소되어 뼈당 8 수레로 끝납니다!

그리고 압축 전입니다. 뼈가 특정 지점을지나 이동하지 않는다는 것을 알기 때문에 (볼륨에 바인딩되어 있음) 닿지 않을 범위에 정밀도를 할당하지 않으므로 해당 플로트를 인코딩 할 수 있습니다 아래로 16 비트, 그래서 당신은 뼈 당 4 개의 수레로 끝납니다.

이제 공평하게 말하면, 나는 마지막 부분을 압축으로 구현 한 적이 없다. 그것은 나에게 조금 극단적 인 것처럼 보였고 나는 시간이 없었습니다.

하지만 뼈 당 64 바이트에서 뼈당 32 바이트로가는 것이 50 % 절약됩니다!

관련 문제