TIES471 Reaaliaikainen renderöinti
Miksi kurssille?
Kurssin työmäärä Laajuus 5 op = 27 h * 5 = 135 h Esitiedot : Tietokonegrafiikan perusteet, Ohjelmointi 2 Luennot 28 h (19 kpl), vaatimus 70% läsnäolo (14 kpl) Ohjaukset 8 h (5kpl), vaatimus 80% läsnäolo (4 kpl) Omakohtainen opiskelu 20-40 h Ryhmätyöt 10-20 h Harjoitustyö 40-60 h Tenttiin valmistautuminen 10-20 h
Harjoitustyö Ryhmätyö, 4-5 hengen ryhmät (7 10 ryhmää) Renderöintimenetelmä: sovellus & kirjallisuustutkimus Harjoitustöiden esittelyt viikoilla 19 & 20 Sähköpostilista: render2016@korppi.jyu.fi Tentti 4 tehtävää, 6 pistettä per tehtävä Käsitetehtävä (esim. 12 käsitettä), laskutehtävä, arkkitehtuuritehtävä, kysymys harjoitustyöstä, Tentti (1) PE 20.5 12:00-16:00 Tentti (2) PE 10.6 12:00-16:00 Tentti (3) PE 19.8 12:00-16:00
Kirjoja ja konferensseja Real-time rendering (3rd edition) - http://www.realtimerendering.com/ ShaderX 1-7 - http://tog.acm.org/resources/shaderx/ GPU PRO 1-7 SIGGRAPH (Conference and exhibition on Computer Graphics and Interactive Techniques) - http://s2016.siggraph.org/ Eurographics - https://www.eg.org/ Intro: http://acko.net/files/fullfrontal/fullfrontal/webglmath/online.html Lähde: Real-time rendering, 3rd edition
Softaa NVIDIA OpenGL SDK 10 https://developer.nvidia.com/opengl Cg toolkit https://developer.nvidia.com/cg-toolkit-download Microsoft DirectX SDK http://www.microsoft.com/en-us/download/details.aspx?id=6812 Shader Maker http://cgvr.cs.uni-bremen.de/teaching/shader_maker/ Lähde: Real-time rendering, 3rd edition
Määritelmä Renderöinti on tietokonegrafiikan lineaarinen prosessi, jossa luodusta näkymästä (mallista) muodostetaan kuva. 3D renderöinti on kolmiulotteisen tietokonegrafiikan prosessi, jossa kolmiulotteisesta mallista muodostetaan kaksiulotteinen kuva. Reaaliaikaisessa (3D) renderöinnissä kuvanmuodostusprosessi (pitää) tapahtua riittävän nopeasti ettei katsoja ehdi näkemään yksittäisiä kuvia. Renderöintiprosessin tuottaessa vähintään 72 kuvaa sekunnissa ihmisen silmä ei enää pysty erottamaan yksittäisiä kuvakehyksiä. Reaaliaikaisen renderöinnin kriteerit: interaktiviisuus, kolmiulotteisuus ja grafiikkalaitteisto. Lähde: Real-time rendering, 3rd edition
1.1 Grafiikkaliukuhihnan arkkitehtuuri Liukuhihna sisältää useita vaihteita. Vaiheet voidaan jakaa käsitteellisiin, toiminnallisiin ja kanavallisiin (pipelining) vaiheisiin. Käsitteelliset vaiheet : Sovellus Geometria Rasteroija Liukuhihnan hitain vaihe määrää renderöintinopeuden (fps). Vaiheiden nopeuttamiseksi käytetään rinnakkaistusta. Kanavoinnissa puhutaan läpisyötöstä (throughput). Esimerkki: 75 Hz näyttö, pullonkaulavaihe 52 ms Lähde: Real-time rendering, 3rd edition
1.2 Työvaihe: Sovellusvaihe Sovellusvaihe suoritetaan tietokoneen prosessorilla. Työvaihe on täysin ohjelmoitava. Sovellusvaiheen toteutuksella voidaan merkittävästi vaikuttaa myöhempiin työvaiheisiin. Rinnakkaislaskentaa hyödynnetään nykyisillä moniydinprosessoreilla. Sovellusvaihe tuottaa piirtoprimitiivit valmiiksi geometriavaiheelle. Lähde: Real-time rendering, 3rd edition
1.3 Työvaihe: Geometriavaihe Yleisesti geometriavaihe on geometrian muuntopolku läpi esitettävien koordinaatistojen. Geometriavaiheessa suoritetaan monikulmio- ja verteksioperaatiot. Kolmiulotteisen kappaleen geometria määritellään verteksien (kulmapiste), kappaleen materiaalin ominaisuuksien (diffuusiheijastus, peiliheijastus, emissio), tekstuurimappauksen, tekstuurikoordinaattien ja normaalivektorien avulla. Geometriavaihe jaetaan työvaiheisiin: Malli- ja näkymämuunnos Verteksivarjostus Projisointi Leikkaus Mappaus näyttökehykseen Lähde: Real-time rendering, 3rd edition
Lähde: Näkymänhallintatekniikat 3D-grafiikkamoottoreissa
1.3 Työvaihe: Geometriavaihe Mallimuunnos (model transform) muuntaa kappaleen koordinaatit maailman koordinaatistoon. Näkymämuunnoksella (view transform) siirretään kameran paikka maailmankoordinaatiston origoon ja käännetään sen orientaatio; eteen z-akseli, ylös +y, oikea +x (API riippuvainen). Varjostus (shading) on operaatio, joka laskee valaistuksen vaikutuksen näkymän kappaleeseen. Verteksivarjostus tuottaa näkymän kappaleiden ulkoasun. Verteksien data:an tallennetaan mm. koordinaatit, normaalivektori ja väri. Verteksivarjostuksen tuloksena saatava tieto toimitetaan rasterointivaiheeseen interpoloitavaksi. Projisointivaihe muuntaa (kuvaa) kameraparametrein määritetyn katselutilavuuden kanoniseksi kuvasärmiöksi (canonical view volume, unit cube). Käytetyt projektiot ovat ortografinen ja perspekstiiviprojektio. Lähde: Real-time rendering, 3rd edition
1.3 Työvaihe: Geometriavaihe Näkymän kappaleille, jotka sijaitsevat osittain näkymäfrustumin ulkopuolella, pitää suorittaa leikkaus. Leikkaus suoritetaan kanonisella kuvasärmiöllä laitteistotasolla. Jokaisen piirtoprimitiivin kolmiulotteisen avaruuden x- ja y-koordinaatit kuvataan (screen mapping) näyttökoordinaatistoon (screen coordinates). Kuvaus sisältää siirto- ja skaalausoperaatiot. Lähde: Real-time rendering, 3rd edition
1.4 Työvaihe: Rasterointivaihe Rasterointivaiheessa (rasterization, scan conversion) lasketaan ja asetetaan näkymän pikselien värit. Rasterointivaiheessa muunnetaan näyttöavaruuden kaksiulotteiset pikselit (sis. syvyysarvot, varjostustiedot) näytön pikseleiksi. Kehyspuskuri sisältää kaikki rasterontivaiheen puskurit. Rasterointivaihe jaetaan työvaiheisiin: Kolmioiden jaottelu Kolmioskannaus Pikselivarjostus Yhdistys Lähde: Real-time rendering, 3rd edition
1.4 Työvaihe: Rasterointivaihe Kolmioiden jaottelussa (triangle setup) lasketaan kolmioiden pintatiedot. Kolmioskannauksella (triangle traversal) etsitään pikselit, joiden keskipisteet ovat näkymän kolmioiden sisällä/päällä. Jokaista löydettyä pikseliä kohti luodaan frakmentti. Kolmioprosessoinnit suoritetaan kiinteästi näytönohjaimella. Pikselivarjostus (pixel shading) laskee pikselien arvot interpoloidun varjostustiedon perusteella. Tuloksena saadaan yksi tai useampi väriarvo syötteeksi yhdistämisvaiheeseen. Pikselivarjostus suoritetaan ohjelmoitavalla GPU-yksiköllä. Yhdistämisvaihe (merging) yhdistää varjostusvaiheessa muodostetun frakmentin värin väripuskurin vastaavaan arvoon. Z-puskurointi suoritetaan myös yhdistämisvaiheessa. Alfa-kanavalla kontrolloidaan läpinäkyvät pikselit. Stensiilipuskuriin voidaan tallentaa renderöitävien primitiivien lokaatiot ja yhdistää ne väripuskuriin. Lähde: Real-time rendering, 3rd edition
2 Grafiikkalaitteisto CPU RAMDAC GPU VIDEO BIOS VIDEO MUISTI VIDEO MUISTI VIDEO MUISTI Näytönohjaimen korttipaikka Kellogeneraattori AGP tai PCI-express grafiikkaväylä Etuväylä Pohjoisosa muistinohjaus Muistipaikat Sisäväylä PCI väylä Eteläosa laiteohjaus PCI väylä Emolevylle Integroitu näytönohjain BIOS LPC väylä I/O Portit, asemat Lähde: Real-time rendering, wikipedia
2 Grafiikkalaitteisto Näytönohjain piirtää tietokoneen tuottaman kuvan näytölle. Näytönohjaimen osat ovat grafiikkaprosessori (GPU), näyttömuisti (VRAM, WRAM, SGRAM), Video BIOS, RAMDAC ja jäähdytyslaitteet. Grafiikkaprosessori on erityisesti liukulukulaskentaan kehitetty suoritin. Näyttömuistiin tallennetaan kehyspuskuri (kuva), z-puskuri, väripuskuri, verteksipuskurit ja varjostinohjelmat. Video BIOS on ajuri, joka ohjaa tietokoneen ja ohjelmiston kommunikointia näytönohjaimen kanssa. RAMDAC (Random Access Memory Digital to Analog Converter) muuntaa digitaalisen signaalin analogiseen muotoon. RAMDAC on nykyisin integroitu grafiikkaprosessorin ytimeen. http://en.wikipedia.org/wiki/video_card Lähde: Real-time rendering, wikipedia
Diamond Speedstar 24 Valmistaja: Tsengs Labs Julkaisupäivä: 1993 Ydin: Tseng ET4000AX Väylä: ISA 16 bit Muistin tyyppi: DRAM Näyttömuisti: 1MB Näyttötila: VGA 640x480 Lähteet: GPUreview.com
Doom Julkaistu 10.12.1993 2.5D : 2-ulotteisesta mallista (kartta) renderöidään kolmiulotteinen näkymä. Käytetään kahden pisteen projektiota. Katselukulma on aina lattiatason suuntainen ja seinät ovat kohtisuorassa lattiaa vastaan. Päällekkäisiä kerroksia ei voi olla. http://upload.wikimedia.org/wikipedia/commons/5/53/doom-map-format-map.svg BSP-puu näkymänhallinta http://www.cs.cmu.edu/afs/andrew/scs/cs/15463/2001/pub/www/notes/bsp_tutorial.pdf WAD-tiedostot : http://en.wikipedia.org/wiki/doom_wad http://www.doombuilder.com/index.php?p=about
3dfx Voodoo Graphics 2MB Valmistaja: 3dfx GPU: SST1 Julkaisupäivä: 1.10.1996 Väylä: PCI Kellotaajuus: 50 MHz Muistintaajuus: 50 MHz Muistinkaistanleveys: 0.8 GB/sekunnissa Varjostin operaatiot: 50 M operaatiota/s Pikselitäyttönopeus: 50 M pikseliä/s Teksturointinopeus: 50 M tekseliä/s Verteksioperaatioiden nopeus: 0 M verteksi/s Kehyspuskuri: 2 MB Muistin tyyppi: SDR Muistiväylä: 128 (128 bit) DirectX yhteensopivuus: 3.0 OpenGL yhteensopivuus: minigl Prosessi: 500 nm Frakmenttiliukuhihnat: 1 Verteksiliukuhihnat: 0 Tekstuuriyksiköt: 1 Rasterointioperaatiot: 1 Lähteet: GPUreview.com
Quake I Id Tech 1 Julkaistu 31.5.1996 Gouraud varjostus (shading) liikkuvissa kappaleissa. Jokaiselle kolmion kärkipisteelle (verteksi) lasketaan valaistus. Kolmion kattaville pikselilleille lasketaan arvot lineaarisesti interpoloimalla. Staattiset lightmapit staattisissa kappaleissa Pelin kentissä konveksi geometria BSP-puu näkymänhallinta OpenGL tuki
Quake II Id Tech 2 Julkaistu 9.12.1997 Out-of-the-box OpenGL tuki Ajetun kirjaston tuki (.dll) Skybox -taustat ja valoefektit Verteksianimointi (MD2) http://en.wikipedia.org/wiki/md2_%28file_format%29 BSP-puu näkymänhallinta http://www.gamers.org/dengine/quake/spec/quakespec32.html#cbspc
nvidia Riva TNT2 32 MB Valmistaja: nvidia GPU: NV5 Julkaisupäivä: 15.3.1999 Väylä: AGP 4X Kellotaajuus: 125 MHz Muistintaajuus: 150 MHz Muistinkaistanleveys: 2.4 GB/sekunnissa Varjostin operaatiot: 250 M operaatiota/s Pikselitäyttönopeus: 250 M pikseliä/s Teksturointinopeus: 250 M tekseliä/s Verteksioperaatioiden nopeus: 0 M verteksi/s Kehyspuskuri: 16 MB, 32 MB Muistin tyyppi: SDR Muistiväylä: 128 (128 bit) DirectX yhteensopivuus: 6.0 OpenGL yhteensopivuus: 1.0 Prosessi: 250 nm Frakmenttiliukuhihnat: 2 Verteksiliukuhihnat: 0 Tekstuuriyksiköt: 2 Rasterointioperaatiot: 2 Pikseliformaatti: 32 bittinen (true color) Z-puskuri: 32 bittinen Stensiilibufferi: 32 bittiä Tekstuurikoko: 2048 2048 pikseä Bilineaarinen teksturointi Lähteet: GPUreview.com, wikipedia
Quake III Id Tech 3 Julkaistu 2.12.1999 Peliin toteutettiin shader script -järjestelmä, jossa pintojen ulkoasun määritykset tehdään tekstitiedostoihin. Shaderit kooostuvat useammasta kerroksesta, joihin liitettiin tekstuuri. http://icculus.org/gtkradiant/documentation/q3ashader_manual/ch01/pg1_1.htm Spliniperustaiset kaarevat pinnat tasotilavuusissa. Efektejä: peilit, sumu, aaltomuotoiset verteksin vääristymät, Dynaamiset varjot: blob varjot, läpinäkyvyyteen perustuva, osittain läpinäkyvään mustaan perustuva. Neliöjuuren nopea käänteisarvolaskenta (Fast Inverse Square Root). http://en.wikipedia.org/wiki/fast_inverse_square_root Verteksianimointi (MD3) - http://en.wikipedia.org/wiki/md3_%28file_format%29
Doom 3 Id Tech 4 Julkaistu 3.8.2004 Uusi tekniikoita: bumb -mapping (kyhmytys), normaalimappaus, peiliheijaus (specular highligting) Jokaisella piirrettävälle pikselille lasketaan valaistus; dynaaminen pikselikohtainen valaistus (vrt. verteksikohtainen). Yhdistetty valaistuksen ja varjojen laskenta (unified lighting & shadows). Varjojen muodostukseen käytetään tilavuuksia (shadows volumes). Luurankoanimaatiot (skeletal animation) Megatekstuurit (megatexture) perustuvat leikkausmappaus (clip mapping) tekniikkaan.
nvidia GeForce 6800 Valmistaja: nvidia GPU: NV40 (Superscalar Architecture) Julkaisupäivä: 14.4.2004 Väylä: AGP 8X Kellotaajuus: 325 MHz Muistintaajuus: 350 MHz Muistinkaistanleveys: 22.4 GB/sekunnissa Varjostin operaatiot: 3900 M operaatiota/s Pikselitäyttönopeus: 3900 M pikseliä/s Teksturointinopeus: 3900 M tekseliä/s Verteksioperaatioiden nopeus: 0 M verteksi/s Kehyspuskuri: 128, 256, 512 Muistin tyyppi: DDR Muistiväylä: 64x4 (256 bit) DirectX yhteensopivuus: 9.0c OpenGL yhteensopivuus: 2.0 Prosessi: 130 nm Frakmenttiliukuhihnat: 12 Verteksiliukuhihnat: 5 Tekstuuriyksiköt: 12 Rasterointioperaatiot: 12 Lähteet: GPUreview.com, wikipedia
Rage Id Tech 5 Julkaistu 7.10.2011 Suurissa maastoissa käytetään 128,000 128,000 pikselin megatekstuureja. Virtuaalinen teksturointi (virtual texturing) lataa tekstuureja muistiin tarpeen mukaan. Varjokartoja (shadow maps) käytetään pehmeiden varjojen (penumbra). Paljon effektejä: bloom, pehmeät partikkelit, dynaaminen veden pinta, proseduraaliset animaatiot, vaatesimulaatiot,... Id Tech 5 on enemmän kehittäjille suunnattu.
nvidia GTX Titan Valmistaja: nvidia GPU: GK110, Kepler arkkitehtuuri Julkaisupäivä: 19.2.2013 Väylä: PCI-E 3.0 x16 Kellotaajuus: 837 MHz Muistintaajuus: 3004 MHz Muistinkaistanleveys: 288.384 GB/sekunnissa FLOPS: 4499.712 GFLOPS Pikselinopeus: 40176 M pikseliä/ s Kehyspuskuri: 6144 MB Muistin tyyppi: GDDR5 Muistiväylä: 64x6 (384 bit) DirectX yhteensopivuus: 11.0 OpenGL yhteensopivuus: 4.3 Transistoreja: 7080 miljoonaa Prosessi: 28 nm Frakmenttiliukuhihnat: 2688 (pikselivarjostus) Verteksiliukuhihnat: 2688 Tekstuuriyksiköt: 224 Rasterointiyksiköt: 48 (antialiasointi, z-puskuri, väripakkaus) GPU Boost 2.0, PhysX, TXAA, NVIDIA G-SYNC-ready, SHIELD-ReadyImportant Technologies 3D Vision, CUDA, DirectX 11, Adaptive VSync, FXAA, 3D Vision Surround, SLI-ready Lähteet: GPUreview.com, NVIDIA.com
nvidia GTX Titan X Valmistaja: nvidia GPU: GM200, Maxwell arkkitehtuuri Julkaisupäivä: 17.3.2015 Väylä: PCI-E 3.0 x16 Kellotaajuus: 1002 MHz Muistintaajuus: 3505 MHz Muistinkaistanleveys: 336.48 GB/sekunnissa FLOPS: 4499.712 GFLOPS Pikselinopeus: 96192 M pikseliä/ s Kehyspuskuri: 12288 MB Muistin tyyppi: GDDR5 Muistiväylä: 64x6 (384 bit) DirectX yhteensopivuus: 11.0 OpenGL yhteensopivuus: 4.5 Transistoreja: 8000 miljoonaa Prosessi: 28 nm Frakmenttiliukuhihnat: 3072 (pikselivarjostus) Verteksiliukuhihnat: 3072 Tekstuuriyksiköt: 192 Rasterointiyksiköt: 96 (antialiasointi, z-puskuri, väripakkaus) Multi-Frame sampled Anti-Aliasing (MFAA) Dynamic Super Resolution (DSR) Voxel Global Illumination (VXGI) NVIDIA G-SYNC Technology NVIDIA GPU Boost 2.0 NVIDIA Adaptive VSync NVIDIA Surround (4 monitors) Lähteet: GPUreview.com, NVIDIA.com
Doom Id Tech 6 OpenGL/Vulkan grafiikkarajapinta Grafiikka esitetään voxel:eina (3D hilan alkio), jotka ovat tallennettu 8-puu tietorakenteeseen (octree) Renderöinnissä käytetään säteenvalantatekniikka (ray casting) Keskeneräinen