본문 바로가기

프로그램

Spine - 2D 스켈레톤 애니메이션 툴

Skeletal Animation Tool

인디 게임을 개발할때 툴의 부재는 큰 부담입니다. 툴을 직접 만들어서 쓰자니 시간과 노력이 너무 많이 들어가고, 상용 프로그램을 사서 쓰자니 돈이 많이 들어가기 때문입니다. 특히 2D 분야에서 애니메이션 관련 툴들은 너무 빈약합니다. (여기서 애니메이션 툴은 이미지 시퀀스로 이루어진 스프라이트 애니메이션을 제작하는 툴이 아닌 스켈레톤 형태의 애니메이션을 제작하는 툴을 말합니다.) 3D 분야에서는 완성도 높은 툴들이 많이 있지만, 2D 분야는 이렇다 할만한 툴이 아직 없습니다. 그래서 2D 애니메이션 툴에 대한 필요성을 항상 느끼고 있었습니다.

Skeletal Animation vs Sprite Animation

2D 애니메이션이라고 하면 전통적으로 여러개의 이미지를 연속으로 보여주는 애니메이션을 말했습니다. 하지만 이러한 애니메이션은 심각한 단점들이 있습니다. 가장 큰 단점은 용량입니다. 애니메이션 하나가 20개의 이미지로 이루어져 있다면 애니메이션의 용량은 기존 이미지의 용량에 비해 20배가 될 것입니다. 더 세밀할수록, 더 길수록 애니메이션의 용량은 엄청나게 커지게 됩니다. 용량이 커지면 게임의 용량이 심각하게 커질 수 있습니다. 단지 게임의 용량의 커질뿐만 아니라 읽어들어야할 데이터가 많아져서 로딩시간이 길어지게 됩니다.

이러한 문제를 해결한것이 Skeletal Animation 입니다. Skeletal Animation은 스프라이트 애니메이션과 달리 3D 분야에서는 Sprite 형태의 애니메이션이 존재하지 않기 때문에 모두 Skeletal Animation으로 제작해야 합니다. 그렇기 때문에 3D 분야에서는 Skeletal Animation 툴이 많이 만들어 졌습니다. 2D 애니메이션은 그 동안 전통적인 Sprite Animation으로 충분했기 때문에 Skeletal Animation 툴이 그다지 필요하지 않았으나 2D 게임의 퀄리티를 높이기 위해서 Skeletal Animaion의 필요성이 부각되고 있습니다.

현재 Kickstarter를 통해 개발 자금을 모아 개발 되고 있는 Skeletal 애니메이션 툴들중 다음 2가지가 주목받고 있습니다.

Spriter           Spine

각각의 장단점을 간단하게 말하자면 Spriter는 보다 사용이 편리하고, Spine은 기능이 더 좋습니다. (주관적입니다.)

여기서는 Spriter 보다 Spine에 더 중점을 두어 설명하도록 하겠습니다. 



Spine

Spine은 위에서 말한대로 게임 개발 및 여러 프로젝트에서 활용할 수 있는 2D skeletal animaion tool입니다. 보다 직관적인 인터페이스를 만들기 노력헀다고 하나 Setup모드와 Animation 모드로 나누어져 있어서 불편함이 있습니다. 여러가지 기능을 넣기 위해서는 Setup 모드와 Animation을 나누는 것이 최선의 선택이라고는 생각되지만, 좀 불편한건 불편합니다.

Setup모드와 Animation 모드

Bone

각각의 이미지 요소들은 모두 bone에 대응될 수 있고, bone들은 계층 구조를 이룰 수 있습니다. 계층구조를 이룬다는 말은 bone들 사이에는 부모와 자식의 관계가 있어서 bone들이 유기적으로 움직일 수 있다는 것을 말합니다. 각각의 bone에 대한 애니메이션을 따로 지정해 줄 수 있고, 자식 bone은 부모의 애니메이션에 영향을 받게 됩니다. 가령 달리기를 표현하고자 할때 다리 부분은 허벅지부분, 종아리부분, 발 부분으로 나눌 수 있습니다. 허벅지를 움직이면 종아리와 발이 같이 움직이게 되고, 같이 움직이는 동시에 종아리와 발은 별개의 애니메이션을 진행할 수 있습니다. 이런식으로 말이지요.

작은 데이터

처음에 말한것 처럼 Skeletal Animation이 Sprite Animation 보다 좋은 이유 중 하나는 용량이 작다는 것입니다. 용량이 수십 분의 일 정도로 차이가 꽤 큽니다. 하지만 좋은점만 있는것은 아닙니다. Sprite Animation은 순수 이미지 파일을 적당히 이어서 보여주는 것이기 때문에 구현하기가 쉽습니다. 하지만 Skeletal Animation은 데이터 파일로 존재하기 때문에 게임 내에서 데이터를 이용하여 애니메이션을 구현하는 것은 어려운 일입니다. 특히나 복잡한 움직임을 표현하기 위한 데이터일 수록 구현은 훨씬 어려워 집니다. 다행히 Spine은 다양한 플랫픔을 지원할 계획을 가지고 있습니다. Spine은 현재는 LibGDX (Spine 개발자가 참여하고 있는 게임 프레임워크) 와 CoronaSDK 만 지원하고 있습니다. 하지만 앞으로 cocos2d, XNA, Unity, AS3 등 여러 게임 엔진들을 지원할 것이라고 합니다. 그리고 Spine은 다양한 export 포맷을 가지고 있습니다. 기본적인 export 포맷은 json 파일로, json 파일로부터 데이터를 추출하여 애니메이션을 만들어 낼 수 있습니다. 또한 gif 애니메이션, jpg 이미지 시퀀스, avi 동영상 파일로도 export할 수 있어서, 데이터로부터 애니메이션을 구현하기 어려운 상황에서는 Sprite Animation으로 구현할 수 있습니다.


spine export 포맷들다양한 export 포맷들spine으로 부터 만들어지는 json 파일들spine으로 부터 만들어지는 json 파일들

이미지 시퀀스로 export 할 수도 있다!



다양한 Interpolation

이 부분은 Spine만의 강점으로 내세우고 있는 부분 입니다. Spine 애니메이션은 단순히 Linear한 애니메이션이 아닌 여러 종류의 Interpolation을 지원합니다. 가령 처음에는 속도가 느렸다가 점점 가속되는 애니메이션을 구현할 수 있습니다. 이러한 애니메이션들은 게임 내에서 보다 역동적인 효과를 보여주는데 사용될 수 있습니다. 가령 그네의 움직임을 보여줄때 높은곳에서 내려오면서 점점 가속되는 모습을 보여줄 수 있습니다.