断層形成アルゴリズムを使用して惑星のテクスチャを生成する







おそらく、誰かが素晴らしい古い学校の宇宙ゲームStar Control 2を覚えているでしょうあるとき、私は、展開中の地球規模の大惨事を背景に探検されるべき未知の惑星を持つ巨大な星の地図に衝撃を受けました。 著者がソースコードを公開して以来、このゲームは新しい名前The Ur-Quan Mastersで最新のプラットフォームに移植されています。



ソースを調べてみると、惑星のテクスチャを生成する単純なアルゴリズムを発見し、同様のテクスチャを生成できるPythonプログラムを作成しました。





アルゴリズム



  1. 断層形成アルゴリズムを使用して高さマップを形成します( 「断層形成」
  2. 参照RGBカラーとそれらの間のグラデーションを使用して高さマップに色を付けます


高さマップの形成



  1. 生成された惑星のテクスチャと同じ次元の高さのマトリックスを作成します。 北は上、南は下、そしてマトリックスの水平線は惑星の平行に沿った円形スキャンです。 高さの値は0から255までしか変更できないため、グレーの濃淡で表示すると便利です
  2. マトリックスをベース標高で埋めます(例:128):





  3. 北から南へ2つのランダムなばらばらの線を生成します。 これらの線は「断層を形成します」-惑星の表面を2つの部分に分割します。1つは固定定数( 標高デルタ )に上げ、もう1つは同じ定数に下げます。 わかりやすくするために、定数を10にします。





  4. 前の段落を指定された回数繰り返しますiterations num )。

    以下の図では、10回の反復、100回の反復、1000回の反復:





















RGBカラーで高さマップを着色する



  1. 高さの範囲全体(0から255)を、これらのパーツの境界上のN + 1の参照ポイントを使用して、N個のほぼ等しいパーツに分割します。
  2. 範囲の各参照ポイントのRGBカラーを設定します
  3. 範囲のすべての中間点のRGBカラーを計算し、アンカーポイント間の色成分を線形補間します。 つまり、高さを参照色間のグラデーションで塗りつぶします
  4. 惑星のテクスチャを生成し、DEMの各セルを前の段落で計算されたRGBカラーに置き換えます


同じ高さマップを着色するためのいくつかの可能なオプションは次のとおりです。

















プログラム



プログラムを実行するには、 Python 2.7とそのためのいくつかのライブラリ( NumPyPIL 、およびPyOpenGL)をインストールする必要があります



プログラムはgitリポジトリからダウンロードできます: https : //github.com/barabanus/starcontrol



このプログラムは、 planet.py (テクスチャを生成)とspace.py (テクスチャを重ね合わせた回転する惑星を描画)の2つの独立したスクリプトで構成されています。



いくつかの管理機能:

このプログラムはMacOSで作成され、WinXPでテストされました。 コードの誤りを見つけて修正したり、レンダリングを装飾したりする場合は、変更を書いて提案してください。




All Articles