Away3Dで使えるフォーマット「AWD」をBlenderから書き出すテスト

BlenderとAway3Dでやりとりするフォーマットを模索中。。。 Away3Dで使えるフォーマット「AWD」をBlenderから書き出せたので備忘録として残します。 例によってMac環境での説明です。 AWDとは→ awd - Away3D Data file format - Google Project Hosting

やり方

基本的には公式サイトのwiki にある通りにやっていきますが、いろいろと躓いたのでメモ。 Blenderは2.6aでした。

  1. 適当なフォルダで hg clone https://code.google.com/p/awd/ して最新版のソースを落とす。 1. hg コマンドを使うにはクライアントをインストールしておく。→ Mercurial SCM
  2. $ cd sdks/cpp-libawd $ sudo make install する
  3. $ cd sdks/python-pyawd $ python3 setup.py install する 1. BlenderのPythonは3.2 を使っているので(BlenderでPython Consoleを表示させるとバージョンがわかります) macportsや公式サイトからインストーラを落とすなどして Python3.2 をインストールしておく
  4. sdks/python-pyawd/build/lib.macosx-10.6-intel-3.2/の中にpyawdというフォルダができている
  5. pyawdフォルダをblender.app/Contents/MacOS/2.60/python/lib/python3.2 の中にコピーする。 (Finderでblender.appを選択してパッケージの内容を表示で見れます)
  6. exporters/blender/の中にある io_awd というフォルダをblender.app/Contents/MacOS/2.60/scripts/addons の中にコピーする
  7. Blenderを起動し、User Preferences->Addons->Inport-Export: Away3D AWD2 formatを有効にする。
  8. 使えるようになりました!! File->Exportから選択できるようになっています。

デモ

とりあえずBlenderのおさるさんを書きだして、Away3D4.0で読みこみました。 LoadAWDTest.swf

Flash Player required.
package
{
    import away3d.containers.View3D;
    import away3d.entities.Mesh;
    import away3d.events.AssetEvent;
    import away3d.library.AssetLibrary;
    import away3d.library.assets.AssetType;
    import away3d.loaders.parsers.AWD2Parser;
    import away3d.materials.ColorMaterial;
    import away3d.materials.methods.*;
    import away3d.primitives.WireframeSphere;

    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.net.URLRequest;

    [SWF(width = "450", height = "450", frameRate = "30")]
    public class LoadAWDTest extends Sprite
    {
        private var view:View3D;
        private var sphere:WireframeSphere;
        private var mesh:Mesh;

        public function LoadAWDTest()
        {
            super();
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;
            view = new View3D();
            view.camera.position.z = -40;
            view.backgroundColor = 0x333333;
            view.antiAlias = 3;
            addChild(view);
            sphere = new WireframeSphere(200, 16, 16, 0xFFFFFF, 3);
            sphere.rotationX = 30;
            view.scene.addChild(sphere);
            load();
            this.addEventListener(Event.ENTER_FRAME, handleEnterFrame);
        }

        private function handleEnterFrame(ev:Event):void
        {
            if (mesh) {
                mesh.roll(1);
            }
            sphere.yaw(2);
            view.render();
        }

        public function load():void
        {
            AssetLibrary.enableParser(AWD2Parser);
            AssetLibrary.addEventListener(AssetEvent.ASSET_COMPLETE, onAssetComplete);
            AssetLibrary.load(new URLRequest("assets/awdtest.awd"));
        }

        protected function onAssetComplete(event:AssetEvent):void
        {
            trace("Done loading.", event.asset.name, ":", event.asset.assetType);
            if (event.asset.assetType == AssetType.MESH) {
                mesh = event.asset as Mesh;
                var _material:ColorMaterial = new ColorMaterial(0x004400);
                _material.addMethod(new OutlineMethod(0x88ee44, 0.03, true, true)); //アウトライン作成
                mesh.rotationX = -90;
                mesh.material = _material;
                mesh.castsShadows = true;
                mesh.scale(100);
                view.scene.addChild(mesh);
            }
        }
    }
}

AWDの可能性

AWD自体はボーンアニメーション対応しているようですが、(githubにあるサンプルは動きます) まだBlender exporterが対応していないようなのでArmature設定していると書き出しエラーになります。 現在開発中とのことなので、 完成版に期待します・・・! それにしてもAway3D 4.0の情報少なくてつらいです。 API Referenceがあるだけましですが、デモがもっと充実していればわかりやすいのになー。

参考にしたサイト:Away3D Forum Installing pyawd for AWD for use in Blender