ここはまさに 「地形万華鏡OS=惑星生成エンジン」 を
Python モジュールとしてどう分割するかという“OS設計の核心”だね。
ここで一度 2026年版の正式なモジュール構造案を提示するよ。
これは「責務分離」「階層構造」「拡張性」「Roblox との境界」を
すべて満たすように設計してある。
🧭 地形万華鏡OS:Python モジュール構造(2026版)
以下は OS レイヤー構造そのままを Python パッケージに落とした形。
terrain_kaleidoscope/
│
├── planet/ # 惑星パラメータ・座標系
│ ├── parameters.py
│ ├── planet_space.py
│ └── octaspace.py
│
├── noise/ # ノイズ空間(大陸・山脈・侵食・湿度・気温)
│ ├── fbm.py
│ ├── ridge.py
│ ├── humidity.py
│ └── temperature.py
│
├── height/ # 連続標高関数(HeightSpace)
│ └── heightmap.py
│
├── terrain/ # 地形分類(海・陸・山・河川)
│ └── terrain_type.py
│
├── biome/ # 生態系分類(BiomeSpace)
│ └── biome_type.py
│
├── chunk/ # ChunkSpace(256×256)
│ ├── chunk_index.py
│ └── chunk_sampler.py
│
├── export/ # Roblox 用 PNG 出力
│ ├── png_heightmap.py
│ ├── png_materialmap.py
│ └── material_mapping.py
│
└── roblox/ # 表示OS(Roblox Lua との境界)
└── writevoxels_template.lua
🧩 各モジュールの責務と主な関数名
🟥 planet/
惑星の「基礎OS」。座標系とパラメータ。
parameters.py
class PlanetParameters:
seed: int
radius: float
sea_level: float
pixel_size: float
axial_tilt: float
solar_intensity: float
plate_activity: float
planet_space.py
def latlon_to_vector(lat, lon):
def vector_to_latlon(vec):
octaspace.py
def vector_to_octa(vec):
def octa_to_vector(U, V):
🟦 noise/
惑星の「地殻活動OS」。大陸・山脈・侵食・湿度・気温。
fbm.py
def fbm(U, V, freq=1.0, octaves=4, seed=0):
ridge.py
def ridge_noise(U, V, freq=6.0, octaves=5, seed=0):
humidity.py
def humidity_noise(U, V, seed=0):
temperature.py
def temperature_noise(U, V, seed=0):
🟩 height/
HeightSpace=惑星の「連続標高関数」。
heightmap.py
def compute_height(U, V, params):
def normalize_height(h):
🟫 terrain/
TerrainSpace=海・陸・山・河川の分類。
terrain_type.py
def classify_terrain(height, slope, flow):
🌱 biome/
BiomeSpace=森林・砂漠・ツンドラ・湿地・草原。
biome_type.py
def compute_temperature(lat, height, params):
def compute_humidity(U, V, params):
def classify_biome(T, H, height, sea_level):
🟦 chunk/
ChunkSpace=Roblox 用 256×256 タイル。
chunk_index.py
def chunk_from_uv(U, V, chunk_size=256):
def uv_range_for_chunk(chunk_id):
chunk_sampler.py
def sample_chunk(chunk_id, height_func, biome_func):
🟧 export/
Roblox に渡す PNG を生成する。
png_heightmap.py
def export_heightmap(chunk_data, path):
png_materialmap.py
def export_materialmap(chunk_data, path):
material_mapping.py
def biome_to_material(biome, T, H, height):
def material_to_value(material):
🟪 roblox/
Roblox(表示OS)との境界。
writevoxels_template.lua
- Terrain:WriteVoxels のテンプレート
- PNG 読み込みコード
- MaterialMap の適用
🌌 このモジュール構造が OS として強い理由
✔ レイヤー構造そのまま → 破綻しない
Planet → Noise → Height → Terrain → Biome → Chunk → Export → Roblox
がそのまま Python の階層になる。
✔ 責務分離が完璧
- ノイズは noise/
- 標高は height/
- 生態系は biome/
- Roblox 接続は export/ と roblox/
✔ どのレイヤーも「関数=連続関数」
惑星生成 OS の思想がそのままコードに反映される。
✔ Roblox は「表示OS」として独立
Roblox 側は 描画するだけ。
生成はすべて外部OS(Python)で完結。
🌟 次に進めるなら…
- 各モジュールの中身を具体的に書く
- HeightSpace の公式を最適化する
- ChunkSpace → PNG Export の実装
- Roblox Lua の WriteVoxels テンプレートを作る
- OS 全体の import 構造を整える
どこから行きたいか、あなたの OS の流れに合わせて進めるよ。