BVH 形式のファイルを読んで表示するプログラム (BVH Viewer)

スケルタルアニメーションについて調べる機会があったので、ついでに習作として簡単なプログラムを書きました。

ソースコード


Xcode のプロジェクトを公開します。言語は C++ です。描画には OpenGL を使っています。Mac 向けですが、少ない修正で WindowsLinux でも動かせると思います。

zip 形式でダウンロード

追記 (2018/8/10) リンク切れになっていたので GitHub にて改めて公開しました。Xcode ではなく cmake を使うように修正しました。
GitHub - yuki-koyama/bvh-viewer: [deprecated] A viewer of BVH motion capture data

プログラムの概要

BVH ファイル形式で記述されたモーションキャプチャデータを読み込んで、棒人間を表示するプログラムです。

プログラムはできる限り簡素に書かかれています。レンダリングやインタフェースなどに余計な機能はつけていないので、何をしているかは読めば容易に理解できると思います。(ただし C++ に疎いため、ソースコードは汚いです。)

以下に、メインとなるオブジェクトのクラス定義を掲載しておきます。

class BVHObject {
    typedef int                 Index;
    typedef std::vector<double> Pose;
    
public:
    std::vector<Joint>   joints;
    std::vector<Channel> channels;
    std::vector<Pose>    motion;
    
    std::map<std::string, Index> jointNameToIndex;
    
    double       interval;
    int          nFrames;     // equal to motion.size()
    int          nChannels;   // equal to channels.size();
    bool         ready;
    std::string  name;
    
    bool         renderingJoint;
    bool         renderingBone;
    
    void clear();
    void init(std::string fileName);
    void render(int frameNum);
    
    BVHObject();
    ~BVHObject();
private:
    void renderJoint(Index joint, Pose pose);
    void renderBone(Vector3d position0, Vector3d position1);
};

ケルトンは木構造になっているので、レンダリングの際は関数の再起呼び出し (ここでは void renderJoint(Index joint, Pose pose) が再起呼び出しされる) を利用して実装してあります。

また、Pose はあるフレームにおける姿勢を表しており、各 Joint の回転角などの集合 (並び順は BVH ファイル形式に従っている) になっています。Pose をフレーム順に並べたものを motion としています。

動作例


モーキャプデータ

mocapdata.com
というサイトが無料(一部有料)でモーキャプデータを配布しています。これらのデータは自由に複製、頒布、展示、実演をすることができ、また二次的著作物を作成することもできるそうです。
http://mocapdata.com/page.cgi?p=terms_of_use
今回は上記のサイトからモーキャプデータを使わせて頂いています。

また、少し前に話題になります、Perfume のダンスのモーキャプデータが BVH ファイル形式で公開されました。このモーキャプデータを使って棒人間をダンスさせることも可能です。
Perfume Global Lab

実際に棒人間をダンスさせてみました。


参考にしたサイト

コンピュータグラフィックス特論�U 講義情報ページ


配布物に含まれるモーションキャプチャデータは、mocapdata.com, Eyes, JAPAN Co. Ltd. により「クリエイティブ・コモンズ表示 2.1 日本ライセンス」の下でライセンスされています。
使用許諾条件は、mocapdata.com, Eyes, JAPAN Co. Ltd. または http://creativecommons.org/licenses/by/2.1/jp/ にお問い合わせください。
http://mocapdata.com/
(C) Copyright Eyes, JAPAN Co. Ltd. 2008-2009