Programi za sjenčanje geometrije

Kontakt

Autora možete kontaktirati na jmaricevic@nightirion.com

Korisni linkovi

Generiranje staničnih tekstura

Proceduralno generiranje je vrlo širok pojam koji se koristi u računalnim znanostima, a označava sadržaj koji je generiran algoritamski, a ne ručno. Najčešće se to odnosi na generiranje sadržaja prilikom izvođenja programa, a ne prije distribucije programa. Iako je područje primjene proceduralnog generiranja vrlo široko, najčešće se koristi i spominje u kontekstu računalne grafike. Pojam proceduralno se odnosi na proces koji računa određenu funkciju. Fraktali su jedan od najpoznatijih i najraširenijih primjera proceduralnog generiranja.

U računalnoj grafici, obično se taj postupak koristi za generiranje tekstura i mreža. Razlozi stvaranja sadržaja za vrijeme izvođenja su raznoliki, od uštede prostora, kreiranja velikog broja različitih modela i tekstura koje bi bilo nepraktično i vremenski zahtjevno raditi ručno, pa sve do generiranja tekstura koje izravno odgovaraju površini modela.

Iako se proceduralno generirane teksture dijele na više vrsta, ovdje ćemo pažnju prvenstveno usmjeriti prema generiranju staničnih tekstura. Stanične teksture se razlikuju od većine drugih tehnika generiranja proceduralnih tekstura u tome da se ne zasnivaju na funkcijama šuma, nego ih često koriste kao dodatak osnovnoj tehnici. Osnova algoritama za generiranje staničnih tekstura je bazirana na točkama značajki koje su raspršene u trodimenzionalnom prostoru. Te točke se onda koriste da podijele prostor u manje, slučajno posložene regije nazvane stanice. Stanice najčešće izgledaju kao gušterove ljuske ili različiti kamenčići. Iako je svaka stanica kao regija diskretna, osnovna funkcija za generiranje je kontinuirana u bilo kojoj točki prostora.

Problem generiranja staničnih tekstura je već dugi niz godina prisutan u računalnoj grafici. Reljefno teksturiranje i slične metode često postignu izgled detaljne geometrije površine bez da je zapravo stvore. No kada se gledište dovoljno približi, geometrijska struktura površine teksture postane očigledna, te se gubi željeni efekt. Ono što zapravo pokušavamo napraviti ovom metodom su površine pokrivene geometrijskim elementima. Te elemente modeliramo kao male trodimenzionalne stanice ograničene da leže na površini modela.

Ponašajne metode

Fleischer u svom radu (Fleischer et al, 1995) generira stanične teksture kombinacijom različitih tehnika. Te tehnike su čestični sustavi, razvojne metode i reakcija-difuzija. Čestičnim sustavima su zadana specifična svojstva koja se odnose na ponašanje stanica. Ograničavajuće metode se potom koriste da se stanice generiraju unutar dozvoljene površine na površini modela. Stanice su potom generirane ponašajnim modelom koji je razvio Reynolds u svom radu (Reynolds, 1987). Na ponašanje stanica potom utječe proces nazvan ‘reakcija-difuzija’, koji potiče iz Turingovog rada iz 1952 (Turing, 1952). U Turingovom radu se raspravlja o staničnim svojstvima kao što su proizvodnja pigmenta koja su stalna kroz razvoj embrija, i ovise o određenim kemikalijama koje on naziva morfogeni. Određeni uzorci pigmentacije na životinjama su rezultat difuzije navedenih morfogena kroz tkivo, i kemijske reakcije koja se dogodila tijekom tog procesa.

Fleischerov rad tako generira stanice za koje korisnik može definirati početno stanje, potrebne varijable, izvanstanični utjecaj i raspon programa koji određuju njihovo ponašanje. Rezultati ove metode su vrlo dobri u postizanju organskog, prirodnog izgleda tekstura. Nažalost, unatoč impresivnim rezultatima, zbog velikog broja metoda računanja, te generiranja velike količine geometrije, a i zbog određenih ograničenja prilikom izrade programa za sjenčanje geometrije, još uvijek nije moguće implementirati ovu metodu u potpunosti pomoću programa za sjenčanje .


Točke značajki

Worleyev šum predstavlja osnovnu, ali moćnu tehniku za generiranje staničnih tekstura. Ova metoda se bazira na točkama značajki (engl. feature points). Točke značajki su definirane kao slučajno raspršeni elementi u euklidskom 3-prostoru R3. Za svaku točku unutar R3, udaljenost x se postavlja kao udaljenost do najbliže točke značajki. Ovu metodu ćemo nazvati F1. Time vrijednost x definira jednadžbu polja za svaku točku prostora. Lokacije vrhova su tamo gdje je x jednako udaljen od dvije točke značajki, što rezultira Voronoievim dijagramom. Potom osnovna funkcija izračunava pozicije svih vrhova, te interpolira između vrhova i područja najbližih točkama značajki vraćajući skalarne vrijednosti. Te vrijednosti se tada mogu koristiti za određivanje boje ili informacije o reljefu.

Ovaj proces se može proširiti na nekoliko načina. Umjesto da izabiremo F1 slučaj, možemo izabrati Fn slučaj (izabiremo n-tu najbližu točku značajki). Također možemo dodavati ili oduzimati različite funkcije kako bi dobili još različitih slučajeva. Još zanimljivije rezultate možemo dobiti kombiniranjem fraktala s osnovnom funkcijom.

Prva metoda implementacije bi bila generirati matricu željenih dimenzija te potom postaviti točke na slučajne koordinate. Nakon toga moramo za svaku točku u prostoru obaviti pretragu i naći točku koja je najbliže za zadanu funkciju udaljenosti. Na početku moramo postaviti polje teksture, gdje su W i H širina, odnosno visina teksture, te potom postaviti točke značajki na slučajne koordinate unutar tog polja.

Na slici imamo primjer početne raspodjele točki značajki:

Funkciju udaljenosti također možemo proizvoljno definirati. Najčešće se koristi euklidska udaljenost.

Na sljedećim slikama imamo redom primjer teksture koristeći f1, f2, te f2-f1


Ali i ostale funkcije udaljenosti mogu imati zanimljiv efekt. Na sljedećoj slici imamo primjer teksture dobivene korištenjem ‘city-block’ funkcije udaljenosti.


Ili primjer dodijeljivanja početne boje svakoj točki značajki, te potom njihovo korištenje za određivanje boje pripadajućih elemenata:

Stohastičke metode

Perlinov šum

Perlinov šum je vrlo popularna metoda generiranja tekstura, u čijoj je osnovi Perlinova funkcija šuma u rešeci. Ova metoda se sastoji od stvaranja rešetke s pseudoslučajnim gradijentom za svaku točku unutar nje, a interpolacijom dobivamo ostale vrijednosti.

Najčešći postupak dobivanja ove vrste šuma pomoću računalnih programa je kombiniranje nekoliko glatkih funkcija šuma s različitim frekvencijama i amplitudama. Također, uobičajeno je da se za svaku sljedeću funkciju nakon prve uzima dvostruka frekvencija i upola manja amplituda od prethodne, iako se Perlinov šum drukčijih karakteristika može dobiti i korištenjem različitih postupaka za određivanje amplituda i frekvencija.

Simpleks šum

Simpleks šum je metoda za konstruiranje n-dimenzionalne funkcije šuma poput Perlinovog šuma, ali sa mnogo manjim procesorskim zahtjevima. Prednosti simpleks šuma nad Perlinovim šumom:

  • Simpleks šum ima manju kompleksnost računanja i koristi manje operacija množenja
  • Složenost izračunavanja, koja je za simpleks šum O(n2) prilikom prelaska na više dimenzije (4D, 5D i više) raste puno sporije nego kod klasičnog Perlinovog šuma, koji ima složenost O(2n)
  • Simpleks šum je izotropan
  • Simpleks šum ima kontinuirani gradijent koji se može jednostavno izračunati
  • Simpleks šum je jednostavan za implementaciju na grafičkom sklopovlju

Glavna razlika u postupcima je da dok klasični Perlinov šum interpolira između vrijednosti iz krajnjih točaka okolne hipermreže (npr. sjever, jug, istok i zapad u dvodimenzionalnom prostoru), simpleks šum dijeli prostor u simplekse (npr. trokut u dvodimenzionalnom prostoru, tetraedar u trodimenzionalnom itd.) između kojih interpolira. Ovo smanjuje broj podataka s kojima treba računati, jer dok hiperkocka u N dimenzija ima 2N vrhova, simpleks u N dimenzija ima samo N+1 vrh.

Ostale manje poznate stohastičke tehnike

Difuzijsko limitirana agregacija

U difuzijsko limitiranoj agregaciji počinjemo s mrežom točaka koje su u jednom od dva stanja, nazovimo ih pozitivno i negativno. Potom uvedemo novi element koji se pojavi na slučajnom mjestu unutar mreže. Ako bilo koji od okolnih elemenata je označen kao pozitivan, onda je i novi element postavljen u pozitivno stanje. Ovim procesom dobivamo rezultate koji nalikuju na prirodan rast koralja.

Auto-regresija

Ovdje također počinjemo s mrežom točaka. Krećući od jednog kraja, postavljamo red točaka sa slučajnim vrijednostima intenziteta. Za točku u idućem redu, razmatramo susjedne ćelije iz prethodnog reda u kombinaciji sa slučajnim elementom da odredimo novi intenzitet. Nastavljamo s ovim postupkom sve dok se ne popuni cijela mreža.

Stanični automati

Počinjemo s mrežom u kojoj su sve točke označene ili kao žive ili kao mrtve. Sustav pravila se potom primjenjuje na svaku točku, što rezultira novim rasporedom. Ta pravila se mogu primijeniti proizvoljni broj puta, da bi dobili željenu teksturu. Najpoznatiji sustav pravila za automat ovog tipa je Conwayeva igra života.