PythonでPerlin Noiseを生成する

Perlin Noiseって何ぞ

普通に乱数を何度も使うと、隣接した値と非依存の値を生成する(そうでなければ乱数とは言わない)ので、ランダムかつなめらかな地形みたいなものは作れない。

このような「ランダムかつなめらか」という目標を達成する手法としてPerlin Noiseがある。ググってみればどういうものができるのか分かるであろう。

PythonでPerlin Noiseを作る

と言ってもゴリゴリ計算する訳ではなく、既にライブラリがあるので使おうぜ!という話。という訳で

# easy_install noise

でインストール。

noiseライブラリの使い方

これでPerlin Noiseが作れるようになるが、若干癖がある。2次元のPerlin Noiseだとnoise.pnoise1(x)という形で呼び出すことになるが、このxが曲者である。

例えばn個、連続したNoiseを作りたいとする。xには、その番号に適当な係数(今回はaとしておこう)を掛けたものを代入する。例えば、

l = [noise.pnoise1(a*i) for i in xrange(n)]

等とやると良い。

aの決め方であるが、これはパターンの数で決める。1つの縞模様が欲しい場合はaが1/nとなるようにすればよい。10なら当然10/nとなる。

ちなみに、同じ値を入力すると、常に同じ値が返るようになっているので、ランダムにしたい場合は、適当な乱数を足せば良い。(0.1とか足しても大きく変化しないので、できるだけ大きな値を足すこと)