[旧記事]BattleCraft1942を用いないライトマップの作成法について

FPS

地形と建物の配置を終えたmapperが,マップの更なる没入感を表現するため行うのがライトマップ,いわゆる光源と影の処理です.


Battlefield1942のマップ製作に用いられるエディタは,EAが開発した公式エディタである「BattleCraft1942(BC42)」と,有志によって開発された「Editor42(E42)」の2つがあります.
BC42はマップの圧縮データであるrfaファイルを解凍せずに編集を行えますが,閲覧したrfaファイルを勝手に書き換えてしまうため,あまり好まれていません.
一方で,E42は使用するrfaファイルを解凍する必要がありますが,MODのカスタムオブジェクトや地面のカスタムテクスチャ等が導入しやすい点から現在のマッパーに好まれています*1
ただしE42はBC42の機能であるライトマップが行えず,この作業のためにBC42を介する必要がありました.

ライトマップ作成は長年この方法しか知らなかったのですが,海外のFHSWフォーラム
よると,BF1942.exeに引数を渡して実行する事でライトマップの作成が可能であったようです.
手元に製作中のカスタムマップであるWestminster-1942があったので,このフォーラムの方法に従ってライトマップの作成を行ってみました.
なお,実行に数時間掛かるため外出や就寝前に行うことをお勧めします.

*1 ただし一部については勝手に書き換えられるため,オリジナルデータのバックアップを取って編集分だけ上書きする方法が一般的
(以下,この投稿はFHSWフォーラムのほとんど翻訳記事となります.実際に作業を行って不必要だった箇所を削り,また一部加筆しました.)


作業にあたっては以下のツールが必要です.
共通
・WinRFA
Objects Lightmapping
・Samplesmaker 1.0
ミラー: Tiny Directory Lister の samplesMaker-1.0.zip
Terrain Lightmapping
・.ddsファイルを.tgaファイルに変換するツール(IrfanViewプラグインを使えば一括で変換できる)
・.tgaファイルを.ddsファイルに変換するツール(DXTBmp等)

0) BF1942のrootディレクトリに以下の3つのフォルダをあらかじめ作成しておきます.
・EA GAMES\Battlefield 1942\bf1942\levels\MAPNAME\
・EA GAMES\Battlefield 1942\ShadowWork\bf1942\levels\MAPNAME\Textures\
・EA GAMES\Battlefield 1942\standardmesh\

MAPNAMEは自分の作成したマップ名と一致させて下さい(以下同様).

Object Lightmapping

Object Lightmappingは建物(staticobjects)自体のテクスチャに影を焼きこむライトマップです.

1) まず,全てのstaticobjectsに対応する.samplesファイルを作成する必要があります.
FHSW\Archives\standardmesh.rfa の.smファイルを,winRFAを使ってどこかのフォルダに解凍します.
全ての木や石に影を付けると処理に時間が掛かるため,もし必要ないなら対応する.smファイルは外しておきます.
(カスタムマップでカスタムオブジェクトを埋め込んでいるなら,その.smファイルも展開します.)
もし普段のマップ製作をEditor42で行っているなら,作業フォルダに.smファイルを展開している筈なので,それを利用しましょう.
Samplesmaker-1.0.zipを解凍したフォルダにsamplesmaker.exeとsamplesmakerall.batが含まれているので,その2つを展開した.smファイルと同じフォルダに移動します.

2) 次にコマンドプロンプトで次のコマンドをこのフォルダ上で実行します.
OSがWin7以降ならShiftキーを押したままフォルダを右クリックすることで,「コマンドウィンドウをここで開く」が選択できます

samplesmakerall medium

これで.smファイルに対応した.samplesファイルが作成されます.
.smファイルが正しいチャンネル3UVmapを持っていない場合にエラーを吐きますが,この.smファイルは無視して続行しましょう.
全ての.samplesファイルを作成するのに数時間掛かるので,気長に待ちましょう.
作成された全ての.samplesファイルを,BF1942のrootディレクトリに新たに作成したstandardmeshフォルダに移動します.
( EA GAME\Battlefield 1942\standardmesh\***.samples )

3) 次にObjectsLightmap.conを作成し,以下のディレクトリに保存します.
( EA GAMES\Battlefield 1942\bf1942\levels\MAPNAME\ObjectsLightmap.con )
ObjectsLightmap.conの内容は次の通りです.適当なテキストエディタで作成して下さい.

raytracer.init
raytracer.ambientIntensity 0.05
rem *** Can’t say for sure what these two do. Modify at your own risk! ***
raytracer.blockSize 16
raytracer.sampleOffset 0.05

rem *** You should never have to change these settings ***
raytracer.OnlyNearest 0
raytracer.shadowsNearCamera -10.0

rem *** This first instance is best left at default settings. ***
rem *** But still update the light direction on this one too! ***
raytracer.light.create
rem **** Should be sun direction ***
raytracer.light.direction 0.826002/0.312193/-0.469316
raytracer.light.selfshadowing 1
raytracer.light.objectShadows 0
raytracer.light.shadowIntensity 1
raytracer.light.intensity 0.35
raytracer.light.softness 1.0
raytracer.light.fov 130
raytracer.light.viewDistance 200

raytracer.light.create
rem **** Should be sun direction ***
raytracer.light.direction 0.826002/0.312193/-0.469316
raytracer.light.selfshadowing 1
raytracer.light.objectShadows 1
rem *** This increases shadow intensity (darkness)***
raytracer.light.shadowIntensity 1
rem *** this increases intensity of light ***
raytracer.light.intensity 0.6
raytracer.light.softness 0.0
rem *** Reduce this to make shadow edges sharper ***
raytracer.light.fov 8
raytracer.light.viewDistance 500

raytracer.addIgnoreObject terrain
raytracer.addIgnoreObject track

ここで最も重要なのがマップでの光源(太陽)の方向です.

raytracer.light.directionの値を,作成したマップのInit\SkyAndSun.con のsky.sunLightDirectionVecに合わせます.
日差しの強いマップならlight.intensityを強くし,曇っているマップなら弱く設定します.
(他のパラメータについては分かっていないので色々と試してみて下さい.)
用意ができたらBF1942.exeのショートカットを作成し,プロパティ→ショートカットタブ→リンク先 の末尾に次の引数を追加し,実行します.
+game FHSW +workingFolder "ShadowWork" +traceObjectShadows "bf1942\levels\MAPNAME"
実行が終了すると,ObjectsLightmapsフォルダがEA GAMES\Battlefield 1942\bf1942\levels\MAPNAME\ に作成されます.
このフォルダごとマップのルートに移動させます( MAPNAME\ObjectsLightmaps\ ).
最後に,ObjectsLightmapsフォルダにPalette.palファイルを追加して終了です.
このファイルはObjects Lightmapsが有効で,雰囲気の似ているマップからコピーしましょう.
砂漠マップのPalette.palを雪原マップで使うのはお勧めできません.
このファイルはPhotoshop等で編集できるようです.

Terrain Lightmapping

Terrain Lightmappingは地面のテクスチャに影を焼きこむライトマップです.

1) 作成したマップのTexturesフォルダを,WinRFAを使用して解凍します.
フォルダ内の.ddsファイルを,IrfanView等で.tgaファイルに変換し,
EA GAMES\Battlefield 1942\ShadowWork\bf1942\levels\MAPNAME\Textures\ に移動します.
(カスタムマップでカスタムオブジェクトを埋め込んでいるなら,.smファイルを
EA GAMES\Battlefield 1942\standardmesh\ に解凍しておきます.)

2) 次にTerrainLightmap.conを作成し,以下のディレクトリに保存します.
( EA GAMES\Battlefield 1942\bf1942\levels\MAPNAME\TerrainLightmap.con )
TerrainLightmap.conの内容は次の通りです.適当なテキストエディタで作成して下さい.

rem
rem ******** Example of a terrain shadow creation script.
rem

GeometryTemplate.setActive patchGeometry
rem *** 4.0 is 4 pixels per meter.
GeometryTemplate.shadowPrecision 4

raytracer.init
raytracer.ambientIntensity 0.3
raytracer.blockSize 16

rem *** 1 == Trace only the nearest terrain patch.
rem *** 0 == Trace all patches.
raytracer.OnlyNearest 0

rem *** < 0, trace all pixels
rem *** Else, number of meters from moving free camera to trace the shadows. Preview tool.
raytracer.shadowsNearCamera -10.0

raytracer.light.create
rem **** Should be sun direction ***
raytracer.light.direction 0.628000/0.661000/-0.410000
raytracer.light.selfshadowing 1
raytracer.light.objectShadows 1
raytracer.light.shadowIntensity 1
raytracer.light.intensity 1
raytracer.light.fov 2
raytracer.light.viewDistance 500
raytracer.light.softness 0.0

raytracer.light.create
raytracer.light.direction 0/1/0
raytracer.light.selfshadowing 0
raytracer.light.objectShadows 1
raytracer.light.shadowIntensity 0.8
raytracer.light.intensity 0
raytracer.light.fov 45
raytracer.light.viewDistance 20
raytracer.light.>ness 0.0

ここで最も重要なのがマップでの光源(太陽)の方向です.
raytracer.light.directionの値を,作成したマップのInit\SkyAndSun.con のsky.sunLightDirectionVecに合わせます.
(他のパラメータについては分かっていないので色々と試してみて下さい.)
用意ができたらBF1942.exeのショートカットを作成し,プロパティ→ショートカットタブ→リンク先 の末尾に次の引数を追加し,実行します.
+game FHSW +workingFolder "ShadowWork" +traceTerrainShadows "bf1942\levels\MAPNAME" "ShadowWork\bf1942\levels\MAPNAME\textures"
実行が終了すると,名前の末尾に_lgtが入ったtgaファイルが
EA GAMES\Battlefield 1942\ShadowWork\bf1942\levels\MAPNAME\Textures\ に作成されます.
このファイルが地面の影の情報を持っています.

3) 次に地面のテクスチャと影の情報をマージします.まずTerrainPalette.palを
EA GAMES\Battlefield 1942\ShadowWork\bf1942\levels\MAPNAME\Textures\ に追加します.
このファイルはObjects Lightmapsが有効で,雰囲気の似ているマップからコピーしましょう.
このファイルはPalette.palと同じくPhotoshop等で編集できるようです.
用意ができたらBF1942.exeのショートカットを作成し,プロパティ→ショートカットタブ→リンク先 の末尾に次の引数を追加し,実行します.
+game FHSW +workingFolder "ShadowWork" +mergeTerrainShadows "bf1942\levels\MAPNAME\ 1.5 0.4"
実行が終了すると,Mergedフォルダが EA GAMES\Battlefield 1942\ShadowWork\bf1942\levels\MAPNAME\Textures\ に追加されます.
このフォルダ内部のマージされた.tgaファイルを,.ddsファイルに変換して,マップのTexturesフォルダに上書きします.

タイトルとURLをコピーしました