ここから BiomeSpace → Roblox TerrainMaterial の正式マッピングを OS として定義していくね。
これは「惑星の生態系(意味レイヤ)」を「Roblox の物質(表示レイヤ)」に落とす作業で、
外部OS(地形万華鏡)と Roblox(表示OS)の境界を決める最重要ポイント

ここを決めると、Roblox 上で 森・砂漠・ツンドラ・湿地・草原・山岳 が自然に出現する。


🟦 BiomeSpace → Roblox TerrainMaterial マッピング(OS仕様)

Roblox TerrainMaterial は種類が限られているので、
BiomeSpace の意味を 最も近い物質に写像する

以下は OS として破綻しない最適マッピング。


🌲 forest → Grass(+一部 Mud)

森林は地表が柔らかく、草と土が混ざる。
Roblox の TerrainMaterial では Grass が最適。

  • forest → Grass(基本)
  • forest(湿度高)→ Mud(オプション)

🏜 desert → Sand

砂漠は迷わず Sand。
Roblox の Sand は広域に敷いても破綻しない。

  • desert → Sand

tundra → Snow(+Rock)

ツンドラは寒冷地で、地表は薄い雪と岩。
Roblox では Snow が最適。

  • tundra → Snow
  • tundra(標高高)→ Rock(オプション)

🌾 grassland → Grass

草原は森林より乾燥しているが、物質としては Grass。

  • grassland → Grass

🐟 swamp → Mud(+Water)

湿地帯は泥+浅い水。
Roblox では Mud が最適。

  • swamp → Mud
  • swamp(height < sea_level)→ Water(オプション)

🏔 mountain → Rock(+Snow)

山岳は岩が基本。
標高が高い場合は Snow に切り替える。

  • mountain → Rock
  • mountain(height > 0.9)→ Snow

🧩 Biome → Material の正式テーブル(OS仕様)

biome Roblox Material 条件
forest Grass 基本
forest(湿度高) Mud H > 0.8
desert Sand T > 0.6 & H < 0.3
grassland Grass デフォルト
tundra Snow T < 0.3
tundra(標高高) Rock height > 0.6
swamp Mud H > 0.7 & height < sea_level+0.05
swamp(浸水) Water height < sea_level
mountain Rock height > 0.75
mountain(高山) Snow height > 0.9

🟩 Python 実装(Biome → Material)

def biome_to_material(biome, T, H, height, sea_level=0.48):
    if biome == "forest":
        return "Mud" if H > 0.8 else "Grass"

    if biome == "desert":
        return "Sand"

    if biome == "grassland":
        return "Grass"

    if biome == "tundra":
        return "Rock" if height > 0.6 else "Snow"

    if biome == "swamp":
        if height < sea_level:
            return "Water"
        return "Mud"

    if biome == "mountain":
        return "Snow" if height > 0.9 else "Rock"

    return "Grass"

🟦 Roblox 側の MaterialMap(0〜255)への写像

Roblox は PNG のピクセル値を 0〜255 で受け取るので、
OS 側で Material → 数値 を決める。

例:

Material value
Water 10
Sand 20
Mud 30
Grass 40
Rock 60
Snow 80

OS 側で:

material_value = {
    "Water": 10,
    "Sand": 20,
    "Mud": 30,
    "Grass": 40,
    "Rock": 60,
    "Snow": 80
}

🧠 これで OS → Roblox の境界が完全に定義された

  • 外部OS(地形万華鏡)
    → BiomeSpace を計算
    → MaterialMap(PNG)を生成
  • Roblox(表示OS)
    → PNG を読み込む
    → Terrain:WriteVoxels で描画する

責務が完全に分離され、
OS の拡張性が最大化される。


🌟 次のステップはどれに進めたい?

  1. ChunkSpace → PNG Export の実装
  2. Roblox Lua の Terrain:WriteVoxels の最終化
  3. BiomeSpace の細分化(サバンナ・タイガ・ステップなど)
  4. 河川(RiverSpace)を BiomeSpace に統合する

Roblox 接続を最速で動かすなら 1 → 2 の順。
どちらから行くか、あなたの OS の流れに合わせて進めるよ。