Character Animation Workflow

게임 모델 데이터의 작업 공정에 있어 엔진이나 플러그인 툴의 기술적인 관점이 아니라 툴셋에서 제공하는 인터페이스에 따른 작업 방법의 차이점에 의해서도 사용자의 편의성이 크게 차이가 난다. 특히 캐릭터 모델 - 메쉬 데이터와 텍스쳐 및 에니메이션 데이터 모두 - 의 익스포트 방법과 관련해서 Nebula, Torque, EmotionFX 의 엔진 및 미들웨어를 가지고 작업한 모델 데이터를 익스포터하여 게임으로 불러 오는 작업을 해 본 결과 작업 공정의 차이가 실제 예상했던 것 보다 작업 시간에 매우 큰 영향을 미친다는 것을 발견했다.

DCC 툴에서의 에니메이션 작업

먼저 Nebula2(이하 N2)에서 캐릭터 모델을 익스포트 하는 경우이다. N2에서는 임의의 캐릭터에서 사용하는 모든 에니메이션들을 하나의 .max 파일에서 편집해서 익스포트하도록 되어 있다.

예를 들어 idle, run, wave, attack의 에니메이션을 가지는 경우 3dsmax에서 첫번째 프레임부터 차례대로 idle -> run -> wave -> attack의 에니메이션이 진행되도록 만든 다음 TrackView에서 각각의 에니메이션의 길이(length), 반복타입(loop type, repeat or once) 등에 대한 정보를 지정하도록 되어 있다. 문제는 아티스트가 이와 같은 방법으로 작업하는 경우 불편한 점이 많다는 것이다.

<Nebula2 3ds Max Toolkit, 3ds Max의 Track Veiw Dope Sheet을 사용해서 animation track을 편집하는 그림>


위의 작업에 대한 테스트를 위해서 GTA Vice City의 플레이어 캐릭터의 애니메이션을 모두 임포트한 다음 Nebula2 3ds Max 플러그인을 사용해서 익스포트한 적이 있는데 GTA의 플레이어 캐릭터는 게임의 자유도 만큼이나 엄청난 수의 에니메이션을 가지고 있었음에도 불구하고 수 백개의 에니메이션을 가진 모델의 익스포트는 문제가 없었다.  그런데 이러한 많은 수를 가진 모델의 경우 익스포트시 엄청난 시간이 소요된다. 정확한 시간은 지금 기억할 수 없지만 대략 펜티엄4 머신에서 40여분 이상 소요 되었던 것으로 기억이 된다. 즉, 에니메이션을 수정한 다음 익스포트해서 확인할 때마다 엄청난 시간을 소요해야 한다는 심각한 문제점이 있다. 게다가 3dsmax의 TrackView는 많은 수의 notetrack key-에니메이션 클립이 추가될 때마다 추다된다-가 추가되는 경우 TrackView가 조작이 힘들 정도로 느려지는 버그가 있다.(3dsmax7, 8, 9 모두 이러한 버그가 있다)

위에서 보듯이 모델의 에니메이션의 개수가 많은 경우에는 하나의 scene에 모든 에니메이션을 merge 시켜서 작업하는 방법은 비효율적이라는 것을 알 수 있다.

다음으로는 토크 엔진(Torque Engine[Tor])이다. 토크에서의 캐릭터 작업은 크게 두가지로 구분되어 있다. 첫번째는 메쉬 모델을 익스포트하는 것이고, 다음으로는 개별 에니메이션들을 익스포트 하는 작업이다. (3ds Max의 플러그인에서 이들 두가지 익스포트를 위한 버튼이 따로 구분이 되어 있다)


 

<에니메이션 단위를 sequence라 부르며 여러 개의 sequence를 삽입 관리할 수 있는 툴을 제공한다. 그림은 토크 엔진의 DTS 3ds Max ProExporters의 sequence manager[Pro]>

Emotion 엔진(버전 2.1)의 경우에도 메쉬 파일과 에니메이션 파일이 구분되어 있으며 익스포트시 각각의 에니메이션들은 개별적인 파일로 분리해서 저장해야 한다.

<익스포트시 모델 데이터인 Actor와 에니메이션 데이터인 Motion을 구분해서 익스포트하고 있다>


토크 엔진과 이모션 엔진 두 가지 모두 N2 엔진과 비교했을 때 개개의 에니메이션 데이터를 분리해서 저장하지만 토크 엔진의 경우에는 이러한 것들도 3ds Max 내에서 별도의 인터페이스를 제공하여 관리할 수 있도록 하고 있다. 

N2에서는 에니메이션 클립들이 하나의 파일(.anim)에 모두 저장이 되어 있는 반면에 토크에서는 에니메이션 파일이 각각의 파일(*.dsq)에 따로 저장된다. Emotion 엔진 역시 파일의 확장자(*.lma)는 메쉬 파일과 동일하지만 에니메이션 정보가 다른 파일에 각각 저장된다. 두 가지 방식을 살펴 보면 에니메이션 파일을 따로 구분해서 별도의 파일로 저장하는 방식이 훨씬 효율적이다. 수 십개의 에니메이션을 이미 게임에 추가한 경우를 가정해 보면 에니메이션들이 하나의 파일에 모두 저장되어 있는 경우에는 다른 에니메이션을 추가하는 경우에도 모든 에니메이션이 있는 파일에도 추가할 에니메이션을 기존 에니메이션의 마지막 프레임에 추가해서 다시 익스포트해야 하므로 작업이 번거롭다. 반면에 각각의 에니메이션을 개별적인 파일에다 저장하는 경우라면 추가되는 에니메이션만 바로 익스포트하면 되므로 작업 진행 및 관리가 훨씬 수월하다. 이미 작업한 에니메이션을 수정하는 경우도 마찬가지이다.또한 큰 프로젝트의 경우와 같이 캐릭터 작업을 위한 그래픽 아티스트 그룹이 모델링 파트와 에니메이션 파트로 구분해서 작업이 진행이 되는 경우가 있는데 이렇게 작업 공정이 이렇게 두 가지로 구분 되는 경우에도 토크에서 사용하는 방법이 훨씬 더 편리해 보인다.


배치 익스포트


배치 익스포트는 작업한 asset들을 한번에 최신 버전으로 모두 익스포트할 수 있는 기능을 의미한다. 이 기능은 개발 도중에는 필요성을 크게 느끼지 못할지도 모르지만 개발 완료 단계나 업데이트 직전, 혹은 업데이트 후 - 절대로 있어서는 안될 일이지만 - 급하게 롤백해야 하는 경우에 매우 유용한 기능이다.


대부분의 모델링, 에니메이션 등의 작업은  전체 게임 개발 공정 과정을 거치면서 계속해서 수정되어 가면서 다듬어지는 경우가 보통인데 이렇게 수정된 내용이 게임에서 사용되는 데이터 포맷이 아니라 3ds Max나 Maya와 같은 DCC 툴의 데이터 포맷으로 저장이 되는 것이 작업물의 버전 관리가 용이하다. 이러한 점을 고려하면 배치 익스포트를 사용하면 개발 과정의 후반에 art asset들의 최종 결과물을 한번에 정확하게 추출해 낼 수 있다는 장점이 있다.

엔진 별로 살펴 보면 N2에서는 모든 asset들에 대해서 기본적으로 배치 익스포트를 염두에 두고 설계가 되어 있는 반면에 토크 엔진이나 이모션 엔진에서는 이러한 배치 익스포트가 고려되어 있지 않다. 배치 익스포트의 경우에는 하나의 scene에 모델 데이터와 모든 에니메이션을 함께 관리하는 것이 편리하지만 여러 개의 scene에 구분되어 있는 경우라도 MAXScript과 외부 설정 파일(e.g. .cfg 파일 등) 등을 사용해서 배치 익스포트 기능을 제공하는 것을 고려하는 것이 좋다.

그런데 이번에 새로 출시되는 3ds Max 2008 버전의 경우 아래에 설명한 새로운 레이어 기능이 추가 되었다.


Biped Enhancements
This latest release provides you with new levels of flexibility with regard to your Biped rigs. A new Xtras tool lets you create and animate extraneous Biped features anywhere on your rig (for example, wings or additional facial bones) and save them as BIP files. These files are supported in Mixer and Motion Flow, as well as in Layers, where new layering functionality enables BIP files to be saved as offsets from each layer to isolate character motion. As a result, each layer can be saved as its own asset for export into a game.
언급한 바와 같이 하나의 scene 안에 각각의 레이어에 에니메이션을 분리해서 저장할 수 있다면 여러 개의 .max 파일에 에니메이션을 따로 저장하는 번거로움을 피할 수 있을 것으로 기대된다.


기타


토크 엔진에서는 3ds Max SDK와 C++ native 코드로 작성한 플러그인을 보다 쉽게 사용할 수 있도록 ProExporters라는 툴을 제공하고 있다. 이렇게 Scene을 익스포트하는 플러그인은 SDK로 개발하고 사용자가 필요한 정보를 손쉽게 조작할 수 있도록 MAXScript 를 사용해서 필요한 인터페이스를 제공하는 것도 훌륭한 방법으로 보인다.
토크 엔진에서는 게임에서 사용하는 모델의 정의가 다소 복잡한데 이렇게 게임 엔진에서 요구하는 모델이 엔진에서 지정하는 node hierarchy를 가져야 하는 등의 룰이 있는 경우 ProExporters와 같은 툴을 제공하는 것이 필요해 보인다.

<Torque 3ds Max ProExporters>



한가지 더. 토크 엔진의 플러그인을 테스트하다 보니 익스포트시 불필요한 노드들은 아래와 같이 지정한 설정 파일에 지정해서 익스포트하지 않는 방법을 사용하고 있다. 보통의 플러그인들이 숨겨진(hide) 노드들은 자동으로 익스포트하지 않도록 되어 있는 것과는 다르게 show/hide 설정 여부와 별개로 노드별로 지정할 수 있도록 되어 있다. 이러한 기능은 3ds Max SDK의 복잡한 기능을 이용하지 않고도 간단하게 개발할 수 있는 부분이므로 필요에 따라 익스포트 옵션 등을 정의하는 등과 같이 다양하게 응용할 수 있는 부분으로 보인다.

<익스포트할 노드와 그렇지 않은 노드를 .cfg 파일에 설정할 수 있다.>


 

결론

 

  • 에니메이션 파일은 별도의 파일로 각각 분리해서 저장하는 방법이 유리하다.
  • 익스포트와 관련한 플러그인은 SDK와 native 코드로 작성하고 관련한 UI는 MAXScript를 사용해서 개발하는 것이 편리하다.
  • 배치 익스포트 기능을 제공하도록 해라. 


참고 자료


[Tor] Torque Engine - http://www.garagegames.com
[Pro] Torque 3ds Max ProExporter - http://tdn.garagegames.com/wiki/3DSMax/ProExporters (등록된 사용자만 가능)

by kimsama | 2007/12/03 22:27 | Development | 트랙백 | 핑백(2) | 덧글(2)

트랙백 주소 : http://kimsama.egloos.com/tb/1668872
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Linked at CrazyXIII : 애니메이.. at 2007/12/04 17:59

... 민했어야 할 것들이 많았구나라는 생각이 든다. 게임을 만들면서, 어떤 툴이 필요한지에 대한 오의를 깨닭고 있는 중.. ㅎㅎ 관련 Post가 있네욤... ... more

Linked at East Agent's Blo.. at 2009/03/15 15:11

... 이전 포스팅에서 엔진 및 미들웨어 별 캐릭터 워크 플로우에 대해서 이야기한 적이 있습니다. Nebula2에서는 하나의 애니메이션 파일에 캐릭터의 모든 애니메이션들이 포함되어 있어야 하 ... more

Commented by 이모션 at 2009/03/30 11:16
안녕하세요

초면에 정말 죄송한데요..몇가지좀 여쭤볼게요 ;;

다른게 아니고 Emotion FX 는 3ds max 플러그인인가요?

아니면 다른 독립적인 프로그램인가요?

그리고 마지막으로 Emotion FX 어디서 구할수 있는지 가르쳐주실순없는지..;;

기분 상하셧다면 글 지우겠습니다.. 부탁드릴게요!
Commented by kimsama at 2009/03/30 17:16
http://www.mysticgd.com/ 여기 참조하시기 바랍니다.

:         :

:

비공개 덧글

◀ 이전 페이지다음 페이지 ▶