3ds Max ( Gmax ) での collisionの作り方 (マップオブジェクト編)
ここでは、マップオブジェクトのcollisionの作成方法を解説しています。作成するにあたって必要なソフトは、3ds MaxかGmaxのどちらか一つと、Kam's GTA Scriptです。解説は3ds Maxを中心に進めています。Gmaxの場合は英語版なので用語が違う場合がありますが、なるべく括弧で英語表記するようしますので、読み替えるなどして下さい。日本語パッチを当てている場合は、確認しているわけではありませんが、3ds Maxの日本語表記と大体同じだと思うので、そのままで理解できると思います。
collisionとは、衝突判定の事です。これが設定されていないと、例えば、目の前の道路にcollisionがないとした場合、そこを歩こうと足を踏み出すと通り抜けて落下してしまいます。大抵のオブジェクトモデルは、このcollisionがないとゲームプレイに支障をきすでしょう。
GTAの場合、マップオブジェクトのcollisionは
.colファイルに格納されていて、影作成用のメッシュも一緒にここに格納されています。
.colファイルには複数のcollisionが格納できます。この格納された時の名前でcollisionを適用させたいdffモデルを指定しています。
.colファイルの名前は特に制約はありません。
例えば、下記のような場合ならwd1.colに格納されているwooddeck1は、woooddeck1.dffに適用される事になります。また、その他に格納されているcollisionも、aaaaaaはaaaaaa.dffに、bbbbbbはbbbbbb.dffというような形になります。
woooddeck1.dff wd1.col
├ wooddeck1
├ aaaaaa
├ bbbbbb
└ cccccc
マップオブジェクトを読み込む
あらかじめマップオブジェクトモデルを読み込んでおきます。この時に読み込むスケールをデフォルトの1のままで行って下さい。スケールが変わることによりcollisionの位置がずれる場合があります。
マップオブジェクトの基点(pivot)が0,0,0(x,y,z)である事を確認してください。もし違う座標の場合は0,0,0に修正して下さい。マップオブジェクトをdffでエクスポートする場合は、この基点が中心点になるので座標のどの位置でもあまり問題にはなりませんでしたが、collisionのエクスポートの場合は、ワールド座標の0.0.0を中心点としてエクスポートするので、これにあわせないと結果的に衝突判定がずれてしまうので、これにあわせます。
collisionを作る
collisionの作成は、通常のモデルを作成するようにプリミティブで積み木のように作成するか、編集可能オブジェクトなどに変換して形を整えるなどをして作成して下さい。マップオブジェクトを基準にして作成しますが、あまり細かくつくりすぎると余計な処理でゲームプレイ中に負担がかかったり、NPCの挙動がおかしくなり引っかかり易くなる可能性も大きいので大雑把に作成する感じで、基準となるモデルと比較して大きすぎず尚且つ小さすぎないように作成します。
collisionを作成するにあたっての決まり事があります。プリミティブ(primitive)なオブジェクトはいくつでも作成してもいいのですが、編集可能なオブジェクトは、(Editable がつくオブジェクト Mesh,Poly,Patch)はひとつという制限があります。これは後述しますが、.colファイルをエクスポートする時に、編集可能なオブジェクトは一つのオブジェクトしか選択できない為です。もちろん、この編集可能オブジェクトは無くても問題ありません。また、プリミティブはどのようなモディファイヤ(modifiers)を一度でも適用させてはいけません。
collisionにマテリアルを割り当てる
マテリアルエディタを開き、新しいマテリアルを作成します。GTA COL Surfaceというのがあるのでこれをクリックするとcollision用のマテリアルが作成されます。
Gmaxの場合はMaterial Editorを開いてNewというボタンをクリックするとNew Materialウインドウが表示されるので、そこからGTA COL Surfaceを選択してcollision用のマテリアルを作成して下さい。
マテリアルを作成すると左の画像のようになりますので、ちゃんとできているか確認して下さい。では、Collision Parametersの説明をします。
Surface# これはオブジェクトの表面の材質(コンクリート、木、ガラス、草など)が設定できます。0から178までの数値が入力でき179種類あります。
Brightness/Part これはこのマテリアルが割り当てられたcollisoionの範囲内にあるプレーヤーモデルや車両モデルに対して与える光の影響を設定できます。-1から254までの数値が入力できます。254が最大の明るさになります。左の画像で左から200、225、254の数値で設定した状態です。(私の環境のせいなのか、バグなのか不明ですが、設定した数値が反映されてなかったり、反映されていても異常に暗かったりとよくわからない現象が発生しました。)
それから、この設定が有効になるのは編集可能オブジェクトに対してのみであり、プリミティブなオブジェクトに対しては効果がないようです。
(2007/06/13 追記)
この数値と明るさの関係はよくわかりません。同じ数値で設定しても、面の数の違いで明るさが変化したりもしたので、一度適当な数値をいれてGTA内で確認して調整していった方がよいですね。通常は昼は明るく、夜は暗く、という設定になると思いますが、逆に、昼は暗く、夜は明るくといった設定もできたりするので、いろいろ試してみて下さい。
Unknown1、Unknow2 不明です。
マテリアルの設定が終えたら、先程作成したcollisionに割り当てて下さい。
影作成用のメッシュを作る
これは必要であれば作成します。collisionを作成したときのような感じで作成して下さい。但し、影作成用のメッシュの場合は、ひとつのオブジェクトのみです。これも後述しますが、エクスポートする時にひとつしか選択できない為です。
マテリアルエディタを開き、新しいマテリアルを作成します。GTA COL Shadowというのがあるのでこれをクリックするとshadow用のマテリアルが作成されます。
Gmaxの場合はMaterial Editorを開いてNewというボタンをクリックするとNew Materialウインドウが表示されるので、そこからGTA COL Shadowを選択してshadow用のマテリアルを作成して下さい。
Shadow用マテリアルにある Shadow Parameters は私自身よくわかってないので解説は省略します。デフォルト値の255のままでも問題ないと思います。
マテリアルの設定が終えたら、先程作成した影作成用のメッシュに割り当てて下さい。
bounding box とsphereの作成
bounding boxとsphereがどういうものなのか、きちんと調べていないので間違っているかもしれませんが、多分、collisionの全体の枠なようなものと思います。GTAではこれが必要なのですが、こちら側で作成しなくてもエクスポートの時にスクリプトで自動的に作成してるような感じなので、特に自分で作成する必要はないと思います。もし自分で作成する場合は、全てのcollisionを覆うような形にして、プリミティブなオブジェクトで作成して下さい。
エクスポート
Kam's GTA ScriptからCollision IOを使用します。
Exportボタンの上にあるテキスト入力フィールドに、collisionを適用させたいマップオブジェクトモデルの名前をいれます。(拡張子の.dffは不要です)
Export Setting は、COL3が押されていない状態なら、押されている状態にします。COL3がSA形式のcollisionになります。
collisionで編集可能オブジェクトがある場合は、Collision Meshボタンを押して、編集可能オブジェクトのcollisionを選択します。選択できるのは一つだけです。横のCボタンを押すと選択された物がクリアされます。
影作成用のメッシュがある場合は、Shadow Meshボタンを押して、影作成用のメッシュを選択します。選択できるのは一つだけです。横のCボタンを押すと選択された物がクリアされます。
上記の設定が終えたのなら全てのcollisionと影作成用メッシュを選択してから、Exportボタンを押してエクスポートして下さい。
Gmaxの場合は、AboutにあるUse GTAmax.exeにチェックをした状態にして(デフォルトでチェックが入っていると思います)、GTAmaxを起動してから、Exportボタンを押してエクスポートして下さい。これをしていない場合はエクスポートしたファイルが作成されませんので注意して下さい。
gamxは、直接ファイルを作成する事ができない為GTAmaxを介して作成しています。この為、ポリゴン数が多いものをエクスポートした時にファイルが作成されるまで時間がかかる場合があります。時には「応答なし」の状態になりアプリケーションがフリーズしたような状態になるかもしれませんが、きちんとエクスポート作業は行われているので、しばらく放置してエクスポート作業が終わるのを気長に待って下さい。まぁ、collision程度のものなら数秒程度でエクスポート作業は終わると思いますが。
ひとつの.colファイルに複数のcollisionを格納する場合は、Open collision file を押して.colファイルを読み込んでから、Max Only Control のところにあるDeleteボタン、Appendボタンを使用して追加したり削除したりして下さい。Gmaxではこの機能が正常に働かないかもしれません。少なくとも私の環境ではエラーがでて出来ませんでした。他に対処方法があるかもしれませんが、面倒なので調べていません。
.colファイルがエクスポートできたら、.colファイルとマップオブジェクト一式(dffとtxd)をイメージファイルに取り込み、MEd等のマップエディタでマップオブジェクト(dff)をインポートして下さい。この時、正しく出来ていればdffが読み込まれると自動的にcollisionファイルも読み込まれ、適用されるはずです。
もし適用されていな場合は、collisionの名前(.colファイルの名前の事ではありません。中に格納してあるcollisionの名前の事です)がマップオブジェクトの名前が一致していない可能性が大きいのでチェックしてみましょう。
MEdでcollisionを表示させた時に崩れて表示がされるかもしれませんが、実際にGTA内で確認してみるときちんと意図した形に衝突判定がされています。MEdのバグなのかcollisionの作成ミスかは不明です。もしかしたらcollisionを作成するにあたって大きさ、密度などの制限があるかもしれません。
以上でcollision作成の解説は終了です。
おつかれさまでした。(2007/06/05)