普通、芸術作品(ここでは美しい絵など)を制作するには、まず最初にアーティストが作りたいと思う作品のイメージを頭の中につくり、そのイメージにできるだけ近くなるように、絵筆をとって描くという順番になると思います。したがって、その世界の創造主たる作家は、その作品の隅々まで自分の「意図」で作っているわけです。これはあたりまえですよね。
ところが、アーティストとコンピュータとの協調作業により、作家が当初は意図していなかった「思いがけない美」を追求するアートがあります。これはジェネラティブ・アート(Generative art)と呼ばれています。
具体的にどのようなものがあるかは、画像検索で”Generative art”と検索してみましょう(以下の画像をクリック)。多くの作品がありますね。
このようなジェネラティブ・アートの作り方は、まずはじめに作品のだいたいの構造を決めるプログラムを作ります。ただし、作品の要素となるオブジェクトのサイズや色や方向等のパラメータに関数や乱数を導入することで、何度かプログラムを動かすことで「思いがけない美」が発生する仕組みを組み込んでおきます。そして、そのプログラムの実行を何度も繰り返すとともに、大枠となるプログラムをブラシュアップをすることで、よい作品を「発生」させるというわけです。
では優秀なプログラマであれば、よい作品ができるかというとそうではありません。たまたま発生した「よい作品」をよい作品と判断する目利きする力が必要です。よい作品かどうかを見分ける人を「キュレーター」と呼びますが、まさに、キュレーションの力が必要となるわけです。極端なことをいうと、ジェネラティブ・アートでは、
創作活動 = プログラミング + キュレーション
ということになるかもしれません。すなわち、私のように絵を描くのがあまり上手ではない人でも、よい作品かどうかを見分ける力があれば、アーティストになれる可能性があるという分野といえるかもしれません。
最近、このようなジェネラティブ・アートに関する入門書が出版されました。この本では、ジェネラティブ・アートの概念を説明するとともに豊富なコード例があります。例えば、パラメータに与える乱数をどのように発生させるかは重要なポイントですが、rand()関数のような一様乱数では、必ずしも自然で美しい作品とはならないケースがあります。そのような場合には、パーリンノイズ(perlin noise)と呼ぶノイズを導入する方法があります。このようなジェネラティブ・アートのポイントを分かりやすく説明しています。尚、パーリンノイズについては、後日、改めて例を交えて紹介します。