2007.11 Monthly archives

[Papervision3D]ボーンアニメーション模索中

2007.11.28

モデルのモーション制御の方法を模索してみる。
以前に試したMD2インポーターは、なかなか使えそうだったけど、肝心のMD2ファイルをOSX環境のみで作る手だてがどうにも見つからないので、とりあえず他の方法を探してみることに。(Win環境ならイイ感じかと)

ASColladaがボーンアニメーション付きColladaに対応してるので、Blenderでモーション付きのColladaファイルを出力してみた。…んだけど、BlenderのCollada Plug-inは、どーにもまともなデータを吐いてないっぽい。Collada 1.4.0 Plug-in for Blenderの公式サイトに上がってるファイルはBlender2.45に収録されているものと同じなので、sourceforgeのリポジトリから最新版を拝借して入れ替えてみたけど、やっぱりウェイト付けとか反映されないし、なんか変だ。

ネタがネタだけに情報源が少ない中、kumaryu日記さんが、0.3.146用のパッチを公開してくださっていたので、これを参考にして、0.3.159のtranslator.pyに手を入れてみた。で、驚いた。kumaryu日記さんによると、このパッチを2007/02/09付けでillusoftに送ったそうなんだけど、全然反映されてなかった。なんか開発が頓挫してそうな空気感が漂っておりますな。

手作業で該当箇所を適時修正して出来上がったツギハギColladaエクスポーターで吐き出したdaeファイルをASColladaで読み込んだ結果が以下。

bone_anim.swf(要:FlashPlayer9)

kumaryu日記さんのパッチのおかげでウェイト付けはちゃんと反映された。
けど、

objDAE = new DAE(hoge.dae);
objDAE.y = 100;

なんて感じで読み込んだオブジェクトを移動するとおかしなことに。なんかボーンが移動してないみたいで、ボーンを組み込んだオブジェクトだけ初期位置から動かない。あと、キーフレーム間の補完もされてない感じ。これじゃ使えないよー。

3dsMAXから書き出した場合は上手くいくみたいなので、恐らくCollada 1.4.0 Plug-in for Blenderがダメダメなんだろうけど…こんなことのためだけに3dsMAXなんか買えないし、他の方法を探そう。

[Papervision3D] 原点にカメラがあるとフリーズする件

2007.11.13

Qreatureさんが指摘してくださった、「原点にカメラがあるとフリーズする」件を、改めて調べてみた。

Papervision3Dメモ #27のデモを対象に、MacOSX(PowerPC)10.4.10、FireFox2.0.0.9の環境で、FlashPlayer9のいくつかのリビジョンについて検証。結果は以下のようになった。

9.0 r16 問題なさそう
9.0 r28 しばらく放置するとフリーズ
9.0 r45 いきなりフリーズ
9.0 r47 問題なさそう

9.0 r28、r45に関して明らかにフリーズすることが確認できた。特にOSX版のr45に関してはswfを読み込んだ瞬間に固まる。なんというブラクラ。Win環境は調べてないけどたぶん同じような感じかと。

暫定的な解決方法としては、Qreatureさんのおっしゃる通り「とにかく原点(x:0,y:0,z:0)にカメラを置かない」ってのが一番簡単かつ確実っぽい。原点にさえカメラを置かなければいいので、(x:0,y:0,z:1)とか、任意の一軸だけでもずらしておくと上記の問題は起こらない。
24時間耐久テストとかやったらどうなるかわかんないけど、とりあえず15〜20分くらい放置してても問題なかった。

07/11/14追記
Qreatureさんにコメント欄で指摘していただいた仮説に基づき、Camera3Dではなく、FreeCamera3Dを使うことで解決するという手もある事が判った。こっちのほうが考え方としてもスッキリするかな。Qreatureさん感謝です!

ということで、Papervision3Dメモ #27のデモとソースを修正した。9.0 r28、r45をお使いのみなさまにはご迷惑をおかけしました。
それにしてもコレ、ほんとにFlashPlayer側の問題として片づけちゃっていいのか超不安。

[PV3D][Blender]レンダーベイキングでラジオシティもどき

2007.11.08

bake_texture.swf(要:FlashPlayer9)

オレの環境だと△1000あたりが限界ということがわかったので、なるべく少ないポリゴン数で情報量を上げる手段を模索してみる。高品位なレンダリング結果をテクスチャにするっていうMayaか何かのチュートリアルがPV3D向けに公開されてたのを思い出したんで、Blenderでも同じような事ができないかどうかやってみた。使ったBlenderのバージョンは2.45。

■ザックリすぎるメモ

  1. とりあえずモデリング。ローポリで十分。
  2. UVマップを作る。UV/Image Editorは後でも使うのでそのまま表示しておく。
  3. ラジオシティの光源用オブジェクトを作る。法線の向きに注意。光源用オブジェクトのマテリアル設定 – Shadersパネルの「Emit」を「0」以外の数値にして、光源として定義する。
  4. 表示モデルと光源用オブジェクトを選択して、Radiosityパネルの「CollectMeshes」をクリック、Caluculationパネルが表示されるので、「GO」をクリックして計算開始。しばし待つ。計算が終わったら「FaceFilter」「ElementFilter」などで微調整。
  5. RadioToolパネルの「Add new Meshes」を押してメッシュ分割・頂点カラー焼き付け済みのオブジェクトを新規追加(この時、元のオブジェクトとは別のレイヤー選んでおく)
  6. 「Free Radio Data」を押して通常モードに戻る。
  7. Radiosityパネル使って出来上がったオブジェクトを選んで「UV Face Select」モードに切り替え。全Faceを選択。最初に作ったUVマップが継承されてるので、UV/Image EditorのImageメニューから「New」を選んで空ビットマップを作成。
  8. SceneのBakeパネルで「Bake」を押すとUV/Image Editor上にレンダリングされる。
  9. でき上がったテクスチャを保存、実際に使うローポリオブジェクトに適用しておしまい。

■参考情報
JBDP – モデリングツールとしてのラジオシティ
Blenderで3DCG制作日記 操作メモ – レンダーベイキング
python, mesh 3d coordinates to uv, texture baker

これイイかも。
ヘタにマシンパワー食う処理とか使わなくても十分見てられるし、フォトリアル系に傾倒してるわけじゃないけど、一手間かけるだけで随分と質感が変わるのがステキ。