了解。
ここでは 地形万華鏡 OS の NoiseSpace の心臓部である

fbm(U, V, freq, octaves)
(Fractal Brownian Motion:フラクタルノイズ)

OS として破綻なく使える Python 実装で示すね。

これは「惑星=連続関数」OS の中で

  • 大陸ノイズ
  • 山脈ノイズ
  • 湿度ノイズ
  • 気温ノイズ
    を全部支える基礎関数。

🌋 fbm(Fractal Brownian Motion)とは

fbm は:

  • 周波数を倍々に上げながら
  • 振幅を半分にしながら
  • ノイズを重ねていく

という 連続ノイズの合成関数

惑星生成では 大陸の形・山脈の骨格・侵食の細部 を作るために必須。


🧩 Python:fbm(U, V, freq, octaves) の OS 仕様実装

以下は 地形万華鏡 OS にそのまま組み込める
最小で破綻しない fbm 実装。

import numpy as np

# --- 基本の 2D ノイズ(Perlin でも Simplex でも可) ---
# ここでは簡易版の value noise を例示
def noise2d(x, y, seed=0):
    np.random.seed(int(x*73856093 ^ y*19349663 ^ seed) & 0xffffffff)
    return np.random.rand() * 2 - 1  # -1〜1

# --- Fractal Brownian Motion (fbm) ---------------------------
def fbm(U, V, freq=1.0, octaves=4, seed=0):
    """
    U, V : OctaSpace の座標(0〜1)
    freq : 初期周波数
    octaves : 重ねる回数
    """
    value = 0.0
    amplitude = 1.0
    frequency = freq

    for i in range(octaves):
        # ノイズサンプル
        n = noise2d(U * frequency, V * frequency, seed + i)

        # 振幅をかけて加算
        value += n * amplitude

        # 次のオクターブへ
        frequency *= 2.0     # 周波数を倍に
        amplitude *= 0.5     # 振幅を半分に

    # -1〜1 を 0〜1 に正規化
    return (value * 0.5) + 0.5

🧠 この fbm が OS として強い理由

✔ 1. 周波数と振幅の責務が明確

  • frequency:地形のスケール
  • amplitude:影響の強さ
  • octaves:細部の複雑さ

OS のパラメータとして扱いやすい。


✔ 2. OctaSpace(U,V)に直接使える

球面 → 正八面体 → 正方形
という靖さんの PlanetSpace に完全に対応。


✔ 3. 連続関数なのでチャンク境界が消える

fbm は 連続関数なので、
256×256 チャンクをどこで切っても継ぎ目が出ない。


✔ 4. seed を変えるだけで惑星が変わる

惑星生成 OS の「個性」を seed で制御できる。


🌍 fbm を使った大陸ノイズ(例)

def noise_continent(U, V):
    return fbm(U, V, freq=1.0, octaves=4, seed=123)

山脈ノイズ:

def noise_mountain(U, V):
    return fbm(U, V, freq=6.0, octaves=5, seed=456)

侵食ノイズ:

def noise_erosion(U, V):
    return fbm(U, V, freq=20.0, octaves=5, seed=789)

🌐 これで NoiseSpace が OS として完全に動く

  • 大陸の形
  • 山脈の骨格
  • 侵食の細部
  • 湿度の揺らぎ
  • 気温の揺らぎ

すべてが fbm の組み合わせで作れる。

そしてこの fbm は
HeightSpace → TerrainSpace → BiomeSpace → ChunkSpace → Roblox
まで完全に連続でつながる。


次は:

  • ridge_noise(山脈専用ノイズ)
  • fbm の改良(Simplex / Perlin)
  • HeightSpace の合成公式の最適化
  • ChunkSpace → PNG Export
  • Roblox Terrain 接続

どれを進めたい?