CSLハイトマップ

フォーラムとかに情報はあるのだけれど、場所忘れそうなので…

C:SLのマップの標高は0から1024mまでらしい1。んでデフォの水面高さが40mだから、海抜で984mまでが高さの限度となる。まあ水面を下げればより高いところまで表現出来るけれど、あんまり下げると水面から底が見えて見栄えが良くないので…。

地形生成にはハイトマップを使うのだけれど、フツーの8bitグレースケールだと256階調だから、1024mの高低差を表現するにはあまりにもお粗末2な精度。そんなわけでグレースケールの単チャンネルで16bit精度をもつpngとかを使うことが推奨されている。ただこいつを扱えるソフトがあんまり無くて、フリーだとgimp2.9でどうやら扱えるらしい。安定版の2.8だと扱えないので注意。

水平精度については、ハイトマップの解像度が1081*1081 pxで、1 cell = 8*8 m2、1 Region = 240*240 cells = 1920*1920 m2として、マップ全体(= 9*9 Regions)だと17280*17280 m2となるから、1 px四方あたり大体16 m四方(= 2*2 cells)くらいの精度。国土地理院の基盤地図情報を使うなら、5mメッシュで十分な情報量ってことになる。10mでも十分だろうなあ。

ただ基盤地図情報を用いる場合問題になるのは、ビュワーのFGVが16bit精度の画像生成に対応していないこと。これでは折角元データが高精度でも、一旦8bit精度に落としてしまうことでそれが何の意味も果たさなくなる。これは困る。

そこで一つの解決策は、FGVからの画像出力を高さ毎に分けること。例えば、海抜0から50mまでを256階調3で出力すれば、随分と高い精度が得られる。これで、微細な高低差が重要な平野部と、わりとどうでも良い山岳部とでおおざっぱに区切れば、ちょっとマシなのが出来るかも?ちなみに16bit精度そのままを再現するためには、高さ4m毎に区切らなければならず、例えば標高400mの山があるならば100回区切らないといけなくなる。ちょっと非現実的。というかやっぱbit数で倍は大きい。

ここまでで地上部は大体それっぽくなるんだけれど、更に問題になるのは水域。基盤地図情報だと川と湖が一緒になっていたりして、農業用の小さなため池とかそんなのも全部水域になってしまってる。とりあえずこいつらはマップの実用的にジャマなので虱潰し的に消す。残った川の部分で、かつ水底が海抜0m以下のところは、水が流れるように、かつ堤防を越えて地上に浸食しないように、絶妙な「掘り」を入れないといけない。下のレイヤーから一定量だけ減算、という形にすれば、スロープも元の水面通りになって良いかも。

そんなわけで、以上のことを踏まえて松山マップを作ってみた…んだけれど、結論からいうとダメだこりゃって感じ。

ハイトマップの区切りは、高さ50cm精度を出すべく最初は0-127mで作成。次の高さは少しオーバーラップさせて、120mから247m 、次が240mから487m、480mから967mとして、四枚画像を作成。後はGIMPでトーンカーブを調整して綺麗なグラデーションを作る。実際は7mだけオーバーラップさせてても、所々穴が出来るので、それを埋める意味で0mから967mレンジの画像も作っておいて、レイヤーの一番下に入れておく。

こうして出来た16bit精度のレイヤー群の可視部分を新規レイヤーとしてコピー。水域情報を上からかぶせて、任意m分の明るさの単色にし、下のレイヤーから減算。これで中州とかそういう場所も一応再現できる。

こうして画像を出力して、CSLで読み込むと松山マップが完成。パッと見はよさげだけれど、実際はダメダメ。具体的には川がダメ。

重信川は淀川や吉野川や利根川やなんかみたいな川と違ってごくごく浅い川で、川幅に対して実際に水の流れてる領域が凄く狭い。実に日本的な川で絵になるんだけれど、これがCSLの水表現と相容れない。CSLは水に関しては実際のスケールに対してかなり大きめ4だから、重信川のようなチョロチョロ流れる川は非常に苦手。というか無理。ついでに日本の川の川幅に対して、CSLのTerrainメッシュが荒すぎ。所々ドットが欠けるせいで川が途切れてるし。

勿論川をもっと深くしてやれば大丈夫なんだけれど、それじゃ重信川じゃ無い。松山っぽいマップ止まり。そういうのはちょっと嫌なんだよなあ。

以上、時間かかったのに何の実りも無かった悲しい報告でした。CSLでマップを作るときは、大きな川でないと再現出来ません。うん。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です