더북(TheBook)

아핀 변환 행렬을 직렬화할 때도 기하 압축을 적용하면 도움이 된다. 변환 행렬은 원래 float 16개로 구성되지만, 아핀(affine) 행렬이라면 이동(translation) 3개, 회전(rotation) 사원수 1개, 스케일(scale) 3개로 항상 쪼갤 수 있어야 하므로, 총 10개의 float만 사용하면 된다.13 행렬이 게임에서 실제 어떻게 사용되는지 부가 조건을 더 파악하면 엔트로피 인코딩 기법으로 대역폭을 더 줄일 수도 있다. 예를 들어 행렬에서 스케일 성분을 쓰는(1이 아닌) 경우는 드문데, 그 여부를 비트 하나로 표기하면 될 것이다. 스케일된 행렬일 경우엔 이것이 유니폼(uniform)14한지 그렇지 않은지를 추가 비트로 표기하여, 유니폼한 경우 스케일의 세 성분 대신 하나만 직렬화하면 될 것이다.

 


 

13  역주 엄밀히 말하면 이것만으로는 아핀 변환 중 Shear를 표현할 수 없다.

 

14  역주 Uniform scale. 스케일의 세 성분이 모두 동일한 경우. 세 성분 중 하나라도 다르면 논유니폼(Non-uniform)하다고 한다. 논유니폼 스케일은 물리 엔진 적용 및 계층 구조에서 회전 시 골치 아픈 문제가 있어 피하는 편이다. 덕분에 엔트로피 인코딩에 좋은 대상이라 하겠다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.