Tag : blender

7 月 13 2008

COLLADAオブジェクトをPapervision3Dで表示してみる

Posted by tanjo at 4:20 AM

Lightwaveでモデル作成 → BlenderでCOLLADA出力 → Papervision3Dでレンダリング、と練習してみます。
PV3Dやってみる(5) 【DAEデータを読み込み】 | [FlaTech+]WebDesign Rainyday を参考にさせていただきました。やりながら気づいたこと、つまずいた点とかを書いておきます。

モデルの作成

Lightwave Modelerで適当にモデルを作ります。

lw_pers

UV投影方式は Atlas にしました。
データインポート時にトラブルのもとになる(気がした)ので、UV名やサーフェス名は、半角英数のみ・記号なしの短いものにした方が無難です。ちなみにUVマップされていないサーフェスは、Papervision3Dで描画できないっぽいです。単純なモデルでもUVマッピングしましょう。
マップ画像の形式は、JPEG か PNG あたりにしておけば問題ないです。ちなみにPNGに透明色があると、その部分はPapervision3Dで描画したときに透明のテクスチャとして扱ってくれます。自動で。これは便利!

lw_uv

そして、そのままネイティブのLWOファイルとして保存。ファイル名も box.lwo とか無難なものに。
私は最新版のLightwave 9.3.1を使用していますが、このバージョンのLWOでも、Blenderはインポートしてくれました。

COLLADA形式での書き出し

あらかじめBlenderをセットアップしておきます。
Blender起動時に、すでに余計なモデルやライトが置いてある場合は、[A]キーを使って全選択 → [Delete] で削除できます。
File > Import > Lightwave (.lwo) から、先ほどのLWOをインポート。アニメーションモードに切り替え(下図)、ブラウザパネルで書き出すオブジェクトだけが選択されているか確認し、File > Export > COLLADA 1.4 (.dae) を選択します。

bl_mode

エクスポート設定はこのようにしました。

bl_export

ポリゴンを三角分割する/選択部分だけ書き出し/UVマップを使用する、の3つにチェックしています。「Disable Physics」もチェックしていいかもしれませんね。
この時点で三角分割しても、テクスチャマッピングがずれる…なんてことはありませんでした/今のところは。でも多角形の分割はあまり利口ではなかったので、複雑な形状は、モデリングの時点である程度分割しておくべきかも。まあ当然ですかね。
*綺麗な分割でないと、Papervision3Dでポリゴン欠けやテクスチャ歪みが起こりやすいです。

これで、COLLADA形式のモデルデータが出力されます。
COLLADAはXMLで記述されたテキストファイルで、Google Earthなんかでも利用されています。拡張子は「.dae」。

さて、このまま利用してもとりあえずPapervision3Dでは使えますが、私の場合ではテクスチャ画像の参照を絶対パスで行っていたので修正しておきました。
DAEファイルをテキストエディタで開き、該当箇所を相対パスに変えておきます。

<init_from>f:\works\flashdevelop\pv3d\3dmodel_01\model\t_box.jpg</init_from>  (修正前)
<init_from>t_box.jpg</init_from>  (修正後)

(追記)
どうやらBlenderのエクスポートオプションで、「Use Relative Paths」をチェックすれば相対パスになるようです。

Papervision3DでCOLLADA表示

Papervision3Dでは、COLLADAを使用するためのクラスとして、

  • org.papervision3d.objects.parsers.Collada;
  • org.papervision3d.objects.parsers.DAE;

の2つがあります。
両者の違いは、ロードするときの書式だとか、拡張されたCOLLADA形式への対応状況だとか、オブジェクトのデフォルトサイズとかいったところ。note.xさんの記事にちょくちょくヒントが出ています。
使い方は、まずSWFが書き出されるディレクトリを基準に、COLLADAファイルとテクスチャ画像を移動。そしてスクリプトはこのような感じに。Colladaだと、

//クラスをインポート
import org.papervision3d.objects.parsers.Collada;
//宣言
private var colladaObj:Collada;
//定義して読み込む
colladaObj = new Collada("XXX.dae");
//Scene へ addChild
scene.addChild(colladaObj);

DAEだと、

//クラスをインポート
import org.papervision3d.objects.parsers.DAE;
//宣言
private var colladaObj:DAE;
//定義して読み込む
colladaObj = new DAE();
colladaObj.load("XXX.dae");
//Scene へ addChild
scene.addChild(colladaObj);

基本的な操作は、スクリプトで生成したPlaneとかと同様です。
なお私のモデルでは、同じファイルを扱ってもDAEの方がかなり小さく表示されてしまいました。そこで .scale を 100 に指定してやるとだいたい同じくらいのスケールに。

さてさて、これらをもとにサンプルを作ってみました。
*ソースファイル Main.as の全文はこちらから参照できます。

collada01

7 月 12 2008

Blenderのセットアップ

Posted by tanjo at 10:32 PM

Blender UI

Papervision3Dでは、COLLADA形式の3Dモデルデータを読み込み、Flash上で利用することができます。私は普段、3DモデリングにはLightwaveを使っているんですが、LightwaveではCOLLADA出力ができないみたいです。
そこで、COLLADA形式にも標準対応しているオープンソースの3Dソフト、Blenderを使ってみることにしました。…とは言っても、あくまでエクスポート専用として。
blender.org

入出力など、Blenderの一部機能はPythonで動作します。Python標準リリースも一緒にインストールしました。
Python Japan User’s Group

なお、BlenderとPythonがお互い対応したバージョンでないと不具合が出るとのことですが、どちらも最新版のblender 2.46/Python 2.5.2なら問題ないようです。正しくインストールされた状態でBlenderを起動すると、起動時のコンソールで「Checking for installed Python… got it!」とか表示されます。

Blenderの基本的な使い方については、以下のサイトに詳しく解説されています。
チュートリアル(本当に初めての方のために作成したBlenderチュートリアル) - WBS+(Web/Blender Studio+)