地形エディタをつくる #2

公開 更新

環境:Claude Code (Fable 5.1)

地形エディタを作り直している。以前はカラーグラデーションで地形を表現していたが、今回はマテリアルの色や質感に加え、ハイトマップの凹凸も取り込み、地形の形づくりと表面の仕上げをひとつのグラフで扱うことを目指している。

概要

今回のエディタでは、Megascansのように複数のテクスチャがセットになったマテリアルを組み合わせる。ベースカラー、法線、ラフネス、メタルネス、AO、ハイトを扱い、マテリアルごとの凹凸や質感を地形に生かしていく。

ノードをつないで処理を組み立てるグラフの仕組みは、以前試作した地形エディタが土台になっている。浸食や堆積の処理も以前の実装から移植し、マテリアルの合成と組み合わせながら改良を続けている。

仕様

描画と合成には DirectX 12、UI には Dear ImGui、ノードの編集には imgui-node-editor を使っている。この構成は以前のエディタと同じ。

ノード間で受け渡すのは、地形の高さを表すハイトマップ、色や質感の情報をまとめたマテリアル、処理をかける範囲を指定する白黒のマスク、線の形を持つパス。それぞれを接続し、地形の加工とマテリアルの合成を組み立てる。

地形とマテリアルを組み合わせる

マテリアルのハイトマップを、地形の凹凸として取り込めるようにした。着目したのは、自然の形には、スケールが違っても似て見えるものがあること。岩肌の細かな起伏が山の尾根や谷を思わせたり、苔の広がりが上空から見た森林のように見えたりする。

ここでは、厳密に同じ形が繰り返されるという意味ではなく、大小の形に共通する凹凸や模様を「フラクタル的な見え方」として捉えている。その類似を手がかりに、マテリアルの細かな起伏を、より大きな地形の起伏として読み替えて使う。

マテリアルを地形の表面に貼るだけでなく、地形そのものをつくる材料として扱うことが、今回の試作の中心になっている。

浸食と堆積

マテリアルから取り込んだ凹凸には、浸食や堆積の処理を組み合わせる。岩が崩れて砂礫になり、低い場所へ移動して堆積するといった流れは、以前のエディタから引き継いでいる。

今後は、流れによって地形が変わる様子を扱うノードも増やしていきたい。マテリアルが持つ形を出発点に、崩壊や流動による変化を重ねて、地形をつくっていく。

河川

今回は、河川の表現にも力を入れていきたい。谷筋に沿って水が流れることで、地形の起伏と水の通り道の関係が見え、風景としての説得力が増す。

特に表現したいのは、逆光で水面がきらりと輝く様子。太陽を正面に見るような角度で、水面にスペキュラー反射のハイライトが現れると、遠景の中でも川の流れが目を引く。地形の形だけでなく、光を受けた水面の見え方にもこだわりたい。

パスの仕組み

地形の上に線を引くパスの仕組みも、以前のエディタから引き継いだ。今回は、一本の線に加えて、分岐を持つネットワークも作れるようにした。

ビューポート上で点を置き、向きのある線でつないでパスを描く。Mask Path ノードでは、その線に幅と境界のぼかしを与え、白黒のマスクへ変換できる。

線で指定した経路を、処理をかける範囲として使える仕組みだ。河川や氷河、道など、地形の中で流れや経路を決めたい場面に活用していきたい。

これから

いまは、地形の加工とマテリアルの合成をひとつのグラフでつなぐところまで動いている。ここから実際に地形を作りながら、必要なノードや調整方法を詰めていきたい。

現時点で主に想定しているのは、遠景として眺める地形。カメラを近づけ、地表を自由に歩き回れるようにするには、近くで見たときの細部まで扱える構造を考える必要がある。遠景と近景をどうつなぐかは、まだ模索している。

← 記事一覧へ