【Blender】ブレンダーとBVHファイル

久しぶりにブレンダーネタ、というか仕事でちょっとはまったので、備忘録。

なので、つまらない内容の記事になります。

それ平常運転、とかいうな。

BVH形式のファイルって、ブレンダーで作ったアニメーションの標準的な出力形式って勝手に思い込んでたけど、実はそうでもなかったっていう話。

BVH形式のファイルは、俺の調べた限りでは、右手系のY-upつまり鉛直がY軸上方向となる。

ちなみに、右手系なのでY-upだと、Z軸がこちらに向いている(手前がプラス、奥がマイナス)ことになるのかな。

Blenderはというと、同じ右手系なんだけれども、Z-upになっていて、Y軸が向こうを向いている(手前がマイナス、奥がプラス)。

もう、早くも混乱の兆候を見せ始めるんだけれども、座標系の話はおいといて。

ブレンダーがBVHファイルを読み込む際、BVHのY軸をブレンダーの座標系における上、つまりZ軸として自動で読み替えるという動作をする。

それ自体は便利でよいんだけれども、それじゃあブレンダーからBVHに出力するときには、Z軸をY軸として逆変換して出力してくれるかというと、してくれない。

なので、ブレンダーでBVHインポート、エクスポートを繰り返すと、次にインポートして開いたときにボーン全体の向きが変化してしまう。

上方向の軸が異なるだけなので、アニメーション自体は破綻無く動作するのでたいした問題ではないのかもしれないけれど。

おそらく、BVHファイルってフォーマットとしては、厳密性を欠く仕様なのでは無かろうかと思う。

たとえば、BVHファイルをブレンダーで開いたときのボーンの長さがどうなっているかというと、BVHファイル自体にはボーン(ジョイントとも)の長さにあたる情報は入っていない。

しかし、ブレンダー上はちゃんとボーンが長さを持って表示されている。

これはどういうことなのかって言うのが、今日の本題というか、はまったところで、結論としてはこうだ。

あるボーンの長さ(正確にはテールの位置)=子ボーン(正確にはボーンのヘッド)までの距離。ただし、子ボーンが複数ある場合は親ボーンと全ての子ボーンの重心位置になる。

あくまでブレンダーの動作を見る限りの予想なんだけれども、ブレンダーはこういう風に解釈してボーンの長さを決めているようだ。

それ以外にも、BVHファイルには親子関係の定義はあるものの、親子の接続情報は持ってないってことにも初めて気づいた。

【訂正】ボーン同士の接続情報はCHANNELSという情報で定義されているようだ。(例:親子関係だが接続なし→CHANNELS 6、親子関係で接続あり→CHANNELS 3)

なので、ファイルによってはブレンダーでBVHを開くと関節間の接続情報が無かったりする場合がある。

と、それ知ってなんになるのかって言う誰とく情報なんだけれども、一応仕事の課題がひとつ片付いたので、これから『Destiny』で遊びまくるぜイエイ。

4年前

コメントを残す

メールアドレスが公開されることはありません。