でたらめ過ぎないランダム性がほしい。

プログラミングでアートやゲームを作るとき乱数は不可欠、というか最もエキサイティングな要素かもしれません。指示通りに正確に動いてくれるのがプログラミングの長所の一つですがそれは作者にとってはとても退屈なのです。何が起きるか最初からすべてわかっているから。これを変えてくれるのが乱数、無作為に生成される数です。上手に使うことで作者も想像をしていなかったような表現や展開が生まれます。これはプログラミングをやっていて本当に楽しい瞬間です。ほとんどのプログラミング言語にrand()とかrandom()というような関数が用意されていて擬似的に乱数を生成することはそれほど難しくありません。プログラミングの教科書によく出てくるサイコロとかおみくじ作りぐらいであれば何も問題ないのですが、グラフィックなどに利用してみるとなんだか期待してるのと違うなあと感じることがあります。次のサンプルを見てください。2種類の「ランダムな」ギザギザを描いてみました。

上がJavaScript標準のMath.random()を使って描いたものです。本当に無作為というか脈略がないというか、さすがにでたらめすぎな印象があります。対して下のギザギザは間違いなくランダムではありますが、ある程度の連続性があり「自然」なランダムを感じます。このような一定の連続性のある乱数はパーリンノイズなどと呼ばれ、グラフィックで地形や雲や炎など自然を表現する場合に活用されます。今回のサンプルではnoiseX.jsというとても使い勝手の良いライブラリを利用させていただいています。せっかく機械で表現を作っているのですからでたらめすぎるぐらい不規則なパターンを描けばよいように思います。しかし不思議なもので人間は自然界にある見慣れた形や動きや変化のパターンを美しいと感じるようです。ただしあまりに自然になってしまうと面白くない。適度にリアルでスパイス程度に違和感を含ませたもの、そういう表現を作りたいときにはパーリンノイズがおすすめです。