2011年10月30日日曜日

GTAViewerでアニメーション付きColladaフォーマット出力テストプログラミング

BlenderのVMDインポーターが思ったほどうまくいかないので息抜きにやってみました。アニメーション以外の出力は既に出来てるのでアニメーション部分だけ以前作った『PMDForCollada』のものを流用して組んでみました。

結果はこのようになりました。Papervision3Dで表示しました。
Papervision3Dでアニメーション其の3・4

回転で一部おかしなところがあります。アニメーションを付属してないデータは正常に描画されるので、キーフレーム変換行列の回転部分におかしなところがあるようです。

MMD→DAE変換を試したところうまくいきました。何でGTAだと失敗するんでしょうね?

まぁ、Blenderのスクリプトも含めぼちぼちとやっていこうと思います。

2011年10月27日木曜日

Blender2.6用VMDインポーター作成中・・・

ひと通り形になったので記事にしてみました。

Blender2.5版は作らない予定です。というのも、2.6からBlenderの日本語化が出来るようになり、いま組んでるスクリプトは日本語化していることが前提となるからです。

調べてみましたが 、公式で日本語化に対応したのはBlender2.6RCからみたいです。

今の方法だと2.5では導入できないので、おかしな動作が起きてもそれがスクリプトのバグなのかBlender2.6の不具合なのかがわからないのがネックです。

何故ネックなのかというと、以下のような現象が起こったからです。実際に見てもらいたいと思います。

まずはZ軸回転モーションをMMDとBlender2.6で読み込み比較したものです。

次にX軸回転モーションをMMDとBlender2.6で読み込み比較したものです。

膝がおかしいのはIKの使用の違いからくるものなので気にしないで下さい。それ以外はX・Z軸回転はMMDと同じ動作をしています。ところがY軸回転だとこのようになってしまいます。

何故このようになるのかがよくわかりません。Blender側で同じような回転を手動で行って回転角度を出力したところ、Y軸の角度は対して変わっておらずX軸の角度が大きく変貌してました。

X軸角度とY軸角度を入れ替えると、MMDと同じように回転するモーションもあればそうでないモーションもありチンプンカンプンです。

クォータニオン回転・オイラー角回転の両方で試してみましたが結果は同じでした。

これはBlender2.6の不具合なんでしょうか?それとも只私が 仕様を誤認識して起きたスクリプトの不具合なのでしょうか?よくわからないです。

2.5版でも導入できたら確認しやすかったんですけどね・・・まぁこのスクリプトは元々作る予定のなかった、オマケみたいなようなものなのでゆっくりと作っていくつもりです。

もう一度既存のスクリプトやドキュメントに目を通してみようかな?

2011年10月25日火曜日

Blender2.54~2.60対応PMDインポーター更新&リリース②

少々早すぎますが、一応日付は変わったので更新しちゃいました。
昨日言っていた通り、膝ボーンの回転制限及びボーンの移動・拡大のロック処理をBlender2.54~2.60のスクリプト全てに追加しました。

Blender2.49のスクリプトもIKの再帰回数・ウェイトを新たに反映させて更新しました。コチラは膝ボーンの処理・ロックの処理は追加してません(やり方がわからん・・・)。

※注意
今回から膝ボーンの処理を追加したため、スクリプト内で"ひざ"という文字列をutf-8形式で記入してます。万が一ですが、この文字列のせいでスクリプトが認識されない場合があるかもしれません。もしそうなった場合はスクリプトファイルを「utf-8」の文字コードで上書き保存するか、もしくは"ひざ"と書かれてある部分を「utf-8」に文字コード変換して上書き保存してください。

utf-8文字コードで開いた場合、このようになります。

s-jis文字コードで開いた場合、このようになります。

追記
VMDインポーター作成中!

2011年10月24日月曜日

Blender2.54~2.60対応PMDインポーター更新&リリース①

MikuMikuDanceのモデルフォーマットであるPMDファイルをBlender2.60で読み込むスクリプトをリリースしました。

今回の更新でようやくボーンウェイトを反映した状態で読み込めるようになりました。穏当に長くなってしまいましたが、ようやく実装することが出来ました。

また、今回の更新にあわせて前バージョンのBlender2.5(2.54~2.59まで)のPMDインポーターを全て更新しました。全てのバージョンでボーンウェイトを適用状態で読み込めるようになりました。

Blender2.49用PMDインポーターも元々ボーンウェイト反映は出来てましたが、ボーンが見づらいので若干の修正をしてます。

ブログを初め、このスクリプトを開発してからもうすぐ1年、ようやく完成させることが出来ました。長々と引っ張ってしまい真に申し訳ありませんでした。

スクリプトの詳細はZE10の開発倉庫から、ダウンロードは開発作品倉庫(SkyDrive)からお願いします。

追記
平行移動のロック、膝ボーンの回転角度制限を入れておくのを忘れてました。
修正できたのでまた明日更新しようと思います。

2011年10月23日日曜日

Blender2.60対応メタセコイアインポーター/エクスポーターリリース

先日Blender2.60が正式にリリースされました。なんでも最新安定板とのこと。
ということで、早速メタセコイア入出力スクリプトを2.60版に更新しました。

なお、この最新版は2.59版でも使うことは出来ますが、2.59版メタセコイア入出力スクリプトは2.60へそのまま移植しても動作しないので必ず更新するようお願いします。

Windows XPでしか動作確認をしてませんが、基本的に以前のものと変わってないのでMacOS、Linuxでも動作可能です。本当はUbuntuで動作確認したかったんですが、11.10に更新したら動かなくなっちゃいました。

※注意点
機能は前バージョンと変わっていませんが、一つだけ修正点があります。
以下の画像を御覧下さい。

前バージョンまでと同じやり方で読み込んだ結果です。よくわかりませんが、今回のBlenderではライティングが暗くなるようです。これは私のスクリプトだけでなくほかのインポーターにも同様の現象が見られます。前回までがライティングが正しく作動してなかったのでしょうか?詳しいことは良くわかりません。

とりあえず前作と同じような描画結果にすべく、今回からシェードを切る処理を追加しました。

Materialクラスのuse_shaderess(赤丸で囲った部分)にチェックを入れるようにしてます。これで前回までの描画結果と同じようになります。ライティングをかけた状態にしたい場合はここのチェックを切るようにお願いします。

pmdインポーターは前回から余り進歩してません。どうしても頂点ウェイトグループの設定がうまくいかないんです・・・これさえ終われば完成なんですけどね。中途半端でもいいという方がいればアップロードするのでおっしゃって下さい。今の状態でも形状とボーンの読み込みは出来るので、読み込んだ後に手動で頂点グループ設定さえすれば使えるかと思います。

Blender2.60の記事はココから
Blender2.60のダウンロードはココから
スクリプトの詳細説明はココから
スクリプトのダウンロードはココから

2011年10月21日金曜日

ブログタイトル変更しました

ブログの名前を「開発白書(ダイアリー)」から「研究記録(レコーダー)」に改めました。今回で2度目のタイトル変更となります。

元々「開発日誌(ダイアリー)」という名前でしたが他のブログと被ってたため変更しました。現在の更新状況を考えると「日誌」には程ほど遠いので結果的によかったと思ってます。

まぁ今回タイトル名変えたのも特に深い理由はありません。単純に私が「白書」というものを理解しておらず、「ダイアリー」では意味が通らないだろうと今頃になって考えた結果こうなりました。

というわけで、今回から『とあるPGの研究記録(レコーダー)』として運営していくのでよろしくお願いします。

追記
Blender2.60がリリースされたようです。これにあわせてスクリプトも更新しておこうと思います。

GTAViewer Xファイルの読み書き修正

結構前になりますが、「GTAViewerでXファイル出力」の続編です。
開発始めてもう4ヶ月経ってますね・・・月日の流れは早いもんだ。

イキナリですが、GTAViewerはDFFフォーマット以外のデータも読み書きが出来ます。全てライブラリ等を使わず自前で読み書きしてるわけですが、このXファイル読み込み(書き込みは自前)だけは内部でインポート用スクリプトを起動させて読み込んでます。

まぁ言ってもこのスクリプトも自作です。
XNAでXファイルを読み込むためにはあらかじめコンテンツパイプラインを経由させる必要があるので、ビルド後だと読み込めません。プログラム起動後にコンテンツパイプラインを動かす方法もあるんですけど難しすぎたのでやめました。

スクリプトはC++とDirectXで組んでて、処理の内容は以下のような流れになっています。

実行元がスクリプトに読込先ファイルのパスを渡す

D3DXLoadMeshHierarchyFromXでスキンメッシュ付きXファイルを読み込む

メッシュ内から頂点バッファ・インデックスバッファ等の必要なデータを抽出

自作フォーマット形式で出力 出力先をスクリプト実行元に知らせる

このようになってます。本当はスクリプトを経由させず自前のインポーターを作りたかったんですが、フォーマットの自由度が高すぎるXファイルで、全てのパターンに合致するようなインポーターを作るには時間が今以上に掛かりそうだったのでこのような形式をとりました。Xファイルが廃れていく理由もこの辺にあるのではないでしょうかね?

さて、実は前回Xファイル書き込みが失敗した理由はこのスクリプトに原因がありました。DirectXでスキンアニメーションする場合、描画を効率良くする為にサブセット化という処理が施されます。主にマテリアルやメッシュオブジェクト毎にグループが作成されます。この時、ボーンもグループ内のメッシュに影響を与えているものだけがそのグループへと割り当てられます。ボーン使用制限数以上のボーンを持つモデルもこのサブセット化をすることで使用個数の制限内に抑えられるというわけです。

このサブセット化をすると、ボーンコンビネーションというデータが作られます。
typedef struct _D3DXBONECOMBINATION {
    DWORD AttribId; //属性テーブルの識別子 マテリアルの参照番号
    DWORD FaceStart; // 開始面 グループ内の最初の面の参照番号
    DWORD FaceCount; // 面の数 グループ内の面の数
    DWORD VertexStart; // 開始頂点 グループ内の最初の頂点の参照番号
    DWORD VertexCount; // 頂点の数 グループ内の頂点の数
    DWORD *BoneId; // ボーンの参照番号配列 一度に描画できるボーンを識別する値の配列
} D3DXBONECOMBINATION, *LPD3DXBONECOMBINATION;
これで分割後の頂点やボーンにアクセス出来るんですけど・・・私は何故かマテリアルはこれを使ってるのにもかかわらず、ボーンや頂点はボーンコンビネーションを無視して読み込んでました。複数個グループがあっても最初のグループのデータだけでボーンや頂点の参照先を決めるという失敗して当たり前の処理を今まで気付かず行ってました。

この部分を修正することで、Xファイルの読み書きがほぼ完成しました。ただ出力が若干安定しないようです。

以下の動画はGTAViewerでdffモデルと、dffをXファイルに変換して再度読み込んだモデルを比較したものです。正面から見て右がdffフォーマット、左がXファイルフォーマットです。

動きも合致、特におかしなところは見当たらず完璧に出力しているように見えますよね?ところがこれをC++とDirectXで読み込むとこのようになります。

一見正常に動いてるように見えますが、時たま足や腕が変な方向へ曲がるのが確認できるかと思います。特にCJの荒ぶりかたがひどいです。

最後に、XNAでコンテンツパイプラインを経由させて描画したものです。ひにけにXNAさんのアニメーションライブラリを使ってます。コチラはかなりひどいことになってます。

DirectX・XNAでなぜここまでの差が出るのかは良くわかりません。DirectX付属のソフト「DxViewer」があればよかったんですが、新しいDirectX入れたときに古いDirectX消したら一緒に消えちゃいました。そして何故か新たなDirectXにはDxViewerが付属されてない始末。

このように使用するツールやアプリケーションによって書き込んだモデルが正常な形状を維持できてない場合があります。他に確認できるツールがあればいいんですけど、複数モーション対応のXファイルインポータが付属してるツールって意外とないんですよね。

Blender→初期インポート・アドオン等なし 誰か作ってないかな?
RokDeBone2→形状のみ読み込み可能
Softimage Mod Tool→複数個のアニメーションは非対応 プラグインないのかな?
Softimage→持ってないから知らない Mod Toolと同じ?
MAYA→持ってないから知らない
3dsMax→持ってないから知らない
LightWave3D→持ってないから知らない
Metasequoia→プラグインありそうだけどライセンスがない あるとしてもKeynote?

とりあえずSoftimage Mod Toolで確認する作業になりそうです。Xファイル読み込みは完璧そうです。

読み書き機能はこのあとXファイル出力→アニメーション付きCollada出力→PMD出力→DFF出力の順でやろうかと考えてます。余裕があればtxd出力、ifp出力、vmd出力、bvh出力もやろうかと思ってます。

あと前回の記事で動画投稿をすると書きましたが 、一応Xファイル出力とアニメーション付きCollada出力が出来た辺りで紹介PVを作ろうと考えてます。が、長引きそうな場合は動画を先に作っちゃいます。

追記
出力したファイルをSoftimage Mod Toolで読み込んでみました。

DirectXの描画結果に近いものになりました。
ちなみに、Softimageで再変換したXファイルをGTAViewerで読み込むとこうなります。

これはひどい!

2011年10月11日火曜日

GTAViewer ロースペック版 Ver1.0.0.2 リリース +α

先日リリースしたGTAViewer Trial Ver1.0.0.5の主な機能を追加したロースペック版をリリースしました。

動画・連番BMP出力・画像表示の際にテクスチャがおかしくなるバグを修正してます。その他はトライアル版の更新内容と同じです。

また、トライアル版の前回のバグを修正した1.0.0.5αをリリースしてます。モーションが時間が経つごとにずれていくバグを修正してます。



ライトパネルも若干変更を加えてます。

2011年10月9日日曜日

GTAViewerトライアル版 Ver1005 リリース

1ヶ月ぶりの更新となりました。内容は以下のとおりです

・ライティング
今回からモデルフォーマットごとにライティング計算を独立させてました。現在MMDのライティングだけ独立してます。その他のフォーマットは共通の計算です。

・MMDライティング
MMD基準のライティングに修正しました。トゥーンマップ・スフィアマップに対応してます。

・モーション補間
新たにベジェ曲線補間に対応しました。が、どうやら動画・連番BMPで出力した時にタイミングがずれるようです。これは次回までに修正しておきます。修正できたので次回では直ってます。

修正前のSweetMagic


修正後のSweetMagic


・その他の機能
ファイルをドラッグ&ドロップすることで読み取れるようにしました。

前回更新予告で紹介した新機能
・動画出力の規制
・動画/連番BMP出力時のテクスチャバグ
・ライティング切り替え
・レンダリングの修正
・マテリアルパネル
・テクスチャ(ロースペック版のみ)

詳しくはGTAViewer更新予告の記事を参照してください。

今回はトライアル版のみです。ロースペック版の更新はしばしお待ち下さい。
今回は紹介用動画も投稿するのでよければソチラも御覧下さい。

最後に、更新がかなり遅くなってしまい大変申し訳ありませんでした。

2011年10月4日火曜日

GTAViewerのライティング計算について

トライアル版の計算式をMMD基準に変更してみました。

以前と比べてMMDの描画結果に近くなりました。シェーディング部分がまだ若干違うので要修正です。

ただ今度はGTA組が暗くなってしまいました。

モデルフォーマット毎にライティング計算を区別する必要がありそうです。まぁそのほうがMMDのトゥーンテクスチャやスフィアマップテクスチャも導入しやすくなるので結果オーらいです。

ちなみにGTAスキンはライティング計算をOFFにすれば以前と同じ描画結果が得られるようです。

まずはGTA(DFF)フォーマット、MMD(PMD)フォーマット、Xファイル毎にシェーディング処理を新たに追加しようと思います。前回の記事で発見したバグも修正したのでひとまずこの処理を加え次第更新しようと思います。

2011年10月3日月曜日

GTAViewer更新予告

GTAViewerのトアイアル版及びロースペック版を近々更新する予定です。本当は前日までに更新する予定だったのですが、ギリギリで新たなバグを発見してしまい更新が伸びてしまいました。

以下は更新内容です。

・動画出力の規制
出力するファイルサイズが2GB(2,147,483,648Byte)を超える場合、ファイルを分割して出力するように修正してます。以前のバージョンだとサイズオーバーした動画は再生することが出来ませんでした。

・動画/連番BMP出力時のテクスチャバグ
コメントでご報告していただいたバグです。動画や連番BMPを出力する際にモデルのテクスチャがおかしくなるというものでした。コチラも現存確認しているモデルでのみ修正しています。他のモデルでバグが再発する可能性があるので完全に修正できたわけではありません。

・ライティング切り替え
ライティング(ライトと法線の計算で掛かる陰影処理)の反映の切り替えをモデル毎にON/OFF出来るようにしました。デフォルトではライティング計算するようにしています。


・レンダリングの修正
新たに描画状態『背』を追加。背景画像のON/OFFを出来るようにしました。また、モデルでテクスチャを使ってるモデルの頂点色が無視されるバグを修正してます。


・マテリアルパネル
新たにマテリアル情報を表示するパネルを追加しました。ここで値を修正することでマテリアル値を変更できるようにさせる予定です。

・テクスチャ(ロースペック版のみ)
2の階乗のサイズでないテクスチャもモデルに反映できるようにしてみました。が、一部のモデルではうまくいかないことがあります。うまくいかない場合は素直に画像のサイズを2の階乗に修正してください。

以上です。
バグの修正自体は余り時間は掛かりそうにないですのですぐ更新できます。
あとそろそろアニメーションのベジェ曲線補間を導入しておこうと思います。