2016年08月25日

摩耶さんをお迎えする準備

自作エンジンに、拙作の摩耶モデルをお迎えするため、あれやこれやしてました。
今回は難しい話は無しにして、昨日1日かけてリファインした摩耶さんを紹介します。

maya_engine1.jpg

maya_engine2.jpg

いつ以来かも分かりませんけど、まあ懐かしいです。
ファイルを開いてみたとき、やたらデータがごちゃごちゃしててビビりました。
マテリアルとテクスチャの関連付けは無駄に複雑で、中にはリンク切れてるの放置してるのもありました。
また、AppendやLinkを繰り返した後の残骸と思われるゴミデータが山のようにありました(10や20ではない)
何かもう廃墟の様でしたね。
うう・・すまぬ、すまぬ。
というわけでまずはその辺りの整理をしました。

造形の修正もちょっとだけしました。
後髪(後頭部)に空間があったのでそこを埋めたり、肩、腋、大腿部を今風に修正をしたり、目頭付近にまつ毛を追加したり。
あと、リップのテクスチャをふっくらとした唇に見えるようハイライトを書き足したりしています。
これ最近のマイブームですね。
あと、鼻の穴を描くのもマイブームですけど、さすがに自重しました。

摩耶モデルのスペックは、SSの上の方にもある通り、頂点数5万、三角ポリ数11万です。
リグも一応組んでいます。
アニメーションまでは作ってないですけど、今回はそういう目的じゃないので不要です。
マテリアルとテクスチャの構成が複雑なモデルを、簡単に読み込めるようにするのが今回の目的なのです。

現在のエンジンの仕様では、テクスチャのパスは手動で通す必要があったり、マテリアルはエンジン側で再構築したりしてます。
なので、マテリアルが10コとかあるようなモデルを読み込むのが凄く手間なんですね。
この手間を可能な限り自動化したいわけです。
少なくともマテリアルとテクスチャの関連付けくらいは自動化したいです。
まあ、それは裏でこっそり作業しておきます。
今回はリファインした摩耶さんを紹介したかっただけ。

以上です!さようなり!
posted by gency at 17:08| Comment(0) | モデリング

2016年08月13日

3Dピッキング

今回のテーマは3Dピッキング。
3D空間のモデルにお触りするための機能を2つ実装しました。

picking01.gif

こちらは、Raycastのテストの様子。
マウス位置を三次元座標に変換して、ワールドの原点とマウスカーソルを結ぶラインを描画しています。
ピッキング(選択)処理はまだ実装していませんが、必要な機能は実装済みで、その肝になる機能が動画でやっているRaycastです。
このRaycastを使ってRaytestすることで、モデルにお触りできるようになります。

Raytestというのは光線と領域の交差判定を行って、当たっているか否かをテストすることです。
私はこれをBulletのRaycastを使って行っています。
BulletのRaycastは、Raytestの結果をClosestRayResultCallbackとか、AllHitsRayResultCallbackといった構造体に返してくるので、これを使ってオブジェクトを特定することになります。
その辺の処理は割と簡単、なはずなのですが、現在、RaycastのCallbackが返すbtCollisionObjectのポインタが0しか返さないトラブルでハマっていて、オブジェクトの特定ができていません。
PositionとNormalは、それらしい値が返ってきているので、衝突の検出はできているようですが。
なんだろうね。。
位置が分かればそこから無理やりオブジェクトを特定する処理も書けますが、RayCallbackが0以外を返してくれるのが大団円、無駄な処理は書きたくないところ。。。
案外、Bulletのバグだったり・・・は、しないだろうな。


picking02.gif

こちらは、3D空間のモデルをテクスチャを使って選択する処理、を視覚化したものです。
こちらのチュートリアルを参考に実装しました。
本来の実装では、白黒の絵を画面に表示する必要はありませんが、分かりやすくするために表示を切り替えています。

ときどき表示される白黒の絵が、IDを色に変換したものをレンダリングした絵です。
黒い部分がモデルのIDから変換された色で、この部分をクリックしたときにクリック位置の色を拾って元のIDに復元することでモデルを特定できます。
モデル以外にも、レンダリングできるものなら何でも選択対象にすることが可能です。

こちらは選択処理まで実装が完了していまして、あとは選択されたときの演出を載せるだけとなっております。
ちなみに、この実装はエディタでのオブジェクト選択処理で使うために作りました。
ゲーム用の選択処理には、前述のBulletを使う予定です。
ゲーム用としては他にもOBBとの交差判定を自作する道も検討していますが、Bulletだけで行ける気はしています。
まあ、トラブル解決が先ですけど。
Raycastのトラブルが解消できたら、まずはうちのウラ様を掴んで持ち上げる処理を実装したいです。
専用のアニメーションも作ったので、早く組み合わせて見てみたいんだ(*´ェ`*)


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