ジェネラティブアートとは、作者が「規則」を決めて、その規則をある程度自律的に走らせて出てきたものを作品とするアートのことです。
ポイントは、作者が直接描くのは絵ではなく「絵の作り方」だということ。
ヴェラ・モルナールについて
ヴェラ・モルナールは、コンピュータアートの母と呼ばれる人物です。
60年間ずっと「整った格子に、どれだけのズレを入れるとおもしろくなるか」を問い続けたんですね。中心のテーマは「秩序と無秩序」です。
ヴェラ・モルナールには以下のような作品があります↓
■ 1% de désordre(1%の無秩序)|1976年
→ 完璧な格子を、反復のたびにごくわずかずつ狂わせていく実験。 規則性とランダム性の境目を探るシリーズ。
■ (Des)Ordres
同心円状に入れ子になった正方形を、ランダムに乱していくシリーズ。 まるで正方形が振動する力を受けているかのような緊張が、直交構造の中に生まれる。
■ Interruptions
規則的な格子に、ランダムな介入を加えて壊すシリーズ。構造と混沌の緊張関係。
ヴェラ・モルナールの言葉
① ピカソへの反論
ピカソの「Je ne cherche pas, je trouve」(私は探さない。見つけるのだ)に対して、真っ向から反対の立場を取った。
ヴェラ・モルナールは
「Je ne trouve peut-être pas, mais je cherche」 (見つからないかもしれない。でも、私は探す)
という哲学。天才が閃きで見つけるのに対し、実験系を作って、仮説を一歩ずつ検証していく…というのはヴェラ・モルナールのやり方。
② ランダムネス(人工的な直感)
ヴェラ・モルナール曰く、ランダム性は 「artificial intuition(人工的な直感)」 とのこと。
直感は、その人の経験・習慣・文化の蓄積であって、放っておくと自分が過去に良いと思ったものを再生産するだけになってしまう。
たとえば、手で迷路を書くとき。人間が書くと「同じ向きが4回続いたから、そろそろ逆にしようかな」などと無意識に判断しますよね?そうなると結果が無難なものになってしまう。
なので、理由の言えない決断を機械(サイコロなど)に肩代わりさせました。モーツァルトがサイコロを使ったのと同じです。
③ コンピュータは人間を「人間化」する
コンピュータは、制作を非人間化するのではなく、人間化(humanize)します。
なぜなら、コンピュータは頭の中にあるものを外に出すのを助けるから。外に出してみて初めて、自分が何を探していたのかが分かるものです。
定番のジェネラティブアート
1. 10 PRINT

1982年 Commodore 64の1行プログラムが元ネタ。この分野で最も有名な入門作。 斜線をランダムに置いているだけなのに迷路のような模様が立ち上がる。
let s = 20;
function setup() {
createCanvas(600, 600);
background(255);
stroke(0);
strokeWeight(2);
for (let y = 0; y < height; y += s) {
for (let x = 0; x < width; x += s) {
if (random() < 0.5) line(x, y, x + s, y + s);
else line(x, y + s, x + s, y);
}
}
}
2. Schotter(シェッター/砂利)

1968年, ゲオルグ・ネース作。入門作でありながら、コンピュータアート史でいちばん有名な1枚。下にいくほど崩れる。
function setup() {
createCanvas(600, 800);
background(245);
noFill();
stroke(20);
rectMode(CENTER);
randomSeed(9);
const s = 40;
const cols = 12;
const rows = 18;
const ox = (width - cols * s) / 2;
const oy = 40;
for (let j = 0; j < rows; j++) {
// 下の行ほど大きくなる「乱れ具合」
const amt = j / rows;
for (let i = 0; i < cols; i++) {
push();
translate(
ox + i * s + s / 2 + random(-1, 1) * amt * s * 0.5,
oy + j * s + s / 2 + random(-1, 1) * amt * s * 0.5
);
rotate(random(-1, 1) * amt * 1.2);
rect(0, 0, s, s);
pop();
}
}
}
3. トリュシェ・タイル(Truchet tiles)

1704年考案。四分円を2通りの向きでランダムに置くだけ。意図していない曲線がつながって迷路のように見える。10 PRINTの曲線版。
function setup() {
createCanvas(600, 600);
background(245, 242, 235);
noFill();
stroke(30, 60, 90);
strokeWeight(6);
randomSeed(4);
const s = 60;
for (let y = 0; y < height; y += s) {
for (let x = 0; x < width; x += s) {
if (random() < 0.5) {
// 左上と右下をつなぐ向き
arc(x, y, s, s, 0, HALF_PI);
arc(x + s, y + s, s, s, PI, PI + HALF_PI);
} else {
// 右上と左下をつなぐ向き
arc(x + s, y, s, s, HALF_PI, PI);
arc(x, y + s, s, s, PI + HALF_PI, TWO_PI);
}
}
}
}
4. 入れ子の四角(ヴェラ・モルナール風)

同じ四角を何重にも描いて、角の座標にだけ小さなズレを足していくもの。
function setup() {
createCanvas(600, 600);
background(244, 240, 232);
noFill();
stroke(30);
randomSeed(6);
const cols = 6;
const rows = 6;
const s = 80;
const ox = (width - cols * s) / 2;
const oy = (height - rows * s) / 2;
for (let j = 0; j < rows; j++) {
for (let i = 0; i < cols; i++) {
const cx = ox + i * s + s / 2;
const cy = oy + j * s + s / 2;
// 右下にいくほど乱れを強くする
const chaos = map(i + j, 0, cols + rows - 2, 0, 6);
for (let k = 0; k < 5; k++) {
const w = s * 0.8 * (1 - k / 5);
beginShape();
vertex(cx - w / 2 + random(-chaos, chaos), cy - w / 2 + random(-chaos, chaos));
vertex(cx + w / 2 + random(-chaos, chaos), cy - w / 2 + random(-chaos, chaos));
vertex(cx + w / 2 + random(-chaos, chaos), cy + w / 2 + random(-chaos, chaos));
vertex(cx - w / 2 + random(-chaos, chaos), cy + w / 2 + random(-chaos, chaos));
endShape(CLOSE);
}
}
}
}
