Collada 파싱하기 OpenGL / Vulkan / DircetX

- https://www.khronos.org/files/collada_spec_1_5.pdf

- OpenGL에 기반을 둔 파일 포맷이므로 좌표계 시스템이나 각종 연산들이 OpenGL과 동일하다.

- 오른손 좌표계

- 기본적으로 Z Up Axis, -Y Forward, X Right 좌표계

- Column Major(행우선) Matrix로 되어 있다.

- vertex의 최종위치 구하기 공식 ( row major matrix기준 )
    - vPos = vPos * bind_shape_matrix * inv_bind_matrix * animation_matrix * bone_weight

Collada의 XML구조

<asset>
    <unit name> : 단위
    <up_axis> : Up Axis

<library_visual_scene>
    - Scene의 모든 오브젝트들의 World Transform을 저장하고 있다.
    - Bone의 Hierachy(계층구조)를 여기에서 알아낼수 있다. 주의할것은 library_visual_scene에 기록된 Bone의 Matrix는 그냥 참고용으로 생각해야 한다. 실제로 사용되는 Bone의 transform은 library_contollers에서 알아낼 수 있다.
    - 

- <library_controllers>
    - bind_shape_matrix : Skinning된 메쉬의 transform이다. 당연히 메쉬마다 정보를 가지고 있다.
    - inv_bind_matrix : Bone의 inversed transform matrix(역행렬), 메쉬에 적용할때 사용되며 Bone의 위치를 재구성할때에는 역행렬로 만든후 적용해야한다. 상대좌표계가 아니기 때문에 부모본과 상관없이 걍 사용하면 된다.
    - bone weight, bone index : 메쉬의 Bone정보

- <library_animations>
   - animation matrix : 상대좌표계이므로 최종 위치를 계산할때는 parent bone으로 부터 상속받아  child bone의 matrix를 누적해가며 계산해야 한다.

- <library_geometries>
    - mesh, uv texcoord, vertex color 
    - mesh의 transform에 bind_shape_matrix를 미리 계산하여도 상관없다.

- <library_materialis>
    - 기타정보, shader 코드

덧글

댓글 입력 영역