Minecraft clone design
ノイズ関数
地形生成やバイオーム生成などにノイズ関数を使う。本プロジェクトでは Perlin noise 1 を用いる。
ここで、論文により示された Perlin noise のオリジナルの実装 2 では、勾配ベクトルを求める乱数列はハードコードされた環境によらない不変なものであるが、ワールドのシード値により生成される noise を変更したいため、勾配ベクトルを求める乱数列を任意のシード値
と擬似乱数生成器により生成する2次元 Perlin noise
を用いる。
ノイズ関数の合成
より複雑な地形の生成を可能にするために、複数の周波数と振幅からなる Perlin noise を合成する関数 を考える。ここで、 とはオクターブのことであり、1増えるごとに周波数は 倍に、振幅は となる。つまり、以下のようになる。
ここで は の区間を取るようにしたいので、合成した関数の振幅 で除算し正規化する。
参考
バイオーム生成アルゴリズム
まず、温度分布および湿度分布を生成するためのシード値をそれぞれ 、 とすると、ワールドのシード値 をシード値とする擬似乱数列 より以下のようにもとめられる。
温度 、湿度 は、 、 に加え座標 、 および 関数により以下のように求められる。
、 に加え高度を とすると、温度カテゴリー 、湿度カテゴリー 、高度カテゴリー は以下のようになる。
、 、 より、バイオーム は以下のようにもとめられる。
-
Improving Noise, Ken Perlin, 2002, http://mrl.nyu.edu/~perlin/paper445.pdf ↩
-
Improved Noise reference implementation, Ken Perlin, http://mrl.nyu.edu/~perlin/noise/ ↩