Python3.3でnoiseモジュールを使う
※CheckiOとは全然関係ない内容です
パーリンノイズ(Perlin Noise)を生成するモジュール noise を使う必要があったので、使い方をまとめてみた。
使用環境は Python3.3.3+Windows7
インストール
PyPI
https://pypi.python.org/pypi/noise/
Windowsならバイナリからインストールするのが手っ取り早い
http://www.lfd.uci.edu/~gohlke/pythonlibs/#noise
概要
用意されている関数は、
- pnoise1, pnoise2, pnoise3
- snoise2, snoise3, snoise4
の6種類
pnoiseはPerlin "improved" noise、snoiseはSimplex noiseとのこと。いまいち違いが分からないが、simplexは(特に高次で)高速らしい。
http://en.wikipedia.org/wiki/Simplex_noise
http://en.wikipedia.org/wiki/Perlin_noise
末尾の数字は次数で、pnoise2/snoise2では引数がx,yとなり、例えば2Dテクスチャー用のノイズの作成に使う。pnoise3/snoise3なら引数がx,y,zとなる。
使い方
import noise n = noise.pnoise2(x, y) # 戻り値は -1.0~+1.0 n = (n + 1) / 2 # 0.0~1.0 に変換する場合
引数
x,y,z,w
floatで渡すこと。整数値で渡すと、戻り値は0.0となる。
xが0.0~1.0の間でノイズの波が1うねりというイメージ。xが0.0~5.0まで動くと5うねり。変な説明だが…
octaves=1
ノイズの波を何回重ねるか
persistence=0.5
波を重ねるときの倍率。0.5なら、次の波を0.5倍して重ねる。
lacunarity=2.0
波の周波数を前の波の何倍にするか。
repeatx, repeaty=None
ここにx,yのサイズを設定することで、そのサイズでノイズが繰り返される。
base=0.0
ノイズのオフセット。他のパラメータが同じでも、baseを変えることでノイズを変えることができるので、ランダムなノイズが欲しければ、baseにrandomな値を設定すればいい。
参考リンク
Persisitanceの違いがわかりやすい
http://freespace.virgin.net/hugo.elias/models/m_perlin.htm