glTF: Animation
Sampler
code:json
{
"input": 0,
"interpolation": "LINEAR",
"output": 1
}
input ・ output に指定したaccessorでキーフレームを打っていく
output が値となる
Accessor
componentType は5126 (GL_FLOAT) type は、 input であれば SCALAR 、 output であればプロパティに応じて SCALAR ・ VEC3 ・ VEC4 など
input に使うaccessorの場合、minとmaxを入れよう
アニメーションの開始時間・終了時間に相当するよ
Buffer View
samplerに利用するbufferViewのtargetは指定しない
code:gltf-validator
BUFFER_VIEW_TARGET_OVERRIDE: Override of previously set bufferView target or usage. Initial: 'VertexBuffer', new: 'Other'
補間
samplerの補間 interpolation には、 STEP ・ LINEAR ・ CUBICSPLINE が利用できる
STEP の場合、補間はされず、現在の時刻より前に定義されたキーフレームの値がそのまま反映される
LINEAR の場合、キーフレーム間が線形補間される
アニメーション対象が回転の場合、Slerpが適用される キーフレームには、値に加えてtangent値が記録される
すなわち、キーフレームのデータ量は3倍となる
Channel
code:json
{
"sampler": 0,
"target": {
"node": 0,
"path": "translation"
}
}
上記で作ったsamplerを指定し、実際にどのnodeのなにをアニメーションさせるかを指定する
path に指定できるのは、 translation ・ rotation ・ scale ・ weights
pathが weights の場合、 output に指定するsamplerのaccessorの type は SCALAR になる
output の実データには、フレームごとに、対応するnodeのモーフの個数だけスカラを入れていく
w0, w1, w2, ..., w0, w1, w2, ... という感じ
すなわち、データの長さは ( キーフレーム数 × nodeのモーフ数 ) となります
だるいね!