Posts Tagged papervision3d1.x

[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

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

[Papervision3D]ねぎ振り完了

2007.10.30

前々回前回と続いたこのネタも、ようやくネギ振り実装完了(まだやってた)

ねぎミクPV3D改善版ねぎ振り付き(要:FlashPlayer9)
※クリックで振る

腕とネギだけが動けばいいので、特に難しく考えず腕とネギをペアレントした上で、それぞれ rotationX で動かした。Away3DのCORRECT_Z_ORDERレンダラ版は重すぎて、ねぎ振りは断念。

コレを全力で動かすとしたらMD2フォーマットのスキンメッシュ使うのが現実的なのかなぁ。ボーン制御だとメッシュのメリ込み回避とか面倒くさそう。

(続きを読む…)

[PV3D][Away3D] ねぎミク再トライ

2007.10.28

e_negimiku2.jpg

前回の続き。
元データのままじゃ重いので、mqoインポーター使ってBlenderに読み込んで再編集した。
元データはエッジ表示用のポリゴンが貼られてたんだけど、多少のディテール低下はやむを得ないのでこれを丸ごと削除、さらに目立たない部分をチマチマ削除したりして何とか△987まで減らした。フォルムを殺さずにローポリ化するってのはそれだけでかなりの職人芸だわ。上手い人はもっと少ないポリゴン数で作れるんだろうな。
ローポリ化した後、PV3Dで簡易的にZ-Sortの弱点をカバーするdisplayObject3Dの「meshSort」プロパティを使う為に「髪の毛と上半身」「顔と下半身」を別のノードに分けてCollada出力した。結果は以下。

ねぎミクPV3D改善版(要:FlashPlayer9)

前回と比べてパフォーマンスもちょっと向上、さらに髪の毛のポリゴン欠けはかなり軽減した。meshSortプロパティは、わりと使いどころが難しいけど丁寧にやればもう少しポリゴン欠けを押さえられそうだ。

ポリゴン数を半分以下に減らしたんで、Away3Dでもなんとか動くようになった。
ねぎミクAway3D改善版(要:FlashPlayer9)

とはいえ重いのは変わりない。CORRECT_Z_ORDERレンダラは強力だけど、相当ポリゴン数が少なくないとダメか。Away3DにはmeshSortが無いので、パフォーマンスと品質を両立させた上でこの手のキャラクタを動かしたい場合、モデリングの時点である程度工夫が必要と。PV3DはmeshSortを上手く使うことを心がけるのがコツっぽいな。