Quake3 Map構築ソフト Radiantのページ
Last update: <2008/05/30 10:28:53 +0900>
使用方法などの備忘録.
- Radiantとは
- インストール
- Radiant公式ページからwin32版のGtkRadiant***をダウンロードする.
- 実行すると,契約事項が現れるのでaccept.
- インストール形式の確認ではfull install.
- 起動
- スタートメニューからGtkRadiantを選択して起動
- マップの種類を選択する(ここではQuake3,図)
- 操作基本画面が現れる.左上は2Dマップ,右上はカメラウインドウで,主に左上の領域で作業することになる.
- 基本設定
- File-Preferenceで,作成していくマップのディレクトリを指定しておく.この中にbaseq3というディレクトリが作成され,この中にマップに関係するデータが保存されていく.

あわせて,マウスの設定で2ボタンにしておくのが良さそうである.
- 基本操作
マップを構成するにあたって最低限必要な作業は次の通りである.
- 閉空間を作成する.
- 閉空間の内部にスタート位置を配置する
- 必要ならテクスチャをオブジェクトに適用する
- 必要ならライトを配置する
- マップをコンパイルする
操作に慣れるために,簡単なマップを作ってみる.
- 2Dマップ部分に(256,256)-(-256,-256)の床を描画してみよう.Insert,Deleteキーで2Dマップ部分の表示範囲が拡大縮小する.マウスのホイールでも可能.
- (256,256)から(-256,-256)の2箇所をドラッグすると,赤い破線によって四角形が作られる.
- この2Dマップエディタでは高さはZ軸と定義されている.高さ方向に体積を持たせるために,"XYZ"と書かれたボタン(
)を押し,X-Z軸表示にする.
- 高さが256になるように調整してみる.Translateボタン(
)を押して赤い破線の四角形をドラッグすると移動することができる.また,拡大縮小するにはResizeボタン(
)を押し,
SelectFace(
)を押して,枠線をドラッグする.
- これで立方体の形状を定義したが,この立方体の形状に厚みを持たせることによって,部屋の完成である.Hollowボタン(
)を押すと四角形が二重枠の実線になり,右上のウインドウに壁面の様子が現れる.
右上のウインドウはカメラウインドウと呼ばれる.ここでは視点の操作をおこなうことが可能である.マウスの右クリックにより視点の回転を切り替えることができる.またカーソルキーに視点を移動することができる.
前進 |
↑ |
左旋回 |
← |
右旋回 |
→ |
後退 |
↓ |
上移動(並進) |
Dキー |
下移動(並進) |
Cキー |
上旋回 |
Aキー |
下旋回 |
Zキー |
視線を水平に |
ENDキー |
2Dマップの中央に位置している青い菱形マークは視点の位置や方向を表している.
- 壁面を一つ抜いてみよう(閉空間でなくなるので,後ほどエラーが出るが,ここでは気にしなくてよい).実線状態のオブジェクトを選択するには,SHIFTキーを押しながら左クリックすればよい.赤点線状態になれば選択されていることになる.間違って選択したり,選択を取り消す場合はEscapeキーを押す.また,BackSpaceキーによって選択オブジェクトを削除できる.
- 壁面のテクスチャは"SHADER NOT FOUND"となっている.テクスチャファイルが見つからない場合,この模様になる.テクスチャを変更する場合は,あらかじめテクスチャを用意することからはじめる.
基本設定で指定したディレクトリの下のbaseq3以下に,テクスチャを収めるディレクトリtexturesを作成する.
このディレクトリ配下にテクスチャを格納すればよいが,ここではさらにwallというディレクトリを作成し,blocks10.jpgというテクスチャファイルを置いた.
- メニューのTextures->Flush&Reload Textureを選択すると,テクスチャディレクトリを走査し,ファイルを探しにいく.再びTexturesを選択すると,wallという項目が増えている.

- wallを選択すると,テクスチャウインドウにテクスチャデータが表示され,テクスチャの準備ができた.2Dマップのオブジェクトを選択した状態でテクスチャを左クリックすると,そのオブジェクトにテクスチャが適用される.オブジェクトをまとめて選択する場合には,SHIFTキーを押しながら領域をドラッグすればよい.

- ユーザのスタート位置を設定してみる.これがないとマップは完成しない.2Dマップ上で右クリックすれば,メニューが現れるので,info->info_player_startを選択すればよい.ここではX-Y軸表示(俯瞰)状態で作成した.
- 図のような座標軸が表れる.これがユーザのスタート位置である.マウスでドラッグすれば移動することが可能である.作成したマップ内に必ず収まるよう,他の軸表示でも確認しておく.マップコンパイル時に必ずエラーがでる.ここでは部屋の中央に位置するようにセットした.ESCAPEキーで位置を確定する.
- カメラウインドウでは,ユーザのスタート位置が赤い箱で表示される.
- マップに名前をつけて保存しておく.ここではsquare.mapと名づけた.
- 光源を加えてみる.2Dマップ上の右クリックメニューでlightを選択するとintensity(強度)の入力ダイアログが出る.ESCでデフォルト値である.光源は次のような記号で表される.ESCAPEキーで位置を確定する.
- カメラウインドウでは,光源が八角形で表示される.
- マップをコンパイルする.メニューのBuildからBSP構築の項目を選ぶとコンパイルが開始される.マップが閉空間ではないため,エラーが出るが気にせずすすめる.
- コンパイルされたマップはmaps以下にbspファイルとしてできる.
- マップの表示確認
作成されたデータをマップビューワに読み込ませてみる.
- Quakeマップビューアのメモのところにあるcake_base.lzhを展開する.
- マップ作成時に指定したディレクトリ(上記参照)にcake_base.lzhの展開内容を移動する.baseq3ディレクトリの中のconsole.pk3は文字表示に必要.マップ作成側のbaseq3に移動を忘れずに.
- main.exeを起動するとCakeエンジンのコンソールが開く
- コンソールでbsplistと入力すると,マップのリストが表示される.ここではsquareという名前にしてあったので,square.bspがリスト表示される.
- loadコマンドでマップを読み込む.load squareで作成したマップを読み込めるはずである.
- 高度なマップ作成に関するメモ書き
- Gridの設定
メニューのGridで設定できるのは,操作できる最小単位である.

ここでgrid32を選択すると,32マスを単位としてオブジェクトの作成や移動をおこなうことができる.
- オブジェクトの選択方法
SHIFTキーを押しながらマウスを左クリックすると,オブジェクトを選択できるが,オブジェクトの数が増えてくると思うように選択できない.SHIFT+Ctrlキーを押しながら選択すると全体を選択することができる.またSHIFT+ALTキーを押しながら左クリックをすると,手前のオブジェクトから順に選択してくれるようである.
- オブジェクト同士の演算
オブジェクトが重なり合った状態で減算をおこなうことができる.Subtractボタン(
)はオブジェクトの引き算で,穴をあけたり削ったりする場合に有益である.減算したいオブジェクトを,被減算されるオブジェクトに重ね,減算したいオブジェクトを選択してSubtractを押すと引き算できる.Mergeは正確には加算でないが,2つのオブジェクトを合成したい場合に用いる.
- テクスチャの変形方法
テクスチャに生じるパースを,フォトショップによってなくす方法
- 画像を開き,必要な部分をペンツールで正確に取る

- 作成したパスを選択範囲として読み込む.(マウスカーソルの指先に位置するアイコン)

- 選択範囲をコピーし,新規画像にペーストする.

- 編集->自由変形を選択するか,Ctrl+Tで変形をおこなう.このとき,Ctrlキーは押しっぱなしにする.完成したら確定するのを忘れない.

231研究室のマップデータサンプル
- 背景画像(空)の描画方法
- 背景画像を用意する
背景に必要なのは,前後左右上下の合計6枚の画像である.ここでは数字の書かれた画像を用意している.
- 背景画像を保存する
保存の際に気をつけなければならないのは,背景の前後左右上下で命名法則が決まっていることである.例えば,前方ならファイル名(拡張子を除く)に_ftを付ける必要がある.後は_bk,右_rt,左_lf,上_up,下_dnとなっている.
この法則にしたがって,上記の画像を次のように命名している.
- sky_ft.jpg
- sky_bk.jpg
- sky_rt.jpg
- sky_lf.jpg
- sky_up.jpg
- sky_dn.jpg
これらのファイルはbaseq3配下のenv配下,numberディレクトリに格納している.
- Shaderファイルの作成
作成したテクスチャを有効にするため,shaderファイルを作成する.まず,scriptsディレクトリ配下にtest.shaderというテキストファイルを作成する.内容は次の通りである.
textures/number/sky
{
surfaceparm noimpact
surfaceparm nolightmap
surfaceparm sky
q3map_globaltexture
qer_editorimage env/number/sky_ft.jpg
q3map_sun .75 .58 .42 70 100 60
q3map_surfacelight 90
q3map_lightsubdivide 256
skyparms env/number/sky 128 -
}
このファイルによって,ファイルによって,numberというリストにSkyというテクスチャが登録される.重要なのは,skyparmsという項目で,ここには先ほど作成したファイルの場所とファイル名(の共通項)を指定しなければならない.また,qer_editorimageでは,エディタで参照される画像を指定しておくとよい.
詳しいパラメータは他のチュートリアルを参照されたい.
このShaderファイルを有効にするには,shaderlist.txtに先ほど作成したShaderファイル名を拡張子抜きで記述しておく.ファイルの内容は次のようになる.
// this file lists all the separate shader files
test
- gtkRadiantでのShaderの利用
メニューのTextures->Show shadersにチェックを入れておき,Textures->Flush&Reload Textureを選択すると,先ほど作成したnumberというShaderリストが選択できるようになっている.これを選択すると,作成したskyというshaderが表示される.実際にエディタ画面に表示される画像は,test.shaderで指定したsky_ft.jpgだけである.
大きな直方体を作成し,全てにskyシェーダを適用すれば完成である.図では画像が反転してしまっているが,気にしなくてもよい.
- 作成したマップファイル(test.zip)
- アルファブレンディングの利用方法
- アルファ値を含んだ画像を用意する.
アルファ値を含んだ画像を作成するため,以下の樹木の画像を例にとろう.
樹木の白色部分(背景)を透明にすることを考えよう.(ここではフォトショップを例に説明する)
フォトショップで画像を開き,画面のようにアルファチャンネルを新たに作成する.
アルファチャンネルに色を塗る.白の領域が不透明,黒の領域が透明になる. 画像では,透明にしたい部分を自動選択ツールを使用して,選択する.
白色の領域をすべて選択した状態でアルファチャンネルを選択し,黒いブラシで塗りこむ.
出来た画像はTGA形式で保存する.上書きより,複製を保存のほうが確実である.アルファチャンネルのチェックを忘れずに.また,アルファチャンネルが増えたため,32bit/pixelになる.
アルファチャンネルつきの画像は完成である.念のため,もう一度フォトショップで読み込み,アルファチャンネルが出来ていることを確認しておくこと.(うまく保存されない場合もたまにある)
- アルファチャンネル入り画像をGtkRadiantに取り込む
画像を取り込むためには,前述のシェーダ機能を利用する.くわしくは背景画像の部分を参照のこと.
作成したテクスチャファイルは,ここではbaseq3配下のtextures配下,test2ディレクトリにtree.tgaとして格納しているものとする.
scripts配下に以下のシェーダファイルを作成する.これはtree.tgaを半透明テクスチャとして扱うシェーダファイルの例である.
textures/test2/tree
{
q3map_surfacelight 100
qer_editorimage textures/test2/tree.tga
cull none
{
map textures/test2/tree.tga
blendFunc GL_ONE GL_ZERO
alphaFunc GE128
rgbGen identity
depthWrite
}
}
作成したシェーダファイルはshaderlist.txtに登録しておくこと.
次の図は,半透明画像を立体に適用したものである.
- テレポート(マップ切り替え機能)の利用
マップデータが肥大化すると,読み込みや動作が鈍くなってくる.そこで,マップを分割して,ある地点に到達すると別のマップデータとして読み込めないか,ということで模索したのがこのテレポート機能である.
テレポート機能とは,マップのある地点から別の地点に強制移動するという機能である(このような移動などのイベントは,マップ上のentity(エンティティ)で管理されている).しかし,デフォルトでは別のマップデータへの移動はサポートされていない.この機能を実現するためには,マップビューワ側を改良する必要がある.
マップ内のテレポート
ドアに触れたら別の場所にテレポートする例を作成する.テレポート機能を付けたい物体を選択する.テレポートが定義された物体は,本来なら表示されないのだが,マップビューワでたまに表示されるバグも確認されている.見えても消えても目立たぬよう,物体をコピーしておいて,重ねて配置しておいたほうがよい.

2Dマップ上で物体を選択した状態で右クリックし,triggerのtrigger_teleportを選択する.
次に移動先を作成する.targetのtarget_teleporterを選択するとマップ上に深緑色の立方体が出てくる.これが移動先になるので,適切な位置に変更する.
二つの物体を選択して,Ctrl-Kを押す(メニューのEntity->Connectでもよい.ただし,二つの物体は,先にtrigger_teleportを設定した物体(テレポート元)を選択し,続いてtarget_teleporterを設定した物体(テレポート先)を選択する.
二つの物体を連結すると,画面上には線で物体同士が線で接続される.この線が出なければ正しく連結されていない.triggerの設定から何度もやり直してみること.(二つ選択した状態でもう一度trigger_teleportを設定し,そのあとにconnectをするとうまくいくような気がする)
実際にEntityとしてどのように扱われているかは,メニューのView->Entity Inspector,Entity-Listを見ればよくわかる.
EntityList画面でtrigger_teleportを選択すると(一つはダミー?),Entities画面で属性が現れる.このとき,targetで指定されているt1がテレポート先である.
次にEntityList画面でtarget_teleporterを選択すると,Entities画面では,テレポート先の位置(origin),ターゲットの名前(targetname)が定義されている.angleという属性は,このEntities画面を使って入力したもので,テレポート後の向きを定義している.originも数値的に変更可能である.targetnameも変更可能だが,trigger側のtargetと対応(t1)がとれてなければならない.
他マップへのテレポート
先ほどの例を使って,ドアに触れたら別のマップにテレポートする例を説明する.他マップへのテレポートする場合には,trigger_teleport(テレポート元)でファイル名を指定する.EntityList,Entity Inspectorを利用して,次のパラメータを加える.
- targetfile
テレポート先のファイル名
- targetpos
テレポート先のスタート地点
- targetori
テレポート先の視線の向き
なお,同じマップ内にテレポート先がないと正しく機能しないので注意が必要である.具体的には,trigger_teleport内でtargetが定義されており,t1に対応したtarget_teleporterが定義されていなければならない,ということである.
参考となる資料(説明に使用しているプログラムのバージョンが古いため,操作系が異なる)
- 公式マニュアル
本家のマニュアル
- Qworkshop3 Tutorials
マップ作成のチュートリアル
- Level Design
Forumが充実
- Enemy Territory
スクリプトの解説が充実
日本語サイト
- Wolfensteinマップ作成
- Irrlicht A GoGo
- Map Editing メインページ
- マップ作成
戻る