summer_tree_home

Check iOでPython3をマスターするぜっ

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