フルバージョン表示 : PaperVision3D
257
Flashのアンオフィシャルパッケージ、「PaperVision3D」。
pictaps (http://roxik.com/pictaps/)で驚いてちょっとしてから知ったんだけど、
Flashで3Dオブジェクトを扱えるようになるというすごいパッケージ。UVマップを実装してるあたりがすごいなと。
オフィシャルサイト (http://papervision3d.org/)(デモ?)
オフィシャルブログ (http://blog.papervision3d.org/)
オフィシャルWiki (http://wiki.papervision3d.org/)
他の3Dエンジンとして
Away3D (http://away.kiev.ua/away3d/)
FIVe3D (http://five3d.mathieu-badimon.com/)
等があるみたい。away3DはPaperVision3Dがベースになっているようで、近々統合の動きがある。
このPaperVision3D、派生したパッケージもすごくて、MD2(モーションデータ)を読み込むものまであるらしい。
で、試してみた。まずはごく簡単にチュートリアルを読みながら…
'files/papervision_test.swf','flashcontent','400','400','9.0.0'
なんか適当感たっぷりだけどかんべんして。
(要FlashPlayer9Higher。Flashが表示されない場合はJavaScriptの確認、リロード)
まず使用できるファイル形式なんだけど、「Collada(拡張子.dae)」という形式。内容はアスキータイプのXML。
このColladaファイル、俺が持っているアプリではきちんと書き出せなかった、というと語弊があるけど、いろいろなアプリ、プラグインで試したが様々な書き出し方をする。
最後の頼み、とBlender (http://www.blender.org/)で書き出したらOKだった。
結局、Blender以外は、頂点情報はいいんだけどメッシュの情報がまずかったらしい。
流れは「modo」でobj書き出し、Blenderで読み込み、Collada形式で書き出し。
ちなみにMayaやMAXは大丈夫みたいよ。
オブジェクトとかマテリアルの概念がまだわからないので、1オブジェクト、1マテリアル。
modoでUVマップは作成してイメージファイルを割り当てておいた。
注意点としては3角ポリゴンのみで構成されていること。
つづく。
つづき。
次にActionScriptを書いていくわけだけど、まだCS3をゲットしてないのでActionScript3環境が無い。ので、フリーのFlash開発環境FlashDevelop3 (http://www.flashdevelop.org/community/)とFlex2SDK (http://www.adobe.com/jp/products/flex/)で行うことに。
ActionScript2だと制限やパフォーマンスの低下がある。
で、FlashDevelopで以下のようなコードを書く
package {
import flash.display.Bitmap;
import flash.display.Sprite;
import flash.events.Event;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.materials.BitmapMaterial;
import org.papervision3d.materials.MaterialsList;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.objects.Collada;
[SWF(width='400',height='400',backgroundColor="#000000", frameRate="60")]
/**
* Papervision3dTutorial2.as
* 13.Sep.2007
* @author vim - http://www.corenodes.net/
*/
public class Papervision3DTutorial2 extends Sprite
{
[Embed(source="files/cat_face.png")] private var File:Class;
[Embed(source="cat_head.dae", mimeType="application/octet-stream")] private var MyCollada:Class;
private var myMaterials:Object;
private var container:Sprite;
private var scene:Scene3D;
private var camera:Camera3D;
private var rootNode:DisplayObject3D;
private var myObj:DisplayObject3D;
/**
* コンストラクタ
* @return
*/
public function Papervision3DTutorial2()
{
var Mesh1Material:Bitmap = new File() as Bitmap;
// マテリアル
myMaterials = {
Mesh1Material: new BitmapMaterial( Mesh1Material.bitmapData )
};
// 初期設定
init3D();
// エンターフレーム
addEventListener(Event.ENTER_FRAME, loop3D);
}
/**
* シーン作成
*/
private function init3D():void {
container = new Sprite();
addChild( container );
container.x = 200;
container.y = 200;
scene = new Scene3D( container );
// カメラ作成
camera = new Camera3D();
camera.x = 3000;
camera.z = -300;
camera.zoom = 1500;
camera.focus = 10;
// Colladaファイル読み込み
rootNode = scene.addChild( new DisplayObject3D("rootNode") );
myObj = new Collada( XML( new MyCollada() ), new MaterialsList( myMaterials ) );
rootNode.addChild( myObj );
}
/**
* エンターフレーム
* @param event
*/
private function loop3D( event:Event ):void {
myObj.rotationY += container.mouseX / 50 * -1;
myObj.rotationZ += container.mouseY / 50 * -1;
scene.renderCamera( camera );
}
}
}
詳しい説明は省くけど、FlashやPaperVisionのパッケージをインポートした後、
テクスチャやColladaファイルの埋め込み、
マテリアル作成、
カメラ、シーン作成、オブジェクト作成、
あとはフレームごとにマウスイベントに応じてローテート、シーン表示、となっている。
つづく。
コードではテクスチャの画像やColladaファイルは埋め込んでることになってるんだけど、表示する際はなぜか別途テクスチャ画像も必要みたいだ。Colladaファイルにイメージファイルの割り当てが書いており、そこから読み込もうとしてしまう。この辺は調査が必要だなあ。
このフォーラムはアップロードファイルでさえDBに収まってるので、しょうがなく管理者権限でファイルごとアップロード(すんません)。
ローカルで試したい方はSWFをダウンロードしたら同階層に「files」というフォルダ作って、コレ (http://www.corenodes.net/files/cat_face.png)をダウンロードし入れてください。Flashのサンドボックスのセキュリティにも気をつけてね。
…ここまで書いといて激しく解りづらいのに気づいた。
そのうち詳細な記事書きます。(って需要あんのか)
すごい先人達が日本人でもいらっしゃるので、ググればなんとかなるかもしれない…
ちなみに、PaperVision3Dはすごい頻度でアップデートされており、パッケージはSubVersion使って最新のものを使うのが吉。
本気で使う方は機能追いかけるためSubVersionで常に最新のパッケージをエクスポートしたほうがいいかもしれない。
ふと思ったんだけど、PaperVision3D使えばブラウザ上で動作するモデラーとか作れそうですね。
いや、俺はやらないけどw
調べてないけどすでにあったりして。
そこまでやらなくてもColladaファイルとテクスチャ突っ込めばすぐWEB3Dです!
っていうWEBツールが簡単にできそうな予感。
現状のPaperVision3Dはライトが無かったり(たぶん)、SDVはもちろんサーフェスをスムーズ表示すらできないのでキビシイかな?
ローポリアニメ風キャラならかえって都合がよさそうだけれど。
vBulletin® v3.8.4, Copyright ©2000-2012, Jelsoft Enterprises Ltd.