제가 Collada 를 공부해야겠다고 생각하게 된 계기는 첫번째로, Gamasutra 에서 구인 광고 할때 Collada 경험자를 선호한다는 것을 몇번 보아왔기 때문이고, 둘째는 PhysX 문서를 읽던중에 Collada 가 몇번 언급 되었기 때문입니다,
생소할수 있는 기술인 Collada 를 한마디로 요약하면, Max/Maya exporter 라고 할수 있겠습니다. 흔히 게임 개발자들이 Max 에서 생성된 데이터를 게임에서 불러와서 화면에 보여주려면 Max 용 plug-in 을 직접 작성해야한다고 알려져 있습니다. 그리고 이 plug-in SDK 를 사용해서 exporter 를 만드는게 쉽지 않습니다. 한국에서 특히 많이 팔린 GameBryo 라는 게임 엔진이 선호되는 많은 이유들 중의 하나가, 안정적인 Max exporter 를 제공하기 때문입니다.
Max/Maya 를 사용해서 파일을 저장할때 binary 파일로 저장을 하게 되면 그걸 읽어서 게임에서 불러 들여서 사용하면 참 행복하겠지만, Max/Maya 내부에서 사용하는 데이터 포멧을 일반 프로그래머들이 이해하기란 시간이 너무 많이 걸리고, 버전이 올라갈때마다 갱신해야한다는 문제점이 있습니다. 그래서 Max/Maya 의 개발자용 SDK 를 사용해서 export 할수 있도록 exporter 를 개발해서 사용하게 되는 것입니다. 그러면 자신의 게임에 필요한 정보만 뽑아내서 외부 파일로 저장하는것이 가능해집니다.
exporter 를 만드는것이 부담되는 경우에 흔히 택하게 되는 차선책은 ASE 파일 포멧입니다. 이것은 사람이 읽을수 있는 형태의 ascii 파일 형태이기 때문에 적절한 파서를 만들어서 사용하기 용이 합니다.
exporter 를 만들지 않을 경우 또 한가지 고려할수 있는 선택지는 .X 파일입니다. Microsoft 에서 개발한 자체 포멧인 X 파일을 사용하면 따로 파서를 만들 필요도 없이 바로 게임에서 사용이 가능하고 LOD 같은 훌륭한 기능도 덤으로 사용할수 있게 됩니다.
그런데 ASE 와 X 파일에는 한계가 있어서, 상용 게임을 개발하고자 할때에는 이 둘중의 어느것도 사용할수가 없습니다. 특히 문제가 되는 것은 "에니메이션"입니다. 게임에서 사용하는 에니메이션은 Skeleton 이라는 데이터 구조를 사용하는 방식인데, 이것을 지원하지 못하기 때문입니다.
에니메이션 이외에도, Occlusion culling 에 사용할수 있는 Scene Graph 지원이 안되고, Physics 연동이 안되어서 게임 프로그래머가 직접 구현을 해주어야 한다는 한계도 있습니다.
Collada 는 이런 문제점들을 모두 개선할 목적으로 개발된 XML 표준안입니다. Max/Maya 에서 Collada 포멧으로 파일을 저장하면 text 형태로 사람이 읽어볼수 있도록 XML 로 저장이 됩니다. 그리고 이렇게 저장된 데이터에는 Geometry 정보, Scene, Animation, Physics 정보등이 모두 포함되어있습니다. 거기에 더해서 Max 에서 저장한 Collada 파일이 Maya 에서도 불러와서 수정할수 있도록 상호호환이 가능합니다.
Collada 는 XML 표준안일 뿐이기 때문에 실체를 갖은 소프트웨어는 없다고 볼수 있겠습니다. 하지만 Collada 를 밀어주고 있는 Sony 에서 Collada DOM 이라는 소프트웨어를 개발해서 제공하고 있고, XML schema 의 문법이 아주 잘 완성되어있기 때문에 이것만으로도 충분히 실용성을 가지고 있다고 할수 있겠습니다.
저는 Collada 검색어로 Amazon 에서 이 책(Collada: Sailing the Gulf of 3d Digital Content Creation)이 검색 되길레 일단 별다른 기대없이 도서관에서 빌렸습니다. 그런데 책이 상당히 좋았고, Collada 에 대한 아무런 배경 지식이 없었는데 많은 것을 얻을수 있었습니다. 사실 Collada 관련 정보는 입수하기가 매우 어려웠고, 입문자를 위한 자료로는 이 책이 거의 유일한것 같습니다. (그래서 그런지 얇은 책임에도 불구하고 비싸게 팔더군요...)
간단히 요약하면 다음과 같습니다.
1장: 소개
Collada 의 개발 배경과 간단한 역사(?)가 설명됩니다.
2장 : Collada Document
Collada 와 XML 표준과의 연관 관계를 설명합니다.
3장 : Collada Geometry
Collada 내부에서 기하 도형을 어떻게 표현하는지 설명합니다.
4장 : Collada Scene
Collada 내부에서 Model 의 Local/World 좌표계 표현을 어떻게 하는지 설명합니다. 그리고 각 node 간의 종속 계층 관계를 어떻게 표현하는지도 설명합니다.
5장 : Collada Effect
Collada 파일 안에 Shader 코드를 어떻게 집어 넣는지 설명합니다. Collada Effect 는 Collada FX 라고 부르기도 합니다. 책의 설명에 따르면 NVidia 에서 개발한 FX Composer 의 표멧과 거의 같다고 하는데, 제가 FX Composer 를 안써봐서 잘 모르겠습니다. DX 에서 사용하는 Effect Framework 의 약간 변형된 형태와 같다고 볼수 있겠습니다.
6장 : Collada Animation
Collada 에서 Skinning 와 Morphing 을 어떻게 표현하는지 설명합니다.
7장 : Collada Physics
Collada 에서 물리를 어떻게 표현하는지 설명합니다. Rigid Body 밖에 아직 지원하지 않는듯 합니다. 대부분의 내용은 PhysX 개발자들의 영향을 받았다고 합니다.
8장 : Collada Contents Pipeline
Collada 의 Conditioner 와 Refinery 의 개념을 설명하고 앞으로 개선 방향을 제시합니다.
책 자체는 매우 작은 헨드북 수준의 책입니다. 뒤의 별 내용없는 부록 부분을 제외하면 160페이지 정도 밖에 되지 않습니다. 저는 읽는데 2일 걸렸습니다.
읽고나서 소감은, 앞으로 조만간 Collada 가 대세가 되겠다는 생각이 들었습니다.
책은 1.4 버전을 기준으로 입문자를 위해서 만들어진 책입니다. Collada 웹 사이트에 가보면 지금 1.5 버전의 표준안이 공개되어있어서 다운 받을수 있습니다. 200 페이지가 넘는 표준안 문서가 공짜로 공개되어있는 상황인데, 그래도 그 표준안은 입문자를 위한 수준이 아니어서 이 책을 먼저 한번 읽어주고 표준안을 보면서 코딩하는게 좋겠다는 생각입니다.
그리고 한편으로는 GameBryo 는 이제 뭘로 먹고 사나 하는 생각이 들었습니다. 물리는 PhysX 구현에 의존하고, 소리는 마일드에 의존하고, 유일하게 강점이었던 SceneGraph 랑 Max Exporter 도 이제 Collada 가 대세가 되면 Collada 에 의존하게 될텐데....;;;