ホーム
チュートリアル
第一回
第二回
第三回
第四回
第五回
第六回
チュートリアル番外編
第一回
第二回
第三回
第四回
拡張ソース
TrueType表示クラス
(チュートリアル第六回参照)
掲示板
メール
(-nospamを外してください)

チュートリアル番外編

その四 Poser+六角大王Super+fragMOTIONでお手軽スキンメッシュ

絵心のないプログラマにとって、ゲーム作りの上で一番困るのはキャラクタのモデリングなんじゃないかと思います。
(少なくとも私は一番困ってましたorz)
そこで、絵心がなくてもそれなりの水準のモーション付キャラクタモデルを作る方法をいろいろ模索したりするわけです。
今回、まあ納得のいく手順の確立ができたと思いますので、ここで晒してみようかと思います。

道具をそろえる

前提条件の整理

まずは今回、方法を模索するにあたって、最低限満たしたい条件を整理しました。
1)職人芸が要求されるレベルの編集は行わない
2)個々のツールは一個2万円以内。総額5万は超えないこと
3)それなりの見た目が維持でき、リアルタイム表示に耐えられる程度のローポリモデル
4)なるべくモデルの量産がきくやり方を考える
上の条件を重視しつつ道具の選定を行いました。

六角大王Super4

安いモデリングツールというと、まず最初に思いついたのがこいつでした。
最大の特徴は、人体作成機能という、人体の正面図から自動でモデリングを行ってくれることです。
最大の問題点は「人体の正面図なんて描けねぇ」ことですorz

Poser

お手軽人物モデリングと言えばPoserを思いつきます。
人物モデリングに特化しているだけに、機能も使いやすいですし、
フリーや、商用でもかなり安価でモデル素材が入手できるのは絵心のない人間にとっては高ポイントです。
bvhに対応しており、モーション編集にも強いですし、フリーもしくは安価なモーション素材も豊富です。
以前はそれなりに高価でしたので、上記「一本2万まで」の条件を外れてしまっていましたが、
最近はPoser Artistという廉価バージョンもありますし、
2005年4月現在、Poser6の登場に伴い、キャンペーン価格でかなりお手軽に入手できるようになってきました。
これで完結できれば一番幸せなわけですが、あくまでレンダリング画像をどうこうするのが主目的のツールなので、
「モデルがハイポリ過ぎてゲームにはちょっとね」という問題があります。

fragMOTION

ある意味一番選定に困ったのがモーション付けのツールでした。
前提条件として職人芸レベルの編集がいらないもの、ということを考えていましたので、
モーションを手付けするということは考えていませんでした。
となると、bvh等のモーション形式が読み込めるもの、ということになります。
また、モーションを作るときに大変な作業として、頂点のウェイト付けもありますが、
微調整はやむをえないにしろ、ある程度まで自動で頂点付けができるものが望ましいです。
ということで、かなり色々模索しましたが、結局落ち着いたのがfragMOTIONというシェアウエア(20$)でした。

条件を再整理

モデラの候補として挙げたのがPoserと六角なわけですが、
長所 短所
六角大王Super4 自動で(それなりに)ローポリな人体作成
X形式にUV込みでexport可
下絵を描くにはそれなりの画力が必要
Poser 大量の素材で絵心不要(あるに越したこたぁない)
bvhを使ってモーションデータを吐ける
出力モデルを使うのは非現実的
という問題をそれぞれ抱えています。
しばらく悩みましたが、
「六角の下絵をPoserに描かせればいいんじゃん?」
ということに気づいたわけです。

手順の確立

そのことに気づけばあとは手順をまとめるだけです。

1)Poserで素材をベースに元キャラクタ作成
2)六角の人体作成機能の下絵をPoserでレンダリング
3)六角でローポリメッシュを作成し、Xで出力
4)Poser上でモーション付けをしてbvhで出力
5)fragmotionでbvhをローポリメッシュに割り当てる

という手順でなんとかなりそうです。

Poserでキャラクタ作成

というわけで、まずはPoserで元キャラクタを作ります。
Poserの基本的な使い方については、製品のチュートリアルを参照してください。
また、素晴らしい入門サイトがいくつかありますので、
そちらを参考にした方がよろしいでしょう。
とりあえずこちらの「Poser入門」と、こちらの「Poserちょ〜入門」をお勧めしておきます。

フィギュアの配置

Poserを起動したら、まずフィギュアを配置します。
標準添付のリアル系フィギュアを使っても良いのですが、ここではアニメ系のキャラクタを作りたかったので、
Animedollという商用データ(1800円/20$)使用しています。
配置すると、フィギュアが裸の状態で配置されますので、適当に何か髪と服を追加して、着用させておきましょう。
この時、フィギュアをどちらか横に寄せて、
「なるべくどちらかの脇の下の空間を広めに取る」
と後々幸せになれます。


また、Animedollの場合、初期状態の基本ポーズが後々都合の良い、
「ちょっと足開いて手を横に伸ばした状態」になっていますが、
そうなっていない場合、とりあえずこの形にしておいた方が良いです。
ここで、カメラ位置を正面なるべくいっぱいいっぱいに全身が入る状態にして、
「現在のカメラ位置と現在のポーズをライブラリに保存しておく」
という作業を行っておいてください。
また、その後フェイスカメラを選んで、
正面から顔が適度に収まる位置を設定し、ライブラリに保存しておいてください。

レンダリング

位置が決まったらレンダリングしましょう。
この時に注意することとして、
レンダリングサイズは必ず2のべき乗の正方形になるようにしてください。
(256*256、もしくは512*512ぐらいでしょうか。)


プログラム中でシェーダ処理をかける時など、テクスチャに影がついていては邪魔な場合があります。
そういう時は、トゥーンシェード処理を使ってモノトーン化してレンダリングしましょう。

これで下絵は完成しました。

六角大王Superでローポリ化

続いて、今作った下絵をもとにポリゴン化します。
人体作成機能の使い方については、六角大王Superのマニュアルを見てください。

とりあえずポリゴン化

最初の雛形選びでは、今回は「女」「長髪耳隠れ」「少ないポリゴン」「ぴったり服」を選びました。


経験則的なコツとしては、
1)最初の特徴点決めはおおまかに並べれば十分、あとでドラッグで厳密に並べる。
2)輪郭線は厳密に引こうと思っても限界があるので、適度なところで手を打つ。
3)とにかくこの段階であまり神経質になっても無意味。
といったところでしょうか。


少々不細工ですがとりあえず完成です。
状況的に少々大目のポリゴンモデルでも構わない(ゲームの性質上モデルの数が少ない等)場合、
雛形に「イラスト」を選べばもう少し別嬪さんになります。
ポリゴン数は、このモデルで概ね2500ポリゴン前後、「イラスト」の場合8000ポリゴン前後になります。
(「イラスト」「少ないポリゴン」の雛形をSuper5では切実に望みます>終作さん)

顔の整形

できあがったポリゴンをワイヤーフレーム表示してやるとわかりますが、
人体作成機能で作ったモデルはどうしても鼻が横に幅広にモデリングされてしまっています。


この部分を含めて、顔のポリゴン差し替えると結構見栄えが変わります。
六角大王Superには、斜め方向から見た図形を立体に起こす「マンガモード」がありますので、
元キャラクタを斜め方向からレンダリングした下絵を元に顔のポリゴンを作ります。
ついでに、口の部分もローポリとしてはあそこまで造形は不要ですのでポリゴンを削りましょう。



UVでディティールアップ

人体作成機能では、顔を含めた全身を単純に正面からの平面マップ化したUVを持っています。
実際、元絵のテクスチャを再マップしてもそのまま表示されます。
ということは、元絵の隙間に顔などのディティールを入れることが出来るわけです。
元絵を作る段階で、「脇の下の空間をなるべく広く取れ」と言ったのはこういう理由です。
ということで、顔を正面からレンダリングした画像を隙間に貼り付けます。
(画像ソフトはなんでも構いません。私はペイントでやってしまったぐらいです)
その他、髪の毛や背中のテクスチャも貼り付けてしまいましょう。

あとは、六角大王のUV編集機能で貼り付けてしまえばOKです。

先ほどよりはかなり別嬪さんになったと思います。



この後、Xフォーマットでエクスポートしますが、エクスポート前に必ず、
「立体」→「面の表裏判定」→「表裏の自動判定」を実行しておいてください。
あと、エクスポートしたXをIrrlichtで使用するという前提なら、
「出力する時にスケールを0.39しておく」といいです。
というのは、BSPマップやSidneyさんを含めた海外FPS系データというのは座標がインチ単位になっており、
座標がセンチ単位の六角をそのまま1.0で出力すると何かと不都合が発生します。
このスケールにしておけば、MD2形式のデータともサイズ調整が取れます。

Xファイル化

いよいよプログラムから使えるようにXフォーマットに変換します。
六角大王SuperはXフォーマットのエクスポートを持っていますのでこれで出力すればOK・・・
というわけにはいかないんですねorz
Xフォーマットは、実はかなり柔軟(悪く言えば雑多)なフォーマットであるため、
こっちのソフトで出力したXがあっちのソフトで問題なく読める、という保障がほとんどありません。
そこで登場するのがDirectX SDKに付属するMesh Viewerです。
Mesh Viewerに六角からエクスポートしたXファイルを読み込みましょう。
この時必ず、「Flatten Frame Hiearchy」にチェックをいれてください。



うまく行けば、今作ったモデルが表示されるはずです。
(このデータの場合、顔と髪の毛のポリゴンを削ったので、1500ポリゴン前後で収まっているのがわかります)



続いて、このデータの最適化を行います。
とはいえ、実際にやること自体は、「MeshOpsメニューの内容を上から順に実行していくだけ」です。
これを行うだけでfpsが10〜20は上がります。
これらを行ったら、MeshViewer上で再度セーブしましょう。(上書き保存でいいです)

FragMOTIONでスキンメッシュ化

これでとりあえずメッシュは準備できました。続いてモーションを用意して、いよいよスキンメッシュ化します。
モーションデータの作成のために、再びPoserの登場です。

基本は歩き

まずは定番の歩きモーションを作りましょう。
Poserには歩行デザイナという優れもののツールがありますので、
これを使用して歩き方をデザインします。

今回はアニメ系おなごキャラということで、セクシー系を強めにしてみましたw。
調整してフィギュアに適用しながら歩き方をチェックし、
最終的にまとまったらbvh形式にエクスポートしましょう。

fragMOTIONの起動

それでは、今作ったbvhをメッシュに割り付けるために、fragMOTIONを起動しましょう。
「File」→「Import」から先ほど作成したXファイルを読み込んでください。

細かい注意事項として、XフォーマットとfragMOTIONの座標系の違いから、
「モデルはすべて背中を向いてしまう」ということに注意してください。
が、実作業には特に問題ないと思います。(ってか私は問題ないですね)

bvhデータの取込

それでは、先ほど作成したbvhデータを取り込みましょう。
「File」→「Merge」から「Poser BVH」を選び、先ほど作成したbvhを取り込みましょう。
この時、取り込むべき階層を聞いてきますが、
指先と首から上のボーンについては不要ですので取り込まないようにチェックを外してしまいましょう。

また、接地処理用のボーンが入っている場合、自動ボーンの邪魔になりますので、
チェックを外してください。

OKを押すと、ボーンがマージされるはずです。

ボーン位置の調整

ボーンがマージされたら、skeltonペインから「hip」を選んでpropertiesペインにhipの情報を出し、
propertiesペイン中の「Y」をクリックして値を入力し、hip位置がメッシュのしかるべき位置にくるよう調整します。
また、この時にXフォーマットの裏返りの対策としてY-Rotationに180を入れておきましょう。


同様に、手足や首の関節位置を調整し、フィギュアに収まるようにします。

この時のコツとして、
1)各ボーンの間は可能な限り隙間を空ける。
2)正面からだけでなく、側面や上下からも見て、きっちりモデルの中にボーンが埋まるようにする。
ぐらいでしょうか。
特にボーン間の距離が詰まっていると、自動骨入れの精度に影響するので、慎重に行いましょう。

頂点割り当て

関節の位置が決まったら頂点の割り当てを行います。
fragMotionはそこそこ賢い自動スキニング機能を持っていますので、
「Bone」→「Auto Assingh Vertecies」を実行すればとりあえずはOKです。
経験則的に、「Conical(parent first)」が一番高精度に骨入れしてくれる気がします。
OKすれば、とりあえずの頂点割り当てを行ってくれます。

テストと頂点割り当ての調整

とりあえずの頂点割り当てが完了したら、いったん歩かせて見ましょう。
Animationsペインから今読み込んだアニメーションを選択してください。
おそらく、あちこちで頂点の巻き込みが起こっていると思います。
この時、調整するコツとして、まずボーン位置の調整→再度自動ボーンの繰り返しで、
可能なかぎりボーン位置の調整で吸収した方が良いです。
肩にかかっている髪の毛等が肩関節の影響を受けるのはどうしようもないので、
Select Vertexで選択しながら、

自前で頂点アサインを行いましょう。

手馴れてくれば案外短時間で調整できるようになります。

モーションの追加

一度ボーン位置と頂点アサインが決まってしまえば、あとは簡単です。
Poserで好きにアニメーションを作ってはbvhを次々にMergeしていけば、モーションが追加されます。


ファイル出力

ここまで出来てしまえばもう後は好きなフォーマットに吐き出して使えばよいでしょう。
fragMOTIONは、Xの他、md2等にも対応しています。
とりあえずはXで出力して、MeshViewerで確認してみましょう。

残作業として、体の側面に若干背景色が入り込んでまだらになっている部分の修正がありますが、
これはfragMOTIONのUV編集機能でごまかせると思います。

応用あれこれ

お手軽テクスチャバリエーション

この手法では、テクスチャを作るのに若干のコピペを行った程度で、ほとんどはPoserに任せて出力しています。
ということは、カメラ位置さえ再現してやれば、同じ配置のテクスチャを何度でも作れる、ということになります。
つまり、保存しておいたカメラ位置で服を取り替えて再レンダリングしてやれば、
簡単にテクスチャバリエーションが増やせるということになります。
(今回の作例だと、ぴっちりしたパンツ系の服しか使えませんが)
同じことで、顔のテクスチャも簡単に量産できます。
表情変えやMTを使った別の顔など、Poserの操作(と若干のコピペ)だけでバリエーションが作れるということです。

まとめ

この手法で、キャラクタを作る上でもっとも職人芸が要求されるテクスチャの書き込みとモーションデザインについては、
基本的に機械任せにしてしまうことで、
絵心のないプログラマでも「それなりの水準の」スキンメッシュを作ることができるようになったと思います。
ツールの総額もPoserが廉価版のArtistなら一万円台前半、六角Superが8000円前後、fragMOTIONが約3000円で、
ざっと総額3万円程度に抑えられました。
試行錯誤の時間を除くと、素人でも慣れれば一日1体もしくはそれ以上のスキンメッシュを作れると思います。
最後に、このサンプルで作ったスキンメッシュをここに置いておきます。
専業の絵描きさんから見たら笑っちゃう水準でしょうが、
まあ「プログラマが1ドットも打たずにここまでは作れた」というサンプルとしてご笑覧ください。

トップページへ 番外編その三へ 番外編その五へ