モデルデータの解凍 |
今回は尊敬するモデラーの一人であるsujikoさんのモデルデータを使わせていただきながら、 チュートリアルを進めたいと思います。ハードディスク直下に解凍します。 C:\hankosu Metasequoiaで見てみるとこんな感じです。 readmeを読むと、半コスちゃんという名前のようです。 う〜ん、スバラシイ。 今回はこのモデルデータを使用しますが、 他のモデルデータでも基本的には同じ手順となります。
さて、このモデルデータをBlenderに渡す訳ですが、 その前に不必要なオブジェクトやマテリアルを削除して整理しておきます。 |
オブジェクトとマテリアルの整理 |
全てのポリゴンを表示してみると、モデルデータ以外のポリゴンとマテリアルが結構ありますね。 これはこのモデルデータがMIKOTO用の為です。
直接レンダリングするモデル以外は必要ありませんので、 MIKOTO用のアンカーとバリアのエフェクト、 キャラクターの足元にある影用のポリゴンを削除しておきます。 すっきりしました。 両面ポリゴン(同一の頂点を共有している面)がある場合、 チラツキの原因になりますので、片面化しておきます。 これを見ると腰の部分は片面ですが、前掛けとリボンの部分は両面なのが判ります。 マテリアルの構成を見ると裏面はUVを分けているみたいですね。 こんな感じで頂点の位置を少しズラします。 擬似的な両面ポリゴンにしています。 この頭にあるリボンも両面ポリゴンを持っていますが、 接続面で選択してみると意外と複雑な状態になっていますね。 頂点が同じ位置に重なって置かれているのですが、 頂点の結合は行われていないようです。 うーん。これはどうしようかな・・・。 リボンにそこまで深い思い入れがある訳ではないので、 今回は片面ポリゴンにしておきます。 こんな感じで内側から見ると透けて見えちゃいます。 腕のフリルも擬似的な両面ポリゴン化、リボンを片面化しておきます。 脚のフリルも同じように処理します。 リボンは片面化の影響で正面から見ると透けてます。 処理が終了しました。 ワイヤーの青い部分が体。 赤い部分がリボン。 ピンクの部分が装飾の表。 緑が装飾の裏ですね。 内部的には変わりましたが、見た目はそんなに変わってないです。
さて、次はマテリアルの整理です。 少し調べると、同一のテクスチャを指定するマテリアルが複数ありましたので、 それをテクスチャ毎にまとめました。 まとめたマテリアルを、自分にとって判りやすい名前に変えます。 今回はこんな感じ。 ここから先のリアルタイムレンダリングの世界では、 日本語名のファイルを使うことは出来ないので、オブジェクト、マテリアル、 テクスチャのファイル名をそれぞれアルファベットにしておきます。 また、自分が使っているBlender2.49bは少し古くて、 一つのオブジェクトにつき16以上のマテリアルを持つことは出来ないようです。 マテリアルが多い場合は、少し面倒ですが別のオブジェクトに分けて出力する必要があります。 例として、髪オブジェクト、顔オブジェクト、体オブジェクトといった具合にです。 さて、話が長くなりましたが、 今回のモデルデータはオブジェクト、マテリアル、テクスチャ名に日本語は無く、 マテリアルの数も16以下なので、一つのオブジェクトとしてBlenderに渡してしまいましょう。 ファイル→名前を付けて保存で、obj形式で保存します。 パラメータはこんな感じです。 ちょっと不思議なのは左右を反転するにチェックが入っていますが、 このチェックを入れていないと、 Blenderからビュアーに出力した際にモデルデータが左右反転してしまいます。 オブジェクトレイヤー毎に出力をする、 しない場合は可視オブジェクトのみオプションが便利ですね。 今回はモデルデータが置かれているのと同じ場所に保存しました。 |
Blenderを使用しモデルデータをインポート/エクスポート |
Blenderを起動しファイル→インポート→Wavefront (.obj)にて、 先ほど保存したobjファイルをインポートします。パラメータは特に触りません。 Blender側に読み込まれました。 テクスチャ表示してみると、目の部分が透過されてなくてコワイ・・・。 オブジェクトを選択し、ボタンウィンドウ、編集ボタン(F9)にある、 スムーズ面ボタンを押してスムーズを、インポートしたモデルデータに適応します。 オブジェクトを選択したまま、 ファイル→エクスポート→OGRE Meshesを実行します。 後は、以前行ったボックスのエクスポートと同じですね。 エクスポートを押すと、モデルデータと関連ファイルがエクスポートされます。 |
メモ |
直接ビュアーのmediaフォルダに出力しても良さそうですが、 上書き確認されずに強制的に出力されるので、 exportフォルダに出力する一手間かけています。 気にならないなら直接エクスポートしてもOKです。 |
exportフォルダからmediaフォルダへ |
exportフォルダを見てみるとこんな感じ。 以前作ったCube.meshがありますね。 今回出力したファイルをビュアーのmediaフォルダにコピペしておきます。 mediaフォルダにはboot.luaファイルが有ります。 |
meg@polygon vieweでの表示 |
以前のボックスの表示で入れただけではダメで、 スプリクトを組む必要がありました。 19行目の local Entity = SceneMgr:createMeshEntity("man1", "Cube.mesh",1); のCube.meshをhankosu.meshに書き換えます。
local Entity = SceneMgr:createMeshEntity("man1", "hankosu.mesh",1); さて、起動してみましょう。 何も表示されていません・・・。これは以前に紹介した大きすぎる問題かと思われます。 local Entity = SceneMgr:createMeshEntity("man1", "hankosu.mesh",1); を local Entity = SceneMgr:createMeshEntity("man1", "hankosu.mesh",0.01); としておきます。 お、何か表示されました。 カメラも自由に動かしたいので、スクリプトを組みます。 14行目に CameraController = SceneMgr:createCameraController("CameraController", Camera, 1, 0.0, 0.0, 1.0, 1.0); を追加します。これで自由にカメラを動かす事が出来るようになりました。 コンソールもオフにしておきます。 24行目の SceneMgr:createConsole(Viewport) の先頭に--を追加してコメントアウトします。 --SceneMgr:createConsole(Viewport) さて、起動してみましょう。 マウスで自由に動かせるようになりました。 デフォルトでは透過の処理が行われないので、こんな感じになっちゃってますね。 これでは悲しいので、透過の処理に入ります。 |
Scene.materialの設定 |
エクスポートした時に、Scene.materialというファイルが作られています。 ここにマテリアルのパラメータ等を記述します。 メモ帳で開いてみるとこんな感じです。 これを見ると、マテリアルに対応したテクスチャを指定しているのが判りますね。 tgaファイルは透過情報を含んでいますので、texture_unitの上に透過するように、 alpha_rejection greater_equal 128 を追加します。 こんな感じ。 tga(透過情報を持つ画像ファイル)を指定しているマテリアル全てに、 alpha_rejection greater_equal 128を追加して下さい。 さて、起動してみましょう。 透過されました。
さて、これで当初の目的であるモデルデータの表示は出来ましたので、 チュートリアルを終了したいと思います。 meg@polygon viewerはモデルの表示だけにとどまらず、 立体音響を鳴らしたり、キャラクターアニメーションを表示したり、 シェーダーを使用したリッチな表現を可能としている素晴らしいソフトです。 |
おまけ |
|
もどる