Noise

Generatiivinen taide

Luvussa 2 käytit random-metodin tuottamaa satunaisuutta animaation luomiseen. Tietokone tuotti ohjelmoimiesi sääntöjen perusteella uniikin teoksen jokaisella ajokerralla. Tässä luvussa tutustutaan samaan ajatukseen hieman syvemmin ja opetellaan uusia tekniikoita generatiivisten teosten luomiseen.

Noise

Noise on tietokonegrafiikassa klassinen algoritmi orgaaniselta eli luonnolliselta näyttävän satunnaisuuden tuottamiseen. Algoritmin on aikanaan kehittänyt Ken Perlin vuonna 1982 julkaistua Tron-elokuvaa varten. Processing-ympäristössä on valmiina noise-metodi, joka toteuttaa algoritmin.

Voit ajatella noise-metodia hieman samaan tapaan kuin tuttua random-metodia. Siinä missä random tuottaa täysin satunnaisia lukuarvoja halutulla välillä, noise tuottaa annettujen parametrien perusteella arvoja jotka ovat tietyssä suhteessa keskenään. Lopputulos näyttää sulavammalta ja luonnollisemmalta.

Noise-metodin käyttö

Noise-metodi palauttaa aina arvon välillä 0-1. Arvo riippuu koordinaatista, joka annetaan metodille parametrina. Samalla parametrilla noise palauttaa saman arvon. Eli noise(0) palauttaa tietyn arvon ja jos kutsut uudestaan noise(0), saat toistamiseen tulokseksi saman arvon. Jos taas kutsuisit noise(0.01) saisit uuden arvon.

Noise on itseasiassa kuvaaja, joka generoidaan ohjelman käynnistyessä. Metodille annetut parametrit ovat koordinaatteja, joiden perusteella metodi palauttaa kuvaajan arvon tietyssä kohdassa. Jos funktion käsite on matematiikasta tuttu, voit ajatella noise(x) funktiota hieman samaan tapaan, kuin sin(x) funktiota.

Käytännössä noise-metodin käyttö Processing-ympäristössä näyttää seuraavalta. Kopioi koodiesimerkki editoriisi ja kokeile ajaa ohjelmaa eri arvoilla.

float x = 0;  // create variable and assign a value

void setup(){
  size(500, 100);
}

void draw(){
  // generate x-coordinate with noise
  // noise returns a value between 0-1 so multiply that with width
  rect(noise(x)*width, 30, 40, 40);
  x = x + 0.01;   // increment x a little bit. try different values here.
}

Alla on  visualisaatio, joka havainnollistaa noise-metodin toimintaa. Mitä vähemmän noise-metodin parametrina käytettävää x-koordinaattia kasvatetaan jokaisella kierroksella, sitä hienovaraisempaa liike on.

  • Muuta hiirellä "Select increment to x_seed" arvoa. Huomaat kuinka kuvaaja on pienillä arvoilla tasainen ja suurilla arvoilla hajoaa pisteiksi.
  • Alimmassa laatikossa on visualisoitu noise-metodin arvoa liikkeellä. Kun muuttjan x_seed arvo on pieni, liike on hyvin hienovaraista. Suurilla arvoilla liike on poukkoilevampaa.

Ohjelmointiharjoitus

Kirjoita ohjelma, joka piirtää ikkunan keskelle ympyrän, jonka läpimitta on välillä 200-400. Generoi ympyrän läpimitta noise(x)-metodilla. Kasvata parametria arvolla 0.02 jokaisen piirtokerran välissä.

  • Piirrä ympyrä keskelle ikkunaa.
  • Generoi noise-metodin avulla ympyrän läpimitta välillä 200-400.
  • Kasvata noise-metodin parametria arvolla 0.02 jokaisella kierroksella.