Spine animation - kuimoani/defold GitHub Wiki
Spine animation
์ด ๋งค๋ด์ผ์ ์คํ์ธ(Spine)์ด๋ ๋๋๊ณค ๋ณธ(Dragon Bone)์ผ๋ก๋ถํฐ Defold๋ก ์คํ์ธ ์ ๋๋ฉ์ด์ ์ ๋ถ๋ฌ์ค๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
Spine
์คํ์ธ์ Esoteric Software์์ ๊ฐ๋ฐํ ์๋ํํฐ ์ ๋๋ฉ์ด์ ํด์ด๋ฉฐ, ๊ณจ๊ฒฉ ๋ฆญ(skeletal rig)์ ์์ง์์ ์กฐ์ ํ์ฌ ์ค๋ธ์ ํธ์ ๋ค์ํ ๋ถ๋ถ์ ์์ง์ด๋ ์ ๋๋ฉ์ด์ ์ ๋ง๋ค ์ ์์ต๋๋ค. ์ด๋ ์บ๋ฆญํฐ๋ ๋๋ฌผ์ ์ ๋๋ฉ์ด์ ํ๋๋ฐ ํนํ ์ ์ฉํ์ง๋ง ๋ฐง์ค, ์๋์ฐจ, ๋๋ญ์ ๊ฐ์ ๋ค๋ฅธ ์ค๋ธ์ ํธ์๋ ์ ์ ์ฉํ ์ ์์ต๋๋ค.
Defold๋ ๋ฐํ์ ํ๊ฐ(runtime evaluation) ๋ฐ ์คํ์ธ JSON ํฌ๋ฉง์ผ๋ก ๋ ์ ๋๋ฉ์ด์ ์ ๊ตฌํํฉ๋๋ค.
Defold๋ ์ญ๊ธฐ๊ตฌํ(IK = inverse kinematic)์ ํฌํจํ ์คํ์ธ ์ ๋๋ฉ์ด์ ๊ธฐ๋ฅ ๋๋ถ๋ถ์ ์ง์ํฉ๋๋ค.
ํ์ฌ, Defold๋ X ํน์ Y์ถ(axis)์ ๊ธฐ์ค์ผ๋ก ๋ผ๋๋ฅผ ๋ค์ง๋ ์ ๋๋ฉ์ด์ ํค(animation keys)๋ฅผ ์ง์ํ์ง ์์ต๋๋ค. Defolds๋ ๋ฉ์ฌ(mesh) ์ ๋๋ฉ์ด์ ์ ์ง์ํ์ง๋ง ์ค์ง ๋ผ๋๋ง ์ฌ์ฉํ๋ฏ๋ก ๋จ์ผ ๋ฒํ ์ค๋ฅผ ์ ๋๋ฉ์ด์ ํ ์ ์์ต๋๋ค. ๋ง์ฝ ๋จ์ผ ๋ฒํ ์ค(single vertices) ์ ๋๋ฉ์ด์ ์ด ํ์ํ๋ค๋ฉด ๋ผ๋๋ฅผ ํตํด ๋ฒํ ์ค์๋ง 100% ์ฐ๊ฒฐ(bind)ํ๊ณ ๋ผ๋๋ฅผ ์ ๋๋ฉ์ด์ ํด์ผ ํฉ๋๋ค.
Concepts
Spine JSON data file
์ด ๋ฐ์ดํฐ ํ์ผ์ ์ค์ผ๋ ํค, ๋ชจ๋ ์ด๋ฏธ์ง ์ฌ๋กฏ์ ์ด๋ฆ, ์คํจ, ์ค์ ์ ๋๋ฉ์ด์ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๊ณ ์์ผ๋ฉฐ ์ด๋ฏธ์ง๊ฐ ํฌํจ๋์ด ์์ง ์์ต๋๋ค. ๋น์ ์ด ์ ํํ ์ ๋๋ฉ์ด์ ์ํํธ์จ์ด์์ ์ด ํ์ผ์ ๋ง๋ค์ด๋ณด์ธ์.
Spine scene
Defold ๋ฆฌ์์ค๋ ์คํ์ธ JSON ๋ฐ์ดํฐ ํ์ผ๊ณผ ๋ผ๋ ์ฌ๋กฏ(bone slots)์ ๊ทธ๋ํฝ์ผ๋ก ์ฑ์ฐ๋๋ฐ ์ฌ์ฉ๋๋ ์ด๋ฏธ์ง ์ํ๋ผ์ค๋ฅผ ํจ๊ป ์ฐ๊ฒฐํฉ๋๋ค.
Spine model
์คํ์ธ ๋ชจ๋ธ ์ปดํฌ๋ํธ๋ ๊ทธ๋ํฝ ๋ฐ ์ ๋๋ฉ์ด์ ์ ํ๋ฉด์ ํ์ํ๊ธฐ ์ํด ๊ฒ์ ์ค๋ธ์ ํธ์ ๋ฃ์ด์ผ ํฉ๋๋ค. ์ด ์ปดํฌ๋ํธ๋ ์ ๋๋ฉ์ด์ ์ ์ฌ์ํ๊ณ , ์ฌ์ฉํ ์คํจ๊ณผ ๋ชจ๋ธ์ ๋ ๋๋ง ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๋ฉํฐ๋ฆฌ์ผ์ ์ง์ ํ๋ ์ค์ผ๋ ํค ๊ฒ์ ์ค๋ธ์ ํธ ๊ณ์ธต๊ตฌ์กฐ(skeleton game object hierarchy)๋ฅผ ํฌํจํ๊ณ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ Spine Model ๋ฌธ์๋ฅผ ์ฐธ๊ณ ๋ฐ๋๋๋ค.
Spine Node
GUI์ฌ์์ ์คํ์ธ ์ ๋๋ฉ์ด์ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ์คํ์ธ ๋ชจ๋ธ ์ปดํฌ๋ํธ ๋์ ์คํ์ธ GUI ๋ ธ๋๋ฅผ ์ฌ์ฉํ์ธ์. ์์ธํ ๊ฒ์ GUI Spine ๋ฌธ์๋ฅผ ์ฐธ๊ณ ๋ฐ๋๋๋ค.
Animation tools
Defold๊ฐ ์ง์ํ๋ ์คํ์ธ JSON ๋ฐ์ดํฐ ํฌ๋ฉง์ Esoteric Software์ ์คํ์ธ ์ํํธ์จ์ด๋ก ๋ง๋ค ์ ์์ต๋๋ค. ๊ฒ๋ค๊ฐ, ๋๋๊ณค ๋ณธ์ค(Dragon Bones) ๋ํ ์คํ์ธ JSON ๋ฐ์ดํฐ ํ์ผ๋ก ์ต์คํฌํธ ํ ์ ์์ต๋๋ค.
์คํ์ธ์ http://esotericsoftware.com ์์ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.

๋๋๊ณค ๋ณธ์ค๋ http://dragonbones.com ์์ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.

Importing a Spine character and animations
์คํ์ธ์์ ์ ์ํ ์ ๋๋ฉ์ด์ ๊ณผ ๋ชจ๋ธ์ด ์๋ค๋ฉด, Defold๋ก ์ํฌํธํ๋ ๊ณผ์ ์ ๊ฐ๋จํฉ๋๋ค:
- ์คํ์ธ JSON ๋ฒ์ ์ผ๋ก ์ ๋๋ฉ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ต์คํฌํธํจ
- ์ต์คํฌํธ๋ JSON ํ์ผ์ ํ๋ก์ ํธ ์๋ฌด๋ฐ๋ ๋ณต์ฌํจ
- ๋ชจ๋ธ๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ ํ๋ก์ ํธ ์๋ฌด๋ฐ๋ ๋ณต์ฌํจ
- ์ํ๋ผ์ค ํ์ผ์ ๋ง๋ค์ด ์ด๋ฏธ์ง๋ค์ ์ถ๊ฐํจ (์ํ๋ผ์ค๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ 2D graphics ๋ฌธ์๋ฅผ ์ฐธ๊ณ )

๋๋๊ณค ๋ณธ์ฆ(Dragon Bones)์์ ์์ ํ๋ ๊ฒฝ์ฐ, ๊ฐ๋จํ๊ฒ Export Data Type์ Spine์ผ๋ก ํ๋ฉด ๋ฉ๋๋ค. ๋ํ Image Type์ผ๋ก๋ Images๋ฅผ ์ ํํ์ธ์. ์ด๋ ๊ฒ ํ๋ฉด .json ํ์ผ๊ณผ ํ์์ ์ธ ๋ชจ๋ ์ด๋ฏธ์ง๊ฐ ํด๋๋ก ์ต์คํฌํธ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ ์์ ์ค๋ช ๋๋ก Defold์ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค.

Defold์์ ์๋๋ฉ์ด์ ๋ฐ์ดํฐ์ ์ด๋ฏธ์ง ํ์ผ์ ์ํฌํธํ๊ณ ์ ์ ํ ๊ฒฝ์ฐ, ์คํ์ธ ์ฌ ํ์ผ(Spine scene file)์ ์์ฑํด์ผ ํฉ๋๋ค:
- ์๋ก์ด ์คํ์ธ ์ฌ ํ์ผ์ ์์ฑํจ (๋ฉ์ธ ๋ฉ๋ด์์ New > Spine Scene File ์ ํ)
- ์คํ์ธ ์ฌ ํ์ผ์์ spine_json ๊ณผ atlas ์์ฑ์ ์ค์ ํด์ ์ํฌํธ๋ JSON ํ์ผ๊ณผ ์๋ก ์์ฑํ ์ํ๋ผ์ค ํ์ผ์ ์ฐธ์กฐํจ

Creating SpineModel components
๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ํฌํธํ๊ณ ์คํ์ธ ์ฌ ํ์ผ์ ์ค๋นํ๋ฉด, ์คํ์ธ ๋ชจ๋ธ์ ๋ง๋ค ์ ์์ต๋๋ค. ์์ธํ ๊ฒ์ SpineModel ๋ฌธ์๋ฅผ ์ฐธ๊ณ ๋ฐ๋๋๋ค.
Creating Spine GUI nodes
๋ํ GUI์ฌ์์ ์คํ์ธ ์ ๋๋ฉ์ด์ ์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค. ์์ธํ ๊ฒ์ GUI spine ๋ฌธ์๋ฅผ ์ฐธ๊ณ ๋ฐ๋๋๋ค.
Animating Spine models and nodes
Defold๋ Lua ์ธํฐํ์ด์ค๋ฅผ ํตํด ์ ๋๋ฉ์ด์ ์ ์ฌ์ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ฐ๋ ฅํ ๋ฐํ์ ์ ์ด ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์์ธํ ๊ฒ์ Animation ๋ฌธ์๋ฅผ ์ฐธ๊ณ ๋ฐ๋๋๋ค.
Atlas caveats
์ ๋๋ฉ์ด์ ๋ฐ์ดํฐ๋ ๋ผ๋์ ์ฌ์ฉ๋ ์ด๋ฏธ์ง๋ฅผ ํ์ผ ์ ๋ฏธ์ฌ(suffix)๊ฐ ์๋ต๋ ์ด๋ฆ์ผ๋ก ์ฐธ์กฐํฉ๋๋ค. ์คํ์ธ ์ํํธ์จ์ด์์ ์คํ์ธ ํ๋ก์ ํธ๋ก ์ด๋ฏธ์ง๋ฅผ ์ถ๊ฐ ํ๋ฉด Images ์๋์ ๊ณ์ธต์ ๋ฆฌ์คํธ์ ๋ฉ๋๋ค:

์ด ์์ ๋ ํํํ ๊ตฌ์กฐ(flat structure)๋ก ๋ฐฐ์น๋ ํ์ผ์ ๋ณด์ฌ์ค๋๋ค. ํ์ง๋ง ํ์ ํด๋๋ก ํ์ผ๋ค์ ์ ๋ฆฌํ ์ ์์ผ๋ฉฐ ์ด ํ์ผ๋ค์ ์ฐธ์กฐ๊ฐ ๋ฐ์๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋์คํฌ์ "head_parts/eyes.png" ํ์ผ์ ์ฌ๋กฏ์ ์ฌ์ฉํ๋ฉด "head_parts/eyes"๋ก ์ฐธ์กฐ๋ฉ๋๋ค. ๋ํ ์ด ์ด๋ฆ์ JSON ํ์ผ๋ก ์ต์คํฌํธ ๋์ด๋ ์ฌ์ฉ๋๋ฏ๋ก, Defold ์ด๋ฏธ์ง ์ํ๋ผ์ค๋ฅผ ์์ฑํ ๋ ๋ชจ๋ ์ด๋ฆ์ ์ํ๋ผ์ค ์ ๋๋ฉ์ด์ ๊ณผ ์ผ์น์์ผ์ผ ํฉ๋๋ค.
Add Images๋ฅผ ์ ํํ๋ฉด Defold๋ ์ถ๊ฐ๋ ํ์ผ๊ณผ ๊ฐ์ ์ด๋ฆ์ ์ฌ์ฉํ๋ ์ ๋๋ฉ์ด์ ๊ทธ๋ฃน(animation group)์ ์๋์ ์ผ๋ก ์์ฑํ์ง๋ง ํ์ผ๋ช ์ ์ ๋ฏธ์ฌ(suffix)๋ ์๋ต๋ฉ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ ๋๋ฉ์ด์ ๊ทธ๋ฃน์ "eyes.png" ํ์ผ์ ์ถ๊ฐํ ํ์ "eyes"๋ผ๋ ์ด๋ฆ์ผ๋ก ์ฐธ์กฐ๋ฉ๋๋ค. ์ด๋ ๊ฒฝ๋ก๊ฐ ์๋๋ผ ์ค์ง ํ์ผ ์ด๋ฆ์ผ๋ก๋ง ๋์ํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ ๋๋ฉ์ด์ ์ด "head_parts/eyes"๋ฅผ ์ฐธ์กฐํ๊ณ ์๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น์? ์ด๋ฆ์ ์ผ์น์ํค๊ธฐ ์ํ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ์ ๋๋ฉ์ด์ ๊ทธ๋ฃน์ ์ถ๊ฐ(์์๋ผ์ธ ์ฐฝ(Outline)์ Atlas ๋ฃจํธ ๋ ธ๋์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ํด๋ฆญ ํ Add Animation Group ์ ํ)ํ๋ ๊ฒ ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๋๋ฉ์ด์ ๊ทธ๋ฃน์ ์ด๋ฆ์ "head_parts/eyes"๋ก ๋ฐ๊พธ๊ณ (๊ฒฝ๋ก๊ฐ ์๋๊ณ / ๋ฌธ์๊ฐ ๋ค์ด๊ฐ ์ด๋ฆ์ผ ๋ฟ) ์ด ๊ทธ๋ฃน์ "eyes.png"ํ์ผ์ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค.

์คํ์ธ ๋ชจ๋ธ(Spine model)์ ์ ๋๋ฉ์ด์ ์ผ๋ก ์์ง์ด๊ฒ ํ๋ ค๋ฉด Animation ๋ฌธ์๋ฅผ ์ฐธ๊ณ ๋ฐ๋๋๋ค.