4. Esittäminen ja visualisointi (renderöinti) Tutkitaan erilaisia renderöintimenetelmiä, joita käytetään luvuissa 2 ja 3 esitettyjen kuvien esitysmuotojen visualisointiin. Seuraavassa selvitetään: (1) Monikulmioverkkojen renderöintimenetelmät ovat tärkeimpiä, ja niitä on käytetty aina noin vuodesta 1975 asti. (2) Kuutiolliset, parametriset laput on helpointa renderöidä muuttamalla ne ensin monikulmioiksi. On käytettävissä nopeita alijakoalgoritmeja tätä varten. Kyseessä on tietysti approksimointi, mutta se on tehtävissä kuvan visuaalisen laadun kärsimättä. (3) CSG kohteet renderöidään joko säteenjäljittämisellä tai muuttamalla ne ensin vokseliesityksiksi ja edelleen monikulmioiksi. Ongelmana on Boolen yhdistettyjen operaatioiden laskenta. (4) Vokselit muutetaan monikulmioverkoksi. Lähestymistavan haittana on monikulmioiden suuri määrä. (5) Implisiittiset esitysmuodot muutetaan vokseleiksi tai käsitellään säteenjäljityksellä. 4. luku 212 4. luku 213 4.1. Monikulmioverkkojen renderöinti Monikulmioverkot ovat käytetyin esitysmuoto tietokonegrafiikassa, ja niitä hyödynnetään laitetasolla grafiikkatyöasemissa tai korteissa. Syötteenä on monikulmioiden lista ja tuloksena väri jokaiselle pikselille, jonka kukin monikulmio projisoi näytölle. Monikulmiot ovat grafiikkaohjelmoijan käytettävissä oleva alimman tason alkio. Prosessointi on periaatteessa yksinkertaista ja nopeaa. Toisaalta kehitys on johtanut monimutkaistuviin kuviin; tosin kuvassa 2.5. (b) ollut satojen tuhansien monikulmioiden esimerkki on epätavallinen. Renderöinti jakaantuu kahteen tehtävään. Ensinnä on käsiteltävä kohteen geometrinen muoto, kun tälle voidaan suorittaa erilaisia muunnoksia (mallintamisja näkymämuunnoksia). Toisena on valon ja kohteen välisen vuorovaikutuksen laskeminen, löyhästi ilmaistuna sävytys. Jälkimmäinen prosessi sisältää kaksi osaa. Sävytysalgoritmi laskee monikulmioprojektion pikselien värit ja piilopintojenpoistoalgoritmi laskee, onko osa kohteesta toisen, lähempänä katsojaa olevan kohteen takana. Sävytysalgoritmi laskee monikulmion kärkien valon intensiteetit ja interpoloi näistä monikulmion pikseleille sopivat intensiteettiarvot. Intensiteetit lasketaan vertaamalla kärkien normaalivektorien suuntaa valolähteen sijaintiin nähden. 4. luku 214 4. luku 215
4.2. Parametristen pintojen renderöinti Interpoloinnilla lasketaan monikulmion jokaisen pikselin syvyys sen kärkien syvyyksien perusteella. Nämä syvyysarvot tallennetaan taulukkoon nimeltä Z puskuri. Näitä käytetään laskettaessa, onko kohteen pikseli lähempänä katsojaa kuin lähin aiemmin renderöity pikseli. Tällainen lähestymistapa sallii monikulmioiden ottamisen tietokannasta missä tahansa järjestyksessä. Se on kätevä ja elegantti menettely monikulmioverkkokohteiden visualisointia varten. Kuutiollisten, parametristen lappujen renderöintialgoritmeja on kahdenlaisia: (1) Renderöidään suoraan parametrisestä kuvauksesta tai lapun kuvaavasta yhtälöstä. (2) Approksimoidaan pinta monikulmioverkolla ja käytetään tasomonikulmioverkkoa kyseisen approksimoinnin renderöintiin. Täten tilanne redusoituu esiprosessointi tai muunnosoperaatioksi. Jälkimmäinen lähestymistapa on tavallisin, sillä se on helpommin toteutettava ja laskennallisesti kevyempi. 4. luku 216 4. luku 217 Renderöinti suoraan lappukuvauksista Tässä käytetään selaussuora algoritmia. Siirryttäessä pitkin selaussuoraa lasketaan lapun yhtälöllä pikselille vastaava lapun piste. Tällöin on määrättävä pikselien (x,y) laskentajärjestys lapun matemaattisessa kuvauksessa, mikä on vaikea tehtävä. Vaikeudet havaitaan käsiteltäessä kaarevaa lappua ikään kuin tason osana, monikulmiona tai nelikulmiona. Selausmuunnoksessa tarvittavat monikulmion attribuutit (mutta vaikeasti laskettavia lapulle) ovat: (1) Y koordinaattien maksimi ja minimi saadaan helposti kärkien listasta. (2) Inkrementaaliset laskentayhtälöt antavat monikulmion särmät Y:n funktioina. (3) Vastaavasti Z:n syvyysarvot lasketaan inkrementaalisesti X:n funktiona. Parametrisellä pinnalla ei ole mitään em. ominaisuuksista. Y koordinaattien maksimi ja minimi eivät välttämättä ole pinnan reunalla tai rajalla, koska lappu käsittää usein siluettireunan näyttöavaruudessa, joka seuraa lapun sisäisestä kohoumasta. Parametriselle pinnalle sekä raja että siluettireuna pitää laskea. Sitä paitsi nämä saattavat leikata toisensa eivätkä ole monotonisia X:n ja Y:n suhteen. Parametrinen pinta tai lappu määritellään kolmella kaksimuuttujaisella funktiolla: x = X ( u, v) y = Y ( u, v) z = Z( u, v) Sekä u että v vaihtelevat välillä arvosta 0 arvoon 1. Rajat määritellään arvoilla u=0, u=1, v=0 ja v=1 nelisivuiseksi lapuksi. 4. luku 218 4. luku 219
Eräs keino laskea selausmuunnos lapuille on soveltaa sitä algoritmina, joka laskee XZselaustason ja pinnan leikkauksen muodostamat käyrät (kuva 4.1.). Näillä XZ tason käyrillä ei ole eksplisiittistä muotoa, vaan ne on laskettava numeerisesti (esim. Newtonin iteroinnilla). Tasomonikulmioissa käyrät ovat tietysti janoja, jolloin riittää pelkästään päätepisteiden tallentaminen. Käyrien tilanteessa pitää kaikki niiden pisteet tallentaa. Blinnin algoritmissa (1978) parametrinen selausmuunnos, jota ei tarkemmin eritellä tässä, perustuu algebralliseen ratkaisuun. Se käyttää iteratiivista tekniikkaa rajakäyrien ja siluettireunojen leikkauksen laskennassa kunkin selaussuoran kanssa. Kuva 4.1. Selaustasoalgoritmi laskee lapun leikkauskäyrän rakenteen iteratiivisesti kulkien sen läpi. 4. luku 220 4. luku 221 Muunnos lapusta monikulmioiksi Monikulmioverkon johtaminen lappuverkosta on käsitteellisesti yksinkertaista. Jaetaan alijakomenettelyllä laput käyttäen alijaon kulmapisteitä monikulmioiden kärkinä. Alijakoa jatketaan (kuva 4.2.), kunnes päätetään monikulmion jaon approksimoivan riittävässä määrin todellista lappupintaa. Alijaon lopetuskriteerit riippuvat siitä, toimivatko ne kohdeavaruudessa vai kuvaavaruudessa. Edellisessä verrataan approksimointia todelliseen pintaan käyttäen kohdeavaruuden metriikoita, kun taas jälkimmäisessä käytetään pikseliyksikköjä metriikkana. Kuva 4.2. Lapun jako: (a) Prosessia jatketaan, kunnes approksimointi on riittävän tarkka, ja (b) muutetaan lopulta kahdeksi kolmioksi. 4. luku 222 4. luku 223
Kohdeavaruuden alijako Käsitellen ensiksi kohdeavaruuden alijakoa listataan oheiset luokat: (1) Tasainen alijako kohdeavaruudessa: Tämä on yksinkertaisin menettely. Käyttäjä määrää, mihin asti lappuja jaetaan. (2) Ei tasainen alijako kohdeavaruudessa: Alijako lopetetaan, kun se toteuttaa lapun tasaisuuskriteerin. Jälkimmäinen on teoreettisesti kauniimpi, sillä alijakoa jatketaan laskentakriteerin ohjaamana, ts. riittävän tarkaksi. Tasaisessa alijaossa saattaa jäädä näkyviä rajoja ja siluettireunoja, jotka näkyvät epäjatkuvuuksina. Ei tasaisessa alijaossa tarvitaan tasaisilla alueilla harvoja alijakoja, mutta lokaalin jyrkän kaarevuuden alueilla tarvitaan huomattavan paljon alijakoa. Täten lapun alijaon aste riippuu sen lokaalista kaarevuudesta, mitä havainnollistetaan kuvassa 4.3. Lappuja jaetaan, kunnes tasaisuuskriteeri toteutuu. Lappujen jaolla on kaksi etua: (1) Se on nopeaa. (2) Nopeutta voidaan muuttaa vaihtamalla alijaon astetta, mikä on hyödyllistä vuorovaikutteisissa järjestelmissä. 4. luku 224 4. luku 225 Kuva 4.3. Tasainen ja ei tasainen alijako Bézier lapulle. Ei tasaisen alijaon haitta on, että reikiä voi esiintyä lappujen välillä approksimoitaessa lapun rajaa (suoralla) janalla. Tästä degeneratiivisesta tilanteesta on esimerkki kuvassa 4.4. Kuva 4.4. Ei tasaisen alijaon tuottama repeämä lapussa. Tarkastellaan käyräesitystä, josta on helppoa laajentaa lapulle. Pisteiden laskemisen pitkin käyrää sijasta sitä approksimoidaan paloittain lineaarisella tavalla toistettaessa alijakoa rekursiivisesti kontrollipisteille. Tämä tuottaa yhä tarkemman approksimoinnin käyrälle, kunnes lineaarisuuskriteeri toteutuu. 4. luku 226 4. luku 227
Bézier käyrä (muunnettavissa muiksikin kantafunktioiksi) jaetaan kahdeksi käyräksi jakamalla kontrollipisteet muodostaen kaksi uutta kontrollipisteiden joukkoa R i ja S i. Piste R i /S i on ensimmäisen loppupiste ja toisen alkupiste: R0 = Q0 R1 = ( Q0 + Q1) / 2 R2 = R1 / 2 + ( Q1 + Q2) / 4 R3 = ( R2 + S1)/ 2 S0 = R3 S1 = ( Q1 + Q2) / 4 + S2 / 2 S2 = ( Q2 + Q3) / 2 S3 = Q3 Kuva 4.5. esittää, kuinka ensimmäisen jaon jälkeen paloittain lineaarinen käyrä on parempi kuin jakoa edeltävä. Kolmen jaon jälkeinen approksimaatio on kuvassa 4.6. Kuva 4.5. Bézier käyrän jakaminen. 4. luku 228 4. luku 229 Käyrän jako on helposti laajennettavissa lappuihin kuva 4.7. mukaisesti. Lappu on muodostettu neljällä vakion u käyrällä ja sanoin vakion v, joiden kontrollipisteet ovat kontrollipistematriisin peräkkäisiä rivejä ja sarakkeita. Sovelletaan käyrän jakoa erikseen kullekin neljästä käyrästä u:lle, jolloin saadaan kaksi alilappua. Näille käyrät jaetaan v:lle, jolloin saadaan lopulta neljä alilappua. Kuva 4.6. Kontrollipisteet piirrettyinä kullekin alijaon tasolle. 4. luku 230 4. luku 231
Kuva 4.7. Käyrän jakoa käyttäen lappu jaetaan neljään osaan. Tehokas kaava (vain yhteenlaskuja ja jakoa kahdella) tekee laskennasta nopean. Alijaon astetta tai syvyyttä on helppo valvoa lineaarisuuskriteerin nojalla. Bézier kantafunktioiden summa on 1: 3 i= 0 B i ( u) = 1 Tämä tarkoittaa käyrien sijaitsevan kontrollipisteiden muodostamassa konveksissa peitteessä. Paloittain lineaarinen alijako yhtyy käyrän kanssa, kun se sulautuu janaan, joka yhdistää päätepisteet. Tämän neljän kontrollipisteen yhdistävän janan lineaarisuuden toteutuminen on testattavissa mittaamalla etäisyys keskimmäisestä kahdesta kontrollipisteestä yhdistävään janaan (kuva 4.8.). Tämä menettely on jälleen laajennettavissa lapuille, mutta tarkastelu ohitetaan. 4. luku 232 4. luku 233 Kuva 4.8. Kuutiollinen Bézier käyrä, jossa on neljä kontrollipistettä p 0, p 1, p 2 ja p 3. 4. luku 234