LoginSignup
10
8

More than 5 years have passed since last update.

glTF 2.0 アニメーションのメモ

Last updated at Posted at 2018-12-28

仕様はこちら

glTF 2.0 でアニメーションできるのは

  • tranlate
  • rotate
  • scale
  • weight

のプロパティ(path)のみ. また, 変化させることができるのは node の transform(translate, rotate, scale) と, morph target の weight のみ

たとえばマテリアルのパラメータを変化させることはできない.

animations

アニメーション(clip)の配列. たとえば ["run", "walk"] のような感じで animation clip を保持する.

animation は以下の変形させる channels の情報と, キーフレーム補間のための samplers の情報を持つ

Animation sampler

input のアクセッサでキーフレームの時刻リストのありかを指定する(input という名称がわかりずらい...)
input accessor には min/max プロパティが入っている(キーフレームの区間)
また, アニメーションの単位は

input : キーフレーム情報を持つ Accessor のインデックス. Accessor は min/max(キーフレームアニメーションの区間)を持たなければならない.
interpolation : 補間の形式(LINEAR, STEP, ...)
output : 各キーフレームに対応するアニメーションデータ(e.g. 回転 [10 度, 20 度, 30 度, ...])

たとえば AnimatedTriangle サンプルでは

min, max = [0.0, 1.0]
input count = 5
input = 0.0, 0.25, 0.5, 0.75, 1.0
(5 個のキーフレームで, 等間隔のキーフレーム)

output = rotation(VEC4) x 5

となっています.

Morph animation

output が morph weights の場合(後述の animation channel で接続関係がわかる)は, output の個数は input_count * weights の個数になります.

Sparse accessor

morph target などは sparse accessor でメモリ効率よくしてくださいと仕様にあるが, どれくらい使われているか(glTF ビューアでサポートされているか)は不明.

Animation channel

実際にアニメーションさせる node とそのプロパティ(path. e.g. translate, rotation, scale)を指定する.

sampler : 前述の, キーフレームアニメーションのための sampler.
target.node : アニメーション対象の node
target.path : アニメーションさせるプロパティ

アニメーション値の復元

float ではない形式(8bit, 16bit データ)の場合は, 復元する式がきまっています.

アニメーションの再生

時刻 t が与えられたときに,

for each channels:
  channel.sampler.accessor.min/max が min < `t` < max のときに
    channel.sampler.input のキーフレーム情報を参照し, 
    時刻 `t` に対するキーフレームと補間値を算出する

    channel.sampler.output からキーフレーム値を取得し補間し,
    それぞれの channels の target.path で指定したアトリビュートを変化

Skinning(bone animation)

glTF 2.0 では, Skinning(bone)をサポートしているが, skinning ではボーンの構造を記述するのみである. ボーンをアニメーション変化させるには, animation を使ってまずは各ノードの行列を変化させたのち, ボーン階層を評価して最終的な頂点位置を求める.

morph target との組み合わせ

T.B.W.

glTF 2.0 animation 仕様のここがよくない

アニメーションデータは Buffer から Accessor 経由で取得しないといけないため, bin or DataURI でエンコードされているため, テキスト形式でアニメーション情報を確認したり調整したりができない.

10
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8