ちがさねKenshi倉庫

PCゲーム、Kenshiに関するブログです。モッダーなので解析的なデータを多く扱います。

地形改変(ハイトマップ改造)MODの作り方

Kenshiではローカルフォルダ内に保存されているハイトマップという画像ファイルを編集することで地形を改変することができます。


www.youtube.com

例えばPVで紹介されているこのMODは水没したKenshi世界をイメージしたMODです。
この地形に対応した地図を作ったので、それを見ると何が起きたかわかりやすいと思います。


今回はこのような地形改変MODの簡単な作り方を解説しようと思います。
「ハイトマップなんて聞いたことがないし、作るのが大変そう......」
と思われるかもしれませんが、実はこのMODはFCSをほとんど使わなくても作れます。(アップロードするときだけFCSを経由します。)
FCSはあまり使いたくないけど自分でMODを作ってみたい方、FCSの超初歩的な操作から覚えてMOD制作を勉強したい方は、ぜひこのガイドを真似してみてください。

ハイトマップの編集方法

ハイトマップ改変MODの特徴

まずはハイトマップ改変MODの仕様の話からさせてください。

steamワークショップで公開されている大抵のMODは、サブスクライブするだけで有効化されます。サブスクライブと同時にそのMODのフォルダがダウンロードされ、ゲームを起動するとそのMODフォルダが読み込まれるようになります。
これがどのような仕組みになっているのかと言うと、MODフォルダ内部でKenshiのローカルフォルダのディレクトリ構成を再現すると、同じ位置に配置された同じ名前のファイルが自動で上書きされるようになっています。便利!

なお、ハイトマップはこのシステムの対象外になっています。
なのでMODフォルダに改変したハイトマップを入れただけでは変更が反映されません。MODを有効化するには利用者に手動でKenshiのローカルフォルダのハイトマップを差し替えてもらう必要があります。不便!

ですが一つだけこの面倒な手順を省略する方法があります。
それはRE_Kenshiというツールを使ってハイトマップのファイルパスを変更し、MODファイル内のハイトマップが読み込まれるようにする方法です。
最新版の沈没世界MODでもこの機能を導入しており、RE_Kenshiを導入済みのユーザーに限り手動でのハイトマップ置き換えが不要になっています。
詳しいやり方などはここに書かれていますが、今回はファイルパスを置き換えるための完成済みの.JSONファイルを配布するので、皆さんはそれを使ってください。
なので今回はRE_Kenshiの導入は不要なのですが、このツールは他のMODでは実現不可能な様々な機能追加を行う画期的なMODなので、まだ導入していない人は一度でいいのでダウンロードページで機能を見てみてほしいなと思います。

なお、ハイトマップ改変MODは複数同時に導入できません。ハイトマップ改変MODには魅力的ものが多いですが、混ぜることはできないのでご注意ください。

TIFF形式のファイルを編集できるソフトを用意する

ハイトマップはTIFF形式という画像ファイルです。
TIFF形式の画像を編集できるソフトは限られていますが、今回はGIMP2.0というソフトを使ったやり方を解説していきます。(バージョンは最新版で構いません。)
このソフトは取っつきにくいものの多機能で、Kenshiの3Dモデルのテクスチャーをいじるときにも使えるので、MOD制作に興味がある方は入れておいて損はないと思います。

ローカルファイルの"fullmup.tif"を編集する

ハイトマップは"fullmup.tif"という名前です。TIFF形式なのにtifっていう拡張子です。
このファイルはKenshiのローカルフォルダのkenshi/data/newland/land/fullmup.tifという場所にあります。ローカルフォルダの位置がわからない人はsteamのライブラリからKenshiのページを表示して、「ローカルファイルを閲覧」をクリックしてください。
ハイトマップを編集する前に、必ずバックアップを取るようにしましょう。バックアップ用のデータを利用者に共有するためにも、改変前のファイルを確保しておくのは大切です。

"fullmup.tif"をgimpで開くとこのようなウィンドウが出てくるかと思います(出てこなかったら少し読み飛ばしてください。)

TIFFファイルに埋め込まれたカラープロファイルを、異なるカラープロファイルに変換するかどうか確認画面が出てきます。今回は埋め込まれたプロファイルを使うので「維持」を選択してください。

※ウィンドウが出てこない場合


gimpの左上のタブで編集>設定を選択して設定ウィンドウを出しましょう。
この「画像のインポートとエクスポート」の項目でカラープロファイルポリシーが「どうするか確認する」という設定になっていると、TIFFファイルのようなプロファイルを含む画像を読み込んだ時に先ほどの画像の確認ウィンドウが出ます。
この項目を「埋め込まれているプロファイルを使う」という設定に変えると確認ウィンドウをスキップしてプロファイルが維持されるようになります。この設定にしても大丈夫です。
先ほど確認ウィンドウが出なかったのに「埋め込まれているプロファイルを使う」という設定になっていなかった場合は、上記二つのうちどちらかの設定に変えてからハイトマップをもう一度読み込みなおしましょう。

ハイトマップの見方とgimpの操作方法

ハイトマップを開くとこんな感じになると思います。


画像の白い部分が標高の高い地域、黒い部分が低い地域です。

ハイトマップは白黒の画像で、RGBのチャンネルを持たず明度のチャンネルのみを持っています。どういうことかというと、RGBが値がすべて同じ色だけで構成されていて、白から黒の明るさ(明度)によって表現されています。
私たちが白黒以外の色を追加しようとしても自動で白黒に変換されます。変換を介すと狙った色を出すのが大変なので、色を付ける時はRGBが同じ色を選びましょう。

作業を始める前にピクセル情報ダイアログをドッキングしておくと便利です。左上のタブでウィンドウ>ドッキング可能なダイアログ>ピクセル情報を選択します。すると画面右上にこのようなダイアログが追加されます。

このウィンドウにはカーソルの当たった部分の色情報が表示されます。現在はRGBが%で表示されていますが、これは0~255の数値を%に直したものです。表示を変えることもできるので、今後は0~255の数値で説明をしていきます。
それとここから先の解説では、例えばRGBの値がすべて100になっているような色は明度100の色と呼んでいきます。

編集方法と編集例

ここまで話をしてうすうす察している人もいるかもしれませんが、ハイトマップ改変MODにはgimp等の操作技術だけではなく、制作したいMODのアイデアが必要になります。
今回はいくつかの改変例を挙げてその作り方も解説していきますので、参考にしてみてください。

例1:フラットワールド

まずはシンプルに、山や海などの凹凸が一切存在しない平面の世界を作ってみます。
gimpを開いたら左上のツールボックスから塗りつぶしを選択し、カラーパレットで適当な色を選びます。(RGBを同じ値にしてください。)塗りつぶしの設定でしきい値を最大にして画像をクリックすると、カラーパレットの色で塗りつぶしが行われます。
完成するとこんな感じで、一色で塗りつぶされた画像が完成します。
あとはエクスポートを行って、この画像をTIFFファイルとして出力すれば作業は完了です。エクスポートの方法は少し後の章で解説します。

ちなみにKenshi世界における海の高さは0~255のうち2.1の高さです。明度が2.1より暗い色でマップを塗った場合、例外なくその場所は水没します。
明度が2.1のフラットワールドを作ると、地面と海水面が完全に一致して地面の見た目がバグります。こんな感じです。

ここでハイトマップ改変MODを作るうえで最重要の注意点について説明しておきます。街の壁や住居などの建物は、地形を改変させるとその地形に合わせて縦横の座標はそのまま高さの座標を自動で調整し、地表面の真上に建物が移動します。
しかし、マップ上に配置されている橋や古代の建造物、特徴的な木や岩などの地形の装飾物のようなオブジェクトは地形を改変しても座標が変わりません。そのため地形によっては地面に埋もれて完全に見えなくなったり、宙に浮いたりします。



先ほどのツイートの動画では岩が地面から飛び出しているのが確認できると思います。バニラのマップではこの岩は地形の一部として目立たないように配置されていたのですが、地形の改変により地面が沈下し、岩が浮き上がることで隠れていた部分が露出し、地面から飛び出してしまいました。
このような地形の装飾物をFCS上でMAP_FEATURESと言います。MAP_FEATURESが改変した地形の見た目を台無しにしてしまう問題の解決法は、すべてのMAP_FEATURESを手動で自然な位置に修正するか、FCSからすべてのMAP_FEATURESを削除するかの二択です。詳しい対策についてはまた後の章で解説します。

さて本題の標高の話に戻りますが、明度が2.0だと足首がつかる位の水の高さになり、そこから数値を下げるとどんどん底が深くなっていきます。最低の値は0なので、それ以上深くすることはできません。バニラのハイトマップだとマップを囲う海の大部分は明度0で、真っ平らなエリアだったりします。
逆に明度の最高は255まで上げることができます。バニラのハイトマップだとロイヤルバレーの山の部分が230前後です。この場所のように明度差を急激に変化させた場所では標高の変化も急激になり、坂の上に上がれなくなったり山の下に降りれなくなったりします。

例2:フラットワールド(海と川を残す)

さっきのアイデアの応用で、バニラのマップで海と川になっているところ以外をフラットワールドにします。すなわち、明度が2.1以下のエリアには手を加えないようにしてフラットワードを作ります。

まず左上の「選択」タブから「色域を選択」をクリックします。続いて画面左側の「色域を選択」の設定からしきい値を2.1に設定します。
そうしたらマップ上の海の部分で明度が0になっているピクセルをクリックします。(カーソル位置の標高はピクセル情報ダイアログから確認します)


すると、こんな感じで明度が2.1以下のエリアだけが選択されます。今回手を加えたいのは明度が2.1以上のエリアなので、「選択」タブから「選択範囲を反転」をクリックします。
そしたら最後にツールボックスから塗りつぶしを選択し、カラーパレットでRGBが2.2の黒色を作ります。(2.1で塗りつぶすとさっきの不具合が起きるので2.2にします)
塗りつぶす範囲を選択範囲に設定し画像をクリックするとこのようなハイトマップが完成します。


ただの真っ黒な画像に見えますが、画像をエクスポートしてハイトマップを差し替えるとこんな感じになります。

ちょっとわかりにくい画像になってしまいましたが、地面が平面になっているのに水の中は緩やかに深くなっていくので自然な地形に感じます。
みんな大好きな拠点におススメのエリアはこんな感じになりました。

例3:特定の地域の海を埋め立てる

以上のアイデアをさらに発展させて、特定のエリアだけを選択してその地域の標高を変えてみましょう。
今回は特定の地域の湖を埋めるマップと、特定の山を削るマップを作ってみます。まずは湖を埋めるマップを作っていきます。

今回はみんな大好き、初心者におススメのガットの海を埋め立てて、拠点を建てる立地を増やすMODを作ってみようと思います。
例2の方法で明度2.1以下の地域を選択して、ハイトマップ上のガットを拡大してみてるとこんな感じになっています。白枠で囲まれている場所が海という訳ですね。

白枠で囲まれている世界全体の海の中で、ガット地域の海だけを選択します。ツールボックスからなげなわ選択を選び、設定のモードから「現在の選択範囲との交差部分を新しい選択範囲にする」を選択します。このモードでガットを囲んで選択すると、ガットの海だけが選択されるようになります。


今回はガット沿岸の島をつなぐような感じで投げ縄選択を行い、海岸線が自然に見えるように埋め立てをしてみました。
あとは例2と同様、カラーパレットで明度が2.2の黒色を作って選択範囲の塗りつぶしを行います。これで完成です。

エクスポートして差し替えるとこんな感じになりました。


ノーフェイスさんのキャンプが海岸沿いの立地になっていました。景色がいいし海も見えるし、ここでのキャンプは楽しそうですね(笑)

例4:沈没世界MODを作る

最後にトーンカーブという機能を使って、特定のエリアの標高をなだらかに変化させる方法を解説したいと思います。私の沈没世界MODは、海水面の高さが上昇したかのような見た目の地形になっていますが、実は世界全体の標高を20ほど下げて、標高20以下の地域を水底に沈めています。具体的にはトーンカーブを使って以下の処理を行っています。
・明度が0~20のエリアを沈没させるため、その地域の明度を0~2.1に下げる。
・明度が20~255のエリアを上のエリアに接続させるため、その地域の明度を17.9づつ下げる。
今回はこの二つの処理をやっていきます。

トーンカーブ機能は左上の「色」タブの「トーンカーブ」から開くことができます。すでに領域を選択している場合は選択範囲内にだけ変更が反映されます。


トーンカーブウィンドウの中央にはグラフがあります。横軸(X)が現在の明度、縦軸(Y)が編集後の明度です。デフォルトだと二つの値は一致しているのでX=Yの一次関数のグラフが描かれています。エリアは明度ごとに区切られているので、特定の標高のエリアを選択してその場所の標高を上げ下げするような操作方法になります。(突然数学の話になってしまい申し訳ありません。アレルギーを持っている人もいると思いますが、中学数学以上の話はしないのでもう少しお付き合いください。)
グラフの横軸は現在の標高グラフの枠内をクリックすると点が追加され、中央の白い線がその点を通るように歪みます。
試しにX=50,Y=75の点を置いてみました。


これで明度が50%(RGBが127)のエリアが75%(RGBが190)になり、25%標高が上昇しました。そしてこのエリア以外の世界全体の標高も少しづつ上昇しており、明度が127のエリアで標高の上昇が最大になるように0~24.9%標高が上昇しました。

説明が終わったところで、実際に沈没世界MODを作ってみます。まず明度が0~20のエリアを0~2.1に沈下させます。沈下前の明度である20/256は7.8%で、沈下後の明度である2.1/256は0.8%なので、X=7.8,Y=0.8のポイントに点を打ちます。点の位置はグラフの下の入力・出力欄から移動することができます。
これで沈下前に明度20以下だったエリアは、元の地形の凸凹をある程度残した形で2.1以下まで沈下しました。

続いて、明度20~255のエリアを17.9づつ沈下させます。明度20のエリアは明度2.1まで沈下しているので、それに合わせて他の場所も17.9づつ沈下させるわけです。
255-17.9は237.1で、237.1/255は93.0%です。グラフの線をクリックするとそこに新しい点ができるので、その点をX=100,Y=93の場所に移動させます。


これで沈没世界が完成しました。OKボタンで変更を確定させましょう。
ちなみにですが、私が沈没世界MODを作ったときはトーンカーブの仕様をよくわかっていなかったので、明度の計算などはせず適当にトーンカーブを弄って、割とめちゃくちゃな地形改変が行いました。なのでこの記事が上がることにはちゃんとしたハイトマップに差し替えておきます。

トーンカーブは選択範囲だけを対象にすることもできるので、特定の山をなだらかにしたり谷を埋めたり、様々な使い道があります。沈没世界MODのマイナーチェンジで、明度20より高いエリアも沈没させてしまうMODというのも面白いでしょう。塗りつぶしとトーンカーブで大体のアイデアは実現できるようになるので、皆さん好みのカスタムマップを作ってみてください。

最後に、TIFFファイルはエクスポートしたときにレイヤーの情報を保存してしまうのですが、追加したレイヤーを統合して作ったマップにもレイヤー情報が残り、このハイトマップをゲームで使おうとするとエラーが発生します。
レイヤーの追加自体は問題ないのですが、統合だけはしないようにしてマップを編集してください。

エクスポートの方法

ハイトマップの編集が完了したらエクスポートを行いましょう。左上の「ファイル」タブから「名前を付けてエクスポート」を選択します。ファイル形式はTIFF画像を選択しエクスポートをします。


エクスポート時にはこのようなダイアログが出てきます。画面の通りに設定してください。
特に、圧縮方法は「圧縮しない」、「Export in BigTIFF......」のチェックを外す、「サムネイルの保存」のチェックを外す設定をするのは忘れないでください。

出力が終わったらハイトマップの差し替えを行います。作成したTIFFファイルのコピーを取り、fullmap.tifにリネームしてkenshi/data/newland/land/fullmup.tifを上書きします。バニラのfullmup.tifを保存しておかないとアンインストールするとき整合性チェックが必要になるので注意してください。

MAP_FEATURESについて

ハイトマップを差し替えてKenshiを起動すると、MAP_FEATURESの岩や木が宙に浮いているか地面に沈んでいる状態になっていると思います。また、0からマップを作り変えた場合はバニラの街の建物が海に浮いていたり、邪魔な場所に生成されていると言う事もあるでしょう。後者の場合はこのようなFCS講座の動画などを参考にして開発者モードで建物と街判定を移動、削除してください。

MAP_FEATURESのオブジェクトに関しても、開発者モードを使って一つ一つ削除・位置を修正するのも可能ではありますが、世界中に点在するMAP_FEATURES数は膨大なので現実的ではありません。それならいっそFCSでMAP_FEATURESアイテムをすべて削除してしまうほうが現実的でしょう。
これはFCSでMODを作って(新規MODの作成方法)、Biomes>Map Featuresに入っているアイテムをすべて削除すれば作業終了です。大体のMAP_FEATURESは影が薄いので、無くなっても利用者には違和感すら持たれないと思います。

FCSを使わないといけないなんて最初の話と違うじゃねーか!
とお怒りの方もいるかもしれませんが、ご安心ください。この後の章でMAP_FEATURESアイテムを削除するMODを公開します。このMODをベースにすればFCSでの作業は不要です。

先ほども言った通り、大体のMAP_FEATURESは影が薄いですが、例外としてヴェンドにある巨大な橋などの構造物は明確に機能があるので、なくなるとユーザーに不便を強いることになります。元の地形を生かしたハイトマップ改変なら、こういうものだけFCSで削除せずに残して開発者モードから位置を移動させたほうがいいかもしれません。完全に地形を作り変えているとしても、橋は経路としての使い勝手がいいので要所要所に追加したほうが良いです。
MAP_FEATURESは一般に開発者モードで位置を編集できないと言われていますが、これは誤りです。確かに開発者モードの「MOD保存」ボタンを押してもMAP_FEATURESのデータは保存されませんが、保存するMOD欄で自分のMODを選択した状態でそのエリアからカメラを遠ざけると、MAP_FEATURESが読み込み範囲外に出たタイミングで座標の変更を保存するかどうかを聞くダイアログがでます。これにOKを押すと変更が保存されます。
(※修正)
上記の方法でMAP_FEATURESの位置を調整しても、調整した内容はMODフォルダの中でなくプレイヤーのローカルフォルダ内のいずれかのファイルに保存されるようです。なので今のところ、座標を調整してもその内容をMOD利用者と供給できません
現在、具体的なデータの保存場所を調査中です。新しい情報があれば追記します。

座標を調整したほうが良い重要なMAP_FEATURESの配置場所を、私の思いつく限りで以下に記載します。(ほかにもあったらコメントください)
橋のある場所
・ヴェンド
・アイアンバレー全域
・ブラックデザートシティ(ボロ小屋までの道)
・フィッシュマンアイランドに行くための橋(二か所)
カニバル平原の怪しい研究所にわたるための橋
・リバース鉱山の木製の橋(二か所)
ゲームの世界観の上で重要なMAP_FEATURES
・オビディエンスにある巨大スケルトンの腕
・クラッグの岩陰に座っている巨大スケルトン(ストーブ)
・アークの近くに突き刺さっているロケット
・キャットロンエグザイル上空の謎の装置
・リバース鉱山のフェニックス像
その他
・MAP_FEATURESではなく建物だが、ボーダーゾーンの川沿いにある橋のシールドブリッジは位置がズレがちなので調整したほうが良い。

MODの公開方法

新規MODの作成方法、ワークショップへの公開方法についてはこちらのトップページを見てください。RE_Kenshiのユーザー向けにファイルパスを変更しなくていいのであれば、MODフォルダの中に改変したハイトマップを入れて公開ボタンを押せばMODは完成です。
この場合は必ず、ハイトマップ差し替えの手順について説明文に記載するようにしましょう。説明が面倒であれば沈没世界MODのMOD説明文をコピーして、ちょちょっとファイル名などを自分のMODに合わせてペーストしても構いません。

RE_Kenshiを使ってハイトマップ改変MODの導入を簡単にする

RE_Kenshiの機能の一つに、ファイルパスを変更するという機能があります。この機能に関してはこちらのページの説明をご覧ください。

github.com

一応この記事の通りにやってもらえればファイルパスを変更するための.JSONファイルが作成できるんですが、記事の内容がよくわからなかったという人に向けてひな形となる.JSONファイルを配布します。一つ下の章にドライブのリンクを貼っているので、ダウンロードしてから続きを読んでください。

配布した.JSONファイルの編集方法

配布したフォルダ内の"RE_Kenshi.json"を選択し、「プログラムから開く」でメモ帳アプリを使って開きます。

{
    "FileRebinds" : {
        "data\\newland/land\\fullmap.tif" : "$(modroot \"ここにMOD名を入力\")/ここにカスタムハイトマップ名を入力.tif"
    }
}

ファイルの中身はこのようになっています。コードの「ここにMOD名を入力」の部分と「ここにカスタムハイトマップ名を入力」の部分を皆さんの環境に合わせて書き換えてください。


書き換えたらこういう感じで、JSONファイルとカスタムハイトマップをMODフォルダの中に保存します。
これで作業は終了です。RE_KenshiユーザーがMODをサブスクライブすると自動でファイルパスが変更されてカスタムハイトマップが読み込まれます。
このまま公開しても大丈夫ですが、一応RE_Kenshiユーザー以外の利用者のことも考えて、手動でハイトマップを差し替える方法を説明しておくのが良いでしょう。説明が面倒であれば沈没世界MODのMOD説明文をコピーして、ちょちょっとファイル名などを自分のMODに合わせてペーストしても構いません。

記事内で制作したハイトマップ、JSONファイルの配布

記事内で制作したすべてのハイトマップと、RE_Kenshiユーザー用にファイルパスを変更させる.JSONファイルのひな型、MAP_FEATURESを削除するMODをこちらのリンクから配布しています。それぞれのデータの説明はフォルダ内のメモをご覧ください。

drive.google.com

※ハイトマップのファイルサイズがやたら大きいせいでダウンロードに時間がかかります。
※同梱したハイトマップはLo-Fi Gamesの著作物を改変したデータですので、KenshiのMOD開発以外の目的で使用、配布しないでください。
※配布したハイトマップに手を加えずに再配布する行為を禁止します。

クレジット

沈没世界MODの製作とこの記事の執筆に関して、王鯵のロールプレイさんよりご指導を頂きました。王鯵さんは私が沈没世界MODを公開する以前から、ハイトマップ改変MODの「After Kenshi MOD」を公開されています。興味のある方は下の動画の概要欄からワークショップに飛んでみてください。

www.youtube.com