Spine Animationrig

Spine Animationrig

f:id:Ko-Ta:20191006195248p:plain
SpineAnimationrig01

ko-ta2142.github.io

こんなのつくりました。Spine を制御するツールです。Spineエディタより上の層、ランタイムを制御するためのツールとライブラリです。アニメーションを作るデザイナーさんもランタイムの機能を使ってより高度な制御が出来るアプリケーションです。

例えば、ループタイムを変えたり、4つのアニメーションを合成したり、任意のタイミングでアニメーションを切り替えたり、そんなことがプログラムを使わずに出来ちゃいます。

Unityでも頑張れば出来ます。けど、どんなときもUnityが使えるとは限りません。ちょっと動画が欲しい際などには大変役立ちますよ。

いきさつ

Spineを使って表情付け(facial rig)を行っていました。最初はテキストファイルに使用するアニメーションを定義して使っていましたが、兎に角、量が多いことやブレンド率やイージングなど、テキストで管理することが限界を迎えました。そこで、汎用的なタイムライン式のツールを作り始めました。公式にライセンスをお伺いしたところ

  • ランタイムをつかったアプリはライセンスの有無は問わない(ランタイムのソースコードを扱う当人はライセンスが必要)
  • ランタイムを使って画像、動画を出力しても構わない
  • ランタイムは用途に合わせて手を加えても構わない。
  • コピーライトと使用ライセンスの文言は入れること

とのこと。了承も取れたので公開しました。 物理計算使いたいなぁーとか、一連のアニメーションをくっつけて連番出力したいなぁーとか、きっと同じ悩みのひとに役立てると思います。

Spineって何?

Spineは、乱暴な言い方をすればキャラクターリグが出来るアニメーションツールです。主な機能として、ボーン変形、メッシュ変形を持っています。

ja.esotericsoftware.com

世の中、アニメーションツールで有名どころでは live2D , SpriteStudio , Moho , Flash などがあります。それぞれ一長一短がありますが、この中では live2D と Moho の中間ぐらいのツールかも知れません。公式の文言を借りれば、アクションゲームのキャラクターリグに特化したツールです。 全く違う使い方をしてめんなさい!

このツールの存在意義

話は戻ってこのツール、SpineAnimationrig についてです。 制御のために作った物ですが、ついでに、幾つか機能を付け加えました。大部分はSpineのランタイム機能(EntryTrack)を使いやすい形に落とし込んだ物ですが、どうしても欲しくて独自追加したものがあります。それが Physics(物理計算)です。

Spineには残念ながら、(現時点では)物理計算は搭載されておりません。いずれされるかも知れませんが、今のところは Unityなどゲームエンジンでやってください。 という方向性です。確かに、ちゃんと物理計算するには、ゲームエンジンとの連携は必須です。が、Spineはマルチプラットフォームであるが故に、そこまで干渉することは不可能です。

でも、そこまでちゃんとした物じゃ無くて良いんです。他の物体に干渉できなくて良いんです。ただちょっと、アニメーションの作成の補助、揺れを追加したいだけなんです。物理計算をエンジンに影響を与えないのであれば、マルチプラットフォームを維持できます。

f:id:Ko-Ta:20191006204247g:plain
Physics force

物理計算は組んだこと無かったので完璧ではありませんが、アニメーションを作るうえでは必要十分な物が出来ました。満足です。胸だってちゃんと揺れます :)

というわけで、良かったら使ってみてください。絵をちょっと動かすぐらいなら、live2Dより低コストに出来ます。Spineは必要になるので買ってください。Pro版を。

ko-ta2142.github.io

ja.esotericsoftware.com

おまけ:live2Dと違うところ

※そのうち記事を分離します。

よく比較対象に上がります。 現段階でのすごく乱暴な比較をすればこんな感じ。

name デフォーマ(ラティス) マルチボーン変形 物理計算 IK アニメーション管理
Spine no yes no yes no
live2D yes no yes no yes

個人的に大きな差異は、モデリングにおいてはデフォーマとマルチボーン、アニメーション作成においては物理計算、そしてSpineにはアニメーションを管理する機構はランタイム(プログラム)に丸投げという点です。

このなかでも、疑似3Dを行う場合は、live2Dの謳うデフォーマ(Blenderでは似たような物にラティスという変形があります)の有無は大きいです。 元の画像に何回変形が加えられるかで自由度が決まります。

変形回数

Spine
out = mesh*n + bone*n
live2D
out = mesh*n + bone*2 + deform*n

Spineはオーソドックスな3Dでよくあるモデルです。メッシュ変形とボーン変形から成ります。どちらも複数合成できます。

一方 live2D はボーン変形が決め打ちです。これはパーツ切りが大変だったり(ボーン内ボーンのよう扱いが出来るカーブという抜け道があったりしますが)とかなり制約を食います。 ただし、その後のデフォーマが複数適用できるので、これで調節してねといった作りです。

疑似3Dを表現する

疑似3Dを行う場合、両者で使う機能が異なります。

メッシュ変形 ボーン変形 デフォーマ
Spine やや 一般的 no
live2D no no 一般的

これは 出来ない ではなく、そのようにするべきかどうか、一般的かどうかです。 live2D はデフォーマに集約されています。これは何故でしょうか?

答えは、疑似3D以外にも変形は使われるからです。表情の変化であったり物理計算もこれに含まれます。 有限な資産(変形)を表現で食い合うわけです。 live2D はそこをデフォーマに絞り込むことで、メッシュ変形とボーン変形が自由に扱えます。アニメーションによっては、疑似3Dの要素として使用しても構いません。

さて、Spineですが、疑似3Dを行うと、その有限な資産が一気に減ります。 出来ればボーンでやりたいのですが、ボーンはそもそも動きのコントロールに使いたいところです。 3D用のボーンとコントロール分ければ良いんじゃねぇの?と言われればその通り。ただし、ボーンウエイトの原理について言及すべきです。

bone weight
weight = w1 + w2 + w3 + w4 = 1.0
out = v*w1 + v*w2 + v*w3 + v*w4

ボーンが分かれても重みは合計で1.0までと有限です。ここでも資産を食い合っているわけです。 この考えは良いところまで行っていると思います。ウエイトのグループを複数持つことが出来れば、解決できるでしょう。

weight1 = w1 + w2 =1.0
weight2 = w3 + w4 = 1.0
out = v*w1 + v*w2 + v*w3 + v*w4

これなら可能性があるはずです。

ということで、Spineの場合、疑似3Dの他用 にはあまり向いていません。背景を疑似3Dにするには十分なツールです。ですが、良く動くキャラに疑似3Dを適用するには向いていません。何かを犠牲にする必要が出てきます。 今後のアップデートで、Blenderにおけるラティスが実装されれば、この局面も打破できるでしょう。

物理計算

live2Dは思ってたのと違う……と最初思うかも知れませんが、有ることはとても大事です。というのも揺れを手付けすることは、上手い下手にかかわらず、かなりの労力を食います。

live2Dの物理計算は パラメータの動き で管理されます。位置の移動量ではありません。縦に振ったから縦に力が働いたりしません。なので、空の物理計算用パラメータを作って、そこから力を発生させるとかそんな使い方をすることもあります。

一方Spineには有りません。これは結構残念な点です。 そこで、この SpineAnimationrig をお使いください。もっともスタンダートなボーンの位置の変化から計算します。なので、大雑把に作って大雑把に動いてくれます。

アニメーション管理ツール

Spineのもう一つの欠点がコレです。Spineのランタイムがコレに当たりますが、プログラムにお任せしています。 Spineランタイムは良く出来ていて、プログラムを扱う側からするととても簡単で、無駄も無く、効率よく制御できます。 が、プログラミングが必要であり、タイミングもプログラム制御、Unityという環境を手に入れないとタイムラインで操作できません。(プレビューできる範囲にも制限があります)。

ゲームのちっちゃなキャラとしてはそれで十分だと思いますが、芝居などで数十個のアニメーション管理が必要になったら、SpineAnimationrig を試してみてください。 きっとお力になれるはずです。