Away3Dで使えるフォーマット「AWD」をBlenderから書き出すテスト
3D, ActionScript, Blender, Flash ·BlenderとAway3Dでやりとりするフォーマットを模索中。。。 Away3Dで使えるフォーマット「AWD」をBlenderから書き出せたので備忘録として残します。 例によってMac環境での説明です。 AWDとは→ awd - Away3D Data file format - Google Project Hosting
やり方
基本的には公式サイトのwiki にある通りにやっていきますが、いろいろと躓いたのでメモ。 Blenderは2.6aでした。
- 適当なフォルダで hg clone https://code.google.com/p/awd/ して最新版のソースを落とす。 1. hg コマンドを使うにはクライアントをインストールしておく。→ Mercurial SCM
- $ cd sdks/cpp-libawd $ sudo make install する
- $ cd sdks/python-pyawd $ python3 setup.py install する 1. BlenderのPythonは3.2 を使っているので(BlenderでPython Consoleを表示させるとバージョンがわかります) macportsや公式サイトからインストーラを落とすなどして Python3.2 をインストールしておく
- sdks/python-pyawd/build/lib.macosx-10.6-intel-3.2/の中にpyawdというフォルダができている
- pyawdフォルダをblender.app/Contents/MacOS/2.60/python/lib/python3.2 の中にコピーする。 (Finderでblender.appを選択してパッケージの内容を表示で見れます)
- exporters/blender/の中にある io_awd というフォルダをblender.app/Contents/MacOS/2.60/scripts/addons の中にコピーする
- Blenderを起動し、User Preferences->Addons->Inport-Export: Away3D AWD2 formatを有効にする。
- 使えるようになりました!! 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