2017年05月24日

やめるのやめました

2週間ほどプログラミングから離れて遊んでましたが、ぼちぼち作業を再開しています。
前回は独自フォーマットの実装が上手くいかず諦めましたが、5000行のコードを捨てることはやっぱりできなかったので開発を再開することにしました。ただ、前回のデータはいろいろ大変過ぎたので、今回からは仕様をイージーモードに変更しています。

前回テストしたときの独自フォーマットのデータ仕様は、daeやglTFに似たデータを採用していましたが、このデータだとデバッグがかなり大変だったので、データの仕様を変更した上で、C++のインポータで行っている処理の一部をBlenderエクスポータに移すことにしました。これにより作業の多くをBlenderで行えるようになり、デバッグがしやすくなりました。

Blenderのエクスポータでデータをデバッグするメリットは、スクリプトなので起動が高速というのが一番大きいです。他はデータ変換処理の一部をBlenderに用意されている実装に置き換えることで、自作コードをデバッグ対象から除外できることで作業が少し楽になります。
デメリットとしては、ファイルサイズや読み書き時間の増加、データの抽象度の低下等ありますが、まあデメリットを考えてもしょうがないですね。とにかくまずは、100%正しいことが保証されたデータを作ることが先決です。データがないと本当に何もできなくて困るので、多少のことは目を瞑ってとにかくデータの完成を目指したいです。


今回は以上です。あまり作業してないので書くことなかったです。GWからゲームで遊んでて2週間何もしてなくて、その後も風邪で寝込んだりしてたので作業再開したのはつい数日前のことで、まだいろいろと鈍ってる感じです。まぁいい息抜きになったので、これでまたフォーマット開発を頑張れそうです。


posted by gency at 01:44| Comment(0) | 3DProgramming

2017年04月17日

独自フォーマットは無理でした

独自フォーマットを作っていましたが、1ヶ月以上作業してもメッシュひとつ描画できなかったため、久しぶりに心が折れてしまいました。
Blenderからデータを取得してバイナリに書き出すまでは順調に思えたのですが、そのデータを使ってモデルを描画してみたところ、頂点インデックスがズレたような描画結果になっていて、その原因の特定ができずに作業が長期に渡って停滞しまい、モチベが尽きてしまいました。
書き出したデータが間違っていたのか、インポータでやらかしたのか、はたまたエンジンの不具合なのか、原因は結局分からずじまいですが、まあ、この問題が解決したとしても、この先に発生するであろう全ての不具合でこの3つの全てを疑いながら作業するのは重労働過ぎると思ったので、原因を解決する気力も起こらず諦めてしまいました。。

まぁ残念というか悔しい結果に終わってしまいましたが、モデルのエクスポートから描画までを通して作成したことはかなり勉強になったかと思います。今までAssimpに頼りきっていた部分をかなりクリアにできたことは今回の収穫といえると思います。とでも言わないとやってられない気分です(爆
まぁ勉強になったのは事実で、モデルデータ周りのことは本当に知らないことが多かったです。特にVBO対応の頂点属性データを作るのがこれほど難しいことだとは知りませんでした。個人的にはアニメーションよりはるかに難しく思いました。いい勉強になりました。
気力が回復して次にまた独自フォーマットに挑むことがあるなら、そのときは結果が出せそうな気がします。とでも言わないとやってr(ry


というわけで、今回は進捗が全くありませんでした。この1ヶ月で書いたコードは3000行くらいありましたが、すでに全て退場しています。Blenderのエクスポータは1500行の本編と__init__.pyというけっこう本格的なスクリプトを書きましたが、まぁこれはいつか掘り返して使うかもしれないのです。貴重なBlenderPythonの資産として今後に活かせそうな気がします。

ちなみに、独自フォーマットを作ろうとした理由ですが、Assimpがサポートしていない物理剛体やIKなどのデータを調達するためでした。ついでにAssimpも卒業したかったのですが、うん、甘かった。
足りないデータの調達は、それ専用のエクスポータを作成するつもりです。
最初からこうしとけばよかったかも。

今回はこんな感じです。
では。
posted by gency at 03:45| Comment(0) | 3DProgramming

2017年03月01日

進捗Friends

スケルトンの可視化をこれまでのジョイントのみの表示からボーン表示にしてみました。デュアルクォータニオンスキニングのテスト中に、ジョイントだけだと見づらかったので作ったものですが、その後少し改良してボーン選択機能なども追加しています。
描画はGL_POINTSとGL_LINESだけという雑な作りながら、割りとボーンらしくなっているのではと思います。まぁ、私はBlenderではいつもStickかWireでボーンを表示するので、違和感を感じないだけかもですが。というか、あの槍の先みたいなやつは見た目は良いけど作業してるときは邪魔でしかないんだよぉ(愚痴

skeleton1.jpg

ボーンは選択するだけでなく動かすこともできますので、FKのみですがポージングも可能です(ポーズ保存機能はなし)
また、アニメーション中にボーンを選択すると、そのボーンのみ編集モードに移行し、ユーザーが自由に動かせる状態になります。右腕ボーンだけに独自の変形をセットし、他のボーンはキーフレームアニメーションを再生するということもできます。さらに編集モードの状態で物理剛体をバインドすればラグドールや揺れ物を実装することも可能です。もちろん同じ要領でIKも実装できます。この辺はこれから実装する予定ですが、その前に山積みのタスクをやっつけねばです(´・ω・`)

全体図。

skeleton2.jpg

個々のWidgetは使えるレベルに仕上がっていますが、GUIコンテキストの制御でまだ設計がふわふわしているところがあるため、GUIのシステムとしては実用レベルに達していない感じです。あっ、日本語入力のバグも健在でしたね。あれを直すのはいつになるのか。というか私にあれが直せるのか(マジキ千コード

画像の左に見えるのは、見ての通りですがカラーピッカーです。Blenderのカラーピッカーを参考に作りまして、動作も殆ど同じにしています。操作レスポンスはBlenderよりも格段に良く何気に自信作だったりします。RGBにはまだ対応していませんが、勿論対応はするつもりです。というかHSV→RGBの変換コードはすでに書いてて、円の右下にある矩形内に選択中の色が表示されていますが、これはRGBに変換した値をシェーダーに渡して描画しています。なので後はGUIにRGBとして扱う仕組みを作るだけで対応はできるのですが、UIレイアウト的な部分でけっこう考えてしまって作業が止まってる感じです。デザイン的な作業はどうにも苦手が克服できないですね。。まぁ興味がないからなんだろうけど(直球


今回は以上です。
では。
posted by gency at 00:40| Comment(0) | 3DProgramming