Generative Art Nedir? Algoritma ile Sanat Üretimi
Mehmet Akif AKKUŞ 12.01.2025 108 görüntülenme

Generative Art Nedir? Algoritma ile Sanat Üretimi

Generative Art nedir, nasıl yapılır? Tarihçe, teknikler, örnekler ve uygulamalar. Algoritma ile sanat üretme rehberi.

Generative Art Tanımı

Generative Art (Üretken Sanat), bir algoritma veya otonom sistem kullanarak kısmen veya tamamen oluşturulan sanattır.

Ana Özellikler

  1. Algoritma: Belirli kurallar dizisi
  2. Otonom İm: Sistem kendi başına karar verir
  3. Varyasyon: Her çalıştırmada farklı sonuç
  4. Sürpriz: Sanatçı bile tam sonucu bilemez

Tarihçe

Erken Dönem (1960'ler)

Frieder Nake - "Hommage à Paul Klee" (1965)

  • İlk bilgisayar grafiklerinden
  • Çizgi plotter ile üretildi

Georg Nees - "Schotter" (1968)

  • Kare dizileri rastgele dönüşümlerle

Vera Molnar - "Interruptions" (1968-1969)

  • Geometrik şekiller ve rastlıkla

Sol LeWitt - Konseptüel Bağlantı

Bilgisayar kullanmasa da, Sol LeWitt'in duvar çizimleri generative art'ın felsefesiyle yakından ilgili:

"Fikir, sanat eserini üreten bir makine haline gelir."

LeWitt talimatlar yazardı, başkaları çizerdi. Bu, kodla sanat arasındaki ilişkinin mükemmel analogisi.

Modern Dönem (2000'ler - Günümüz)

Tyler Hobbs - "Fidenza" (2021)

  • NFT olarak satıldı
  • Algoritmic aesthetic

Dmitri Cherniak - "Ringers"

  • On-chain generative NFT

Temel Teknikler

1. Rastgelelik (Randomness)

Basit Random:

function setup() {
  createCanvas(800, 800);
  background(255);

  for (let i = 0; i < 100; i++) {
    let x = random(width);
    let y = random(height);
    let size = random(10, 50);

    fill(random(255), random(255), random(255));
    circle(x, y, size);
  }
}

Sorun: Çok kaotik, organik görünmüyor.

Çözüm: Perlin Noise

2. Perlin Noise

Ken Perlin tarafından 1983'te geliştirildi. Daha pürüzsüz, doğal rastgelelik.

let xoff = 0;

function draw() {
  background(220);

  for (let x = 0; x < width; x++) {
    let y = noise(xoff) * height;
    ellipse(x, y, 4, 4);
    xoff += 0.01;
  }
}

Kullanım Alanları:

  • Dağ silüetleri
  • Bulut formasyonları
  • Organik dokular

3. Fraktallar

Kendini tekrar eden desenler.

Mandelbrot Set: Matematiksel formül: z = z² + c

L-Systems: Bitki büyüme simülasyonları.

Axiom: F
Rules: F → F+F--F+F

Koch Snowflake: Her iteration'da kenarlar böl ve üçgen ekle.

4. Cellular Automata

Conway's Game of Life (1970): Basit kurallar, karmaşık sonuçlar.

Kurallar:

  1. Canlı hücre 2-3 komşuyla yaşar
  2. Canlı hücre <2 veya >3 komşuyla ölür
  3. Ölü hücre 3 komşuyla canlanır
// Game of Life implementation
// (Grid, kurallar, iteration)

5. Flowfields (Akış Alanları)

Perlin noise ile vektör alanları oluşturma.

let particles = [];

function setup() {
  createCanvas(800, 800);
  for (let i = 0; i < 1000; i++) {
    particles.push(createVector(random(width), random(height)));
  }
}

function draw() {
  for (let particle of particles) {
    let angle = noise(particle.x * 0.01, particle.y * 0.01) * TWO_PI * 2;
    let velocity = p5.Vector.fromAngle(angle);

    particle.add(velocity);

    // Wrap around
    if (particle.x < 0) particle.x = width;
    if (particle.x > width) particle.x = 0;
    if (particle.y < 0) particle.y = height;
    if (particle.y > height) particle.y = 0;

    circle(particle.x, particle.y, 2);
  }
}

Parametrik Tasarım

Parametreleri değiştirerek sonucu kontrol etme.

let GRID_SIZE = 20;  // Değiştirilebilir parametre
let COLOR_PALETTE = ['#FF6B6B', '#4ECDC4', '#45B7D1'];

function setup() {
  createCanvas(800, 800);
  background(255);

  let cellSize = width / GRID_SIZE;

  for (let i = 0; i < GRID_SIZE; i++) {
    for (let j = 0; j < GRID_SIZE; j++) {
      fill(random(COLOR_PALETTE));
      rect(i * cellSize, j * cellSize, cellSize, cellSize);
    }
  }
}

Parametre değiştirTamamen farklı eser


Seed (Tohum) Kavramı

Aynı seed → Aynı "rastgele" sonuç

randomSeed(12345);  // Seed değeri
noiseSeed(12345);

// Şimdi her çalıştırmada aynı sonuç

Kullanım:

  • Eseri tekrar üretebilme
  • NFT'lerde tokenID = seed
  • Debuglama

Generative Art Örnekleri

Örnek 1: Mondrian Tarzı Grid

function setup() {
  createCanvas(800, 800);
  background(255);
  noLoop();

  drawMondrian(0, 0, width, height, 4);
}

function drawMondrian(x, y, w, h, depth) {
  if (depth <= 0 || (w < 100 && h < 100)) {
    // Fill with random Mondrian color
    let colors = [
      color(255, 0, 0),
      color(0, 0, 255),
      color(255, 255, 0),
      color(255)
    ];
    fill(random(colors));
    rect(x, y, w, h);

    stroke(0);
    strokeWeight(8);
    noFill();
    rect(x, y, w, h);
    return;
  }

  if (random() > 0.5) {
    // Vertical split
    let splitX = random(0.3, 0.7) * w;
    drawMondrian(x, y, splitX, h, depth - 1);
    drawMondrian(x + splitX, y, w - splitX, h, depth - 1);
  } else {
    // Horizontal split
    let splitY = random(0.3, 0.7) * h;
    drawMondrian(x, y, w, splitY, depth - 1);
    drawMondrian(x, y + splitY, w, h - splitY, depth - 1);
  }
}

Örnek 2: Circle Packing

let circles = [];

function setup() {
  createCanvas(800, 800);
  background(255);
}

function draw() {
  for (let i = 0; i < 10; i++) {
    let newCircle = {
      x: random(width),
      y: random(height),
      r: 5
    };

    let overlapping = false;
    for (let circle of circles) {
      let d = dist(newCircle.x, newCircle.y, circle.x, circle.y);
      if (d < newCircle.r + circle.r) {
        overlapping = true;
        break;
      }
    }

    if (!overlapping) {
      circles.push(newCircle);
    }
  }

  // Grow circles
  for (let circle of circles) {
    let growing = true;

    for (let other of circles) {
      if (circle !== other) {
        let d = dist(circle.x, circle.y, other.x, other.y);
        if (d < circle.r + other.r + 2) {
          growing = false;
          break;
        }
      }
    }

    if (growing) {
      circle.r += 0.5;
    }
  }

  background(255);
  for (let circle of circles) {
    fill(random(255), random(255), random(255), 100);
    stroke(0);
    ellipse(circle.x, circle.y, circle.r * 2);
  }
}

NFT ve Generative Art

On-Chain Generative Art

Art Blocks platformu:

  • Kod blockchain'de saklanır
  • Mint esnasında çalışır
  • Token hash = seed

Avantajları:

  • Tamamen decentralized
  • Kod herkese açık
  • Kalıcı

Tyler Hobbs - Fidenza:

  • 999 unique outputs
  • Her biri $500k+ değere ulaştı

Araçlar ve Kütüphaneler

Processing / p5.js

Zaten ele aldık.

Cables.gl

Node-based visual programming.

Houdini

3D procedural generation (VFX endüstrisi).

TouchDesigner

Real-time generative graphics, VJ'ler için.

Nannou (Rust)

Performanslı, modern generative framework.


İlham Kaynakları

Sanatçılar

Tyler Hobbs

Manolo Gamboa Naon

  • Instagram: @manoloide
  • Geometrik, vibrant renkler

Andreas Wannerstedt

  • Satisfying loops
  • Instagram: @wannerstedt

Zach Lieberman

  • Daily sketches
  • Instagram: @zach.lieberman

Galeriler

  • OpenProcessing.org: Binlerce örnek kod
  • Fxhash.xyz: Tezos NFT platformu
  • ArtBlocks.io: Ethereum generative NFT

Sonuç

Generative Art:

  • Algoritma + Rastgelelik + Estetik
  • Sanatçı sistem tasarlar, sistem eser üretir
  • Sonsuz varyasyon potansiyeli

Başlangıç İpuçları:

  1. Basit kurallarla başlayın
  2. Parametreleri deneysel olarak değiştirin
  3. Başkalarının kodunu inceleyin
  4. Paylaşın ve feedback alın

Unutmayın: En güzel generative art eserleri, basit kuralların beklenmedik şekilde etkileşime girmesinden doğar.

Şimdi editörü açın ve ilk algoritmanızı yazın!