6.5. Renderöintijärjestys

Samankaltaiset tiedostot
4. Esittäminen ja visualisointi (renderöinti)

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 6 Ke Timo Männikkö

2.2. Kohteiden konstruktiivinen avaruusgeometrinen esitys

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 2. Luento 6 To Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

Luento 6: Piilopinnat ja Näkyvyys

10.2. Säteenjäljitys ja radiositeettialgoritmi. Säteenjäljitys

2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti.

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 9. marraskuuta 2009

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

Algoritmit 2. Luento 9 Ti Timo Männikkö

Algoritmit 2. Luento 4 To Timo Männikkö

Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003

10. Esitys ja kuvaus

v 1 v 2 v 3 v 4 d lapsisolmua d 1 avainta lapsen v i alipuun avaimet k i 1 ja k i k 0 =, k d = Sisäsolmuissa vähint. yksi avain vähint.

Algoritmit 2. Luento 7 Ti Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 4 Ke Timo Männikkö

Algoritmit 1. Luento 6 Ke Timo Männikkö

Tietorakenteet ja algoritmit

Miten käydä läpi puun alkiot (traversal)?

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Luku 8. Aluekyselyt. 8.1 Summataulukko

4. Joukkojen käsittely

Solmu 3/2001 Solmu 3/2001. Kevään 2001 ylioppilaskirjoitusten pitkän matematiikan kokeessa oli seuraava tehtävä:

Tietorakenteet, laskuharjoitus 7, ratkaisuja

58131 Tietorakenteet ja algoritmit (syksy 2015) Toinen välikoe, malliratkaisut

Sisältö. Luento 6: Piilopinnat. Peruskäsitteet (jatkuu) Peruskäsitteitä. Yksinkertaisia tapauksia. Yksinkertaiset tapaukset jatkuu

Paikkatiedon käsittely 6. Kyselyn käsittely

Algoritmit 1. Luento 7 Ti Timo Männikkö

Ohjelmoinnin perusteet Y Python

Tampereen yliopisto Tietokonegrafiikka 2013 Tietojenkäsittelytiede Harjoitus

f(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n))

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Pinot, jonot, yleisemmin sekvenssit: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Yleisempi tilanne: alkioiden hierarkia

Lauseen erikoistapaus on ollut kevään 2001 ylioppilaskirjoitusten pitkän matematiikan kokeessa seuraavassa muodossa:

58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut

Johdatus graafiteoriaan

Maksimit ja minimit 1/5 Sisältö ESITIEDOT: reaalifunktiot, derivaatta

Datatähti 2019 loppu

Algoritmit 2. Luento 10 To Timo Männikkö

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Luento 6: Geometrinen mallinnus

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

811312A Tietorakenteet ja algoritmit, VI Algoritmien suunnitteluparadigmoja

A TIETORAKENTEET JA ALGORITMIT

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

AVL-puut. eräs tapa tasapainottaa binäärihakupuu siten, että korkeus on O(log n) kun puussa on n avainta

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Tietorakenteet ja algoritmit - syksy

Algoritmit 2. Luento 11 Ti Timo Männikkö

Yhtälöryhmä matriisimuodossa. MS-A0004/A0006 Matriisilaskenta. Tarkastellaan esimerkkinä lineaarista yhtälöparia. 2x1 x 2 = 1 x 1 + x 2 = 5.

Inversio-ongelmien laskennallinen peruskurssi Luento 7 8

Numeeriset menetelmät

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

RATKAISUT a + b 2c = a + b 2 ab = ( a ) 2 2 ab + ( b ) 2 = ( a b ) 2 > 0, koska a b oletuksen perusteella. Väite on todistettu.

Algoritmit 1. Luento 10 Ke Timo Männikkö

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

1 Kertaus. Lineaarinen optimointitehtävä on muotoa:

Demo 1: Simplex-menetelmä

Ristitulolle saadaan toinen muistisääntö determinantin avulla. Vektoreiden v ja w ristitulo saadaan laskemalla determinantti

(p j b (i, j) + p i b (j, i)) (p j b (i, j) + p i (1 b (i, j)) p i. tähän. Palaamme sanakirjaongelmaan vielä tasoitetun analyysin yhteydessä.

TKHJ:ssä on yleensä komento create index, jolla taululle voidaan luoda hakemisto

Yhtälöryhmä matriisimuodossa. MS-A0007 Matriisilaskenta. Tarkastellaan esimerkkinä lineaarista yhtälöparia. 2x1 x 2 = 1 x 1 + x 2 = 5.

T Vuorovaikutteinen tietokonegrafiikka Tentti

Kahden suoran leikkauspiste ja välinen kulma (suoraparvia)

Johdatus verkkoteoriaan luento Netspace

Numeeriset menetelmät

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

Kartio ja pyramidi

811312A Tietorakenteet ja algoritmit V Verkkojen algoritmeja Osa 2 : Kruskalin ja Dijkstran algoritmit

Luento 6: Tulostusprimitiivien toteutus

Liite: Verkot. TKK (c) Ilkka Mellin (2004) 1

Harjoitus 6 ( )

Algoritmit 1. Luento 11 Ti Timo Männikkö

jäsentäminen TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho 26. marraskuuta 2015 TIETOTEKNIIKAN LAITOS

10. Globaali valaistus

Algoritmit 1. Luento 12 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 8 To Timo Männikkö

Kombinatorinen optimointi

Algoritmit 1. Luento 12 Ke Timo Männikkö

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 2. helmikuuta 2012

Mediaanisuodattimet. Tähän asti käsitellyt suodattimet ovat olleet lineaarisia. Niille on tyypillistä, että. niiden ominaisuudet tunnetaan hyvin

10. Painotetut graafit

Johdatus verkkoteoriaan 4. luento

58131 Tietorakenteet (kevät 2009) Harjoitus 9, ratkaisuja (Antti Laaksonen)

1. Olkoot vektorit a, b ja c seuraavasti määritelty: a) Määritä vektori. sekä laske sen pituus.

Algoritmit 2. Demot Timo Männikkö

Tarkennamme geneeristä painamiskorotusalgoritmia

3. Hakupuut. B-puu on hakupuun laji, joka sopii mm. tietokantasovelluksiin, joissa rakenne on talletettu kiintolevylle eikä keskusmuistiin.

Tilanhallintatekniikat

Numeeriset menetelmät TIEA381. Luento 8. Kirsi Valjus. Jyväskylän yliopisto. Luento 8 () Numeeriset menetelmät / 35

Algoritmit 2. Demot Timo Männikkö

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

Transkriptio:

6.5. Renderöintijärjestys Näkymän käsittelyjärjestyksiä on kahta tyyppiä. Ensimmäinen on monikulmioittainen käsittely, jossa kukin monikulmio prosessoidaan vuorollaan välittämättä muista. Toinen on selaussuorajärjestys, jossa annetun selaussuoran leikkaavat monikulmioiden janat käsitellään ennen siirtymistä seuraavalle selaussuoralle. Monikulmioittaisella käsittelyllä on etuja. Se on yksinkertainen toteuttaa ja tarvitsee vain vähän aktiivista dataa kerrallaan. Täten siinä ei ole näkymän monimutkaisuuden suhteen vastaan ylärajaa, kuten selaussuorakäsittelyssä. Heikkoutena siinä on, ettei se hyödynnä inormaation jakamista, varsinkaan sitä, että useimmat särmät liittyvät kahteen monikulmioon. Monikulmioittaista käsittelyä voidaan käyttää ainoastaan Z puskuriin perustuvan piilopintojen poiston yhteydessä, joka on muistia runsaasti vaativa menetelmä. Selaussuoramenetelmissä sitä paitsi luodaan koko kuva selaussuorajärjestyksessä, mikä on hyödyllistä laitteistototeutusten kannalta ja laskostumisen poistossa (anti aliasing). Menetelmien ero kuvastuu varsinkin niiden tavasta rakentaa särmälista. Edellä on tarkasteltu asiaa monikulmioittaisen käsittelyn kannalta. Selaussuoramenetelmällä tulisi sellaisella menettelyllä kaikkien monikulmioiden kaikkien särmien rasterointi etukäteen ongelmia tuhlaavan tilankäytön takia. Näin ollen tälle on mielekästä soveltaa aktiivisten särmien listaa, jossa on kerrallaan vain yhden selaussuoran särmät. 6. luku 349 6. luku 350 Selaussuoramenetelmän käsittelyn luonnos on: Monikulmioittaisen käsittelyn luonnos on: or jokaiselle monikulmiolle do muodosta lista monikulmioiden särmistä or y := ymin to ymax do or jokaiselle parille (x i,x i+1 ) särmien listassa[y] do sävytä vaakasuora jana pisteestä (x i,y) pisteeseen (x i+1,y) tyhjennä aktiivisten särmien lista or jokaiselle selaussuoralle do or jokaiselle nykyiseltä selaussuoralta lähtevälle särmälle do lisää särmä aktiivisten särmien listaan alusta sen sävytys ja rasteriarvot ja näiden lisäysarvot poista särmät, jotka eivät vaikuta enää selaussuoralla jäsennä aktiivisten lista käsiteltävien janojen saamiseksi lisää lisäysarvot kaikkiin aktiivisiin särmiin 6. luku 351 6. luku 352

6.6. Piilopintojen poisto On kaksi paljon käytettyä piilopintojen poiston lähestymistapaa, selaussuorapohjainen ja Z puskuripohjainen. Muita on olemassa, kuten alijako (pilkkominen), mutta niitä on edellisiä vähemmän sovellettu ja ovat pikemmin varattu erikoistarkoituksiin, esim. lentosimulaattoriohjelmiin. Z puskuri algoritmi Z puskuri algoritmi (Catmull, 1975) on hyvin keskeinen tietokonegraiikassa, aivan kuin Phongin heijastusmalli ja interpolointilaskenta. Monikulmion sisäiset pisteet sävytetään inkrementaalisesti ja niiden syvyysarvot lasketaan interpoloimalla monikulmion kärkien z arvojen perusteella katselumuunnoksen jälkeen. Syvyysarvot lasketaan luvun 1.5. yhtälöiden mukaisesti. Monikulmion pisteisiin (x s,y s ) on liitetty z arvot. Z puskuri algoritmi etsii ne läpi hakien minimin. Haku toteutetaan Z puskurin avulla, joka sisältää nykyisen pisteen (x,y) ja toistaiseksi löydetyn pienimmän z arvon. Monikulmioprosessin kuluessa pisteen (x,y) intensiteetti kirjoitetaan näyttöpuskuriin tai ei sen mukaan, onko nykyisen pisteen syvyysarvo z pienempi kuin tähän mennessä pienin, joka on talletettuna Z puskuriin. Merkittävä etu Z puskurin soveltamisessa on, että se on riippumaton kohteen esitysmuodosta. Vaikka sitä tässä kuvataan monikulmioverkkojen yhteydessä, se sopii myös esim. CSG kohteille. Menetelmän suurin etu on toteutuksen yksinkertaisuus. Sen suurin heikkous on Z puskuria varten tarvittavan muistin määrä. 6. luku 353 6. luku 354 Z puskurin koko riippuu tarkkuudesta, jolla kunkin pisteen (x,y) syvyysarvo tallennetaan (näkymän monimutkaisuuden unktio). Arvoa 20 32 ittiä pidetään tavallisesti riittävänä. Näkymä on skaalattava tähän z:n kiinnitettyyn väliin, jotta tarkkuus maksimoituu. Z puskuri ja kuvan osien koostaminen Z puskuri algoritmin hyöty on myös, että kuhunkin pikseliin liittyvä z arvo voidaan säilyttää ja käyttää erikseen luotujen näkymän osien koontiin tai lomittamiseen. Kolmiulotteiset kuvat muodostetaan monesti erillisistä alikuvista. Näitä voidaan yhdistää mm. Boolen operaattoreilla. Yksinkertainen erillisten alkioiden koostaminen perustuu pikselittäiseen käsittelyyn, jossa on RGB Z esitys alikuvan pikseleitä varten. Parametri mahdollistaa alikuvien erillisen rakentamisen ja yhdistämisen säilyttäen alipikseli inormaation, jota voidaan hyödyntää kunkin alikuvan käsittelyssä. Kaksi alikuvaa yhdistetään inäärioperaatiolla: = op Tarkastellaan esim. operaatiota Z min. Olkoot kaksi yksikohteista alikuvaa, jotka on renderöity erikseen. Jokaisen pikselin z arvot on käsitelty. 6. luku 355 6. luku 356

Tällöin koostaminen merkitsee piilopinnan poistoon vaikuttamista kohteiden välillä ja määritellään pikseleille: RGB Z = ( i Z = min( Z, Z < Z ) Parametri, 0 1, on pikselialueen osa, jonka kohde kattaa. Sitä käytetään tekijänä määräämään kahden kuvan värisekoitusta. then RGB else RGB ) Operaattori over määritellään: RGB α = α = RGB Tämä tarkoittaa, että kun RGB :tä on läsnä pikselissä. + (1 α + (1 α ) α vähenee, enemmän Koostamisoperaatio omp yhdistää em. operaatiot. Se laskee pikselien tulokset, kun Z arvot pikselien nurkissa ovat erilaiset arvojen RGB ja RGB välillä. Arvoa Z verrataan arvoon Z jokaisessa neljässä kulmassa. Näin on 16 eri mahdollisuutta. Särmiä pitkin interpoloidaan lineaarisesti. Lasketaan osa (pikselialue, jossa on lähempänä kuin ). Saadaan omp: ) RGB RGB = β ( over ) + (1 β )( over ) 6. luku 357 6. luku 358 Z puskuri ja renderöinti Z puskuri ei määrää rajoituksia tietokantaorganisoinnille (paitsi sävytysinterpoloinnin mielessä). Sen yksinkertaisin muoto on johdettavissa monikulmioittain, jolloin monikulmiot voidaan esittää halutussa järjestyksessä. Jokaiselle monikulmiolle voidaan laskea: (1) sisäpikselien (x,y) arvo (2) jokaisen pisteen (x,y) syvyysarvo z (3) jokaisen pisteen (x,y) intensiteetti I Näin algoritmiin tulee kolme rinnakkaista interpolointilaskentaa ja kolme sisäkkäistä silmukkaa. Intensiteetit I ja z arvot ovat käytettävissä kussakin kärjessä. Interpolointi niille tehdään kahdessa sisäsilmukassa. Z puskuria hyödyntävä piilopintojenpoistoalgoritmi on seuraava: or kaikille arvoille x, y do Z puskuri[x,y] := maksimisyvyys or jokaiselle monikulmiolle do tee monikulmion särmistä lista (jokaiselle särmälle lasketaan arvot x, z ja I kullekin selaussuoralle ja tallennetaan nämä särmälistaan) or y := y min to y max do or jokaiselle janalle särmälistassa[y] do hae X vasen, X oikea, Z vasen, Z oikea, I vasen, I oikea 6. luku 359 6. luku 360

or x := X vasen to X oikea do interpoloi lineaarisesti z ja I arvojen Z vasen ja Z oikea välillä sekä I vasen ja I oikea välillä i z < Z puskuri[x,y] then Z puskuri[x,y] := z näyttöpuskuri[x,y] := I Algoritmin tehottomuus sävytyksessä tulee lähinnä piilopikselien laskemisesta, jotka jätetään joko huomiotta tai myöhemmin uudelleenkirjoitetaan. Käytettäessä Phongin interpolointia heijastusmallilaskennan (interpoloidun normaalin unktio) tulee olla mukana sisimmässä silmukassa. Interpoloidaan normaalia N eikä intensiteettiä I, jolloin algoritmin viimeinen rivi kuuluu: näyttöpuskuri[x,y]:=sävytysunktio(n) Selaussuora Z puskuri On olemassa muunnelma Z puskuri algoritmista nimeltään selaussuora Z puskuri. Tämä käyttää ainoastaan yhden pikselin korkuista Z puskuria, johon talletetaan vain yksi selaussuora kerrallaan. Hyötynä on pieni muistin tarve, joten sitä käytetään muistiltaan rajoitetuissa ympäristöissä. Muitakin selaussuoramenetelmiä on ja myös muitakin Z puskurimenetelmiä, esim. Z pyramidi, mutta niihin ei puututa tässä. 6. luku 361 6. luku 362 Piilopintojen poiston jänteet Tässä algoritmi pyrkii löytämään jokaiselle selaussuoralle jänteet, joille sävytys voidaan suorittaa. Tehtävänä on jakaa selaussuora osiin, joille yksittäinen pinta on vallitseva. Tällöin sävytyslaskenta tehdään vain kerran kullekin pikselille, mikä poistaa Z puskurin tehottomuutta. Menettelyn heikkoutena on kuitenkin monimutkaisuus. Näin ollen Z puskurin käyttö on yleisempää kuvien jatkuvasti monimutkaistuessa. Ei puututa algoritmin yksityiskohtiin, mutta esitetään sitä valaisevat kuvat 6.23. ja 6.24. Kuva 6.23. Selaussuoratasoa siirretään alas näkymän läpi, jolloin saadaan janat ja jänteet. Kuva 6.24. Jänteiden käsittelyä. 6. luku 363 6. luku 364

BSP puut ja piilopintojen poisto Luvussa 2 esitettyjen BSP puiden hyödyntäminen rajoittui aluksi kauan lähinnä lentosimulaattoriohjelmiin. Kolmiulotteisten videopelien ja muun animoinnin nousun myötä BSP puut ovat pulpahtaneet esiin myös näkyvyyslaskennan yhteydessä. Alkuperäinen BSP puiden käyttö piilopintojen poistossa perustui staattiseen näkymään ja vaihtuvaan katselupisteeseen lentosimulaattoritai tietokonepelisovelluksessa. Ensivaiheessa näkymän BSP puu konstruoidaan (vain kerran), ja toisessa vaiheessa katselupistettä verrataan tähän rakenteeseen näkyvyyden määräämiseksi. Etuna on se, että huomattava osa näkyvyyslaskennasta voidaan tehdä esiprosessointina, mikä on tehokasta, ja täten tärkeää mm. reaaliaikaiselle tietokonegraiikalle. Kuvan käsittäessä konvekseja kohteita, jotka ovat erotettavissa tasoista muodostetuilla konvekseilla alueilla, rekursiivista hajota ja hallitse menettelyä voidaan soveltaa avaruuden jakamiseen. Oletetaan, että käytettävissä on sopiva menetelmä asettaa tasot ja puu on täydellinen, kun jokainen alue käsittää ainoastaan yhden kohteen. Kuva 6.25. esittää esimerkin. Jokainen lehtisolmu määrittää yhden kohteen, ja solmu vastaa erottavaa tasoa. Puun muodostamisen (kuva 6.25. (a)) jälkeen määrätään näkyvyysjärjestys katselupisteelle laskeutuen puuta juuresta käsin. Katselupistekoordinaattien avulla lasketaan sitä lähin kohde (kuva 6.25. ()). Juuresta laskeudutaan tason A puolelle alipuuhun tämän ollessa lähinnä katselupistettä. Tullaan tasolle B ja kohteelle 2. 6. luku 365 6. luku 366 Kuva 6.25. () esittää näkyvyysjärjestyksen reitin. Kohde 3 on seuraavaksi lähin. Tämän jälkeen mennään juuren kautta kohteeseen 1 ja lopuksi 4. Näin saatiin näkyvyysjärjestys lähimmästä kaukaisimpaan kohteeseen: 2, 3, 1 ja 4. Luonnollisesti se voitaisiin laskea myös käänteisessä järjestyksessä. Kuva 6.25. BSP operaatiot nelikohteiselle kuvalle. (a) BSP puun laatiminen. () Laskeutuminen puussa käyttäen katselupistekoordinaatteja antaa lähimmän kohteen. () Kaikkien kohteiden näkyvyysjärjestyksen laskenta. 6. luku 367 Käytännössä menettely ei ole erityisen hyödyllinen, sillä useimmiten sovelluksissa on kuvia, joissa kohteiden kompleksisuus (monikulmioiden määrä kohdetta kohti) on paljon suurempi kuin näkymän kompleksisuus (kohteiden määrä siinä), ja jotta menettely olisi hyödyllinen, pitää käsitellä kohteiden monikulmioita, ei niinkään kokonaisia kohteita. Lisäksi tasojen asettaminen on hankalaa. 6. luku 368

Monikulmioiden näkyvyyden järjestämiseksi valitaan tasot, jotka sisältävät etupuolen monikulmioita. Jokin monikulmio valitaan juurisolmuksi. Muut käydään läpi kyseisen monikulmion käsittävää tasoa vasten ja sijoitetaan sopivaan jälkeläishaaraan. Jokainen juuritason leikkaava monikulmio jaetaan kahteen osaan. Prosessi jatkuu rekursiivisesti, kunnes kaikki monikulmiot ovat tasolla. Näin syntyy enemmän monikulmioita, kuin oli alkuperäisessä näkymässä, mutta suhde on tavallisesti pienempi kuin 2. Kuvassa 6.26. on yksinkertainen esimerkki. Ensimmäinen valittu taso A sisältää monikulmion kohteesta 1 ja jakaa kohteen 3 kahtia. Puu rakentuu entiseen tapaan, ja määrätään sisälläulkona periaatteella, millä puolella jaossa kohde sijaitsee. Kuva 6.26. Monikulmioiden BSP puu. BSP puiden alkuperäinen toimintatapa oli kaukaalähelle järjestys. Monikulmioiden käsittely näyttöpuskuriin tässä järjestyksessä antaa nk. maalarin algoritmin, jossa läheiset pikselit kirjoitetaan kaukaisempien päälle. Myös läheltä kauasjärjestystä voidaan käyttää, mutta on merkittävä jollakin tavalla, milloin pikselissä on jo käyty. 6. luku 369 6. luku 370 Näkyvyysjärjestyksen kehittämiseksi tulee: Laskeutua pitkin puuta käyttäen pistekoordinaatteja. Määrätä jokaisessa solmussa, onko katselupiste solmutason edessä vai takana. Aluksi laskeutua pitkin alipuun kaukaista sivua ja tulostaa monikulmiot. Sitten laskeutua pitkin alipuun läheistä sivua ja tulostaa monikulmiot. Tämä antaa monikulmioiden takaa eteenjärjestyksen nykyisen katselukulman suhteen. Monikulmiot renderöidään näyttöpuskuriin kyseisessä järjestyksessä. Menettely kärsii samasta haitasta kuin Z puskuri, kun käsitellyt pikselit saatetaan välittömästi kirjoittaa päälle. 6. luku 371