TIEA311 - Tietokonegrafiikan perusteet - kevät 2017

Tähän tulee kurssin mittaan linkit kurssimateriaaliin ja kevään 2017 kurssin yksityiskohtiin...

Aikataulut ja kevään viralliset kuviot ovat kurssin Korppi-sivulla. Kurssin etenemisestä tiedotetaan sähköpostilistalla tiea311_kevat2017@korppi.jyu.fi, jonka viestit jäävät Korppiin julkiseen arkistoon.

Kurssimateriaalin kehitysversio avoimessa git-repositoriossa (päivittyy koko kevään kurssin ajan). Luentovideot tulevat Moniviestimeen kurssin kansioon, jonka salainen polkuavain toimitetaan vain kurssia suorittaville opiskelijoille.

Vertaistukikanavat

Sähköpostilista tiea311_kevat2017_keskustelu@korppi.jyu.fi on vertaistukea eli vinkkien pyytämistä ja antamista varten! Se arkistoituu Korppiin, mutta vain listan jäsenille. Ei tarvitse siis jännittää saavansa WWW-julkisuutta keskustelulistan kautta.

Epävirallinen IRC-kanava löytyy nimellä, jossa on risuaita ja kurssikoodi pienillä kirjaimilla. Se lienee reaaliaikaisin vertaistuen moodi ja tietotekniikan opiskelijalle luonteenomainen, mutta Jyväskylän yliopiston tukema virallinen foorumi se ei ole. Ja luennoitsija lupaa enimmäkseen idlata.

Kevään luennoilla tapahtuneet kalvosarjat

Luento 1: tiea311_2017_lec01.pdf Paikalliset alkuinfot, ministi juttua Assignment 0:n ideasta

Luento 2: tiea311_2017_lec02.pdf Approksimointi, interpolointi, splinet, Kuutiollinen Bezier-käyrä, Bernsteinin polynomit

Luento 3: tiea311_2017_lec03.pdf Yleinen Spline-formulointi ("GBT(t)"), De Casteljau, Splinen derivaatta ja normaali matemaattisesti, tulkinta hetkellisenä liikenopeutena ja kiihtyvyytenä

Luento 4: tiea311_2017_lec04.pdf Käyrän jatkuvuusominaisuudet, 4 pisteen Bezierien yhdistäminen pidemmäksi yhdistelmäkäyräksi, kuutiolliset B-splinet, B-splinen jatkuvuusominaisuuksien muokkaaminen kontrolli pisteiden toistolla, kontrollipisteiden muuntaminen eri Spline-kantojen välillä, NURBS-perusidea, pintojen esitystapoja ("fast-forward"), Assignment 1:n pyörähdyspinnan ja yleisen sylinterin idean esittely, johdanto käyrän pisteen paikallisiin koordinaatistoihin ja Assignment 1:n perusideaan

Luento 5: tiea311_2017_lec05.pdfPisteet, suunnat (vektorit), normaalit ja koordinaatit. "framet", ts. paikalliset koordinaattijärjestelmät, lineaarimuunnokset, käänteismuunnokset, kannanvaihto, affiini avaruus ja affiinit muunnokset, filosofiaa oppimisesta, ohjelmoinnista ja ohjelmoinnin oppimisesta

Luento 6: tiea311_2017_lec06.pdf Teknistä ja historiallista taustaa C++:sta, OpenGL:stä, GLU:sta ja GLUT:sta, miten tartutaan uuteen koodiin uudessa kontekstissa, korjaus edellisen kalvosarjan typoon

Luento 7: tiea311_2017_lec07.pdf Assignment 1 metodiset ohjeet, paikalliset koordinaatistot ja siirtyminen niiden välillä, kynän ja paperin autuus, Ballograf-mainos, lineaarimuunnosten yhdistäminen, matriisilaskujen epäkommutatiivisuus, homogeeniset koordinaatit ja perspektiivi (huonosti esitettynä), normaalivektorin kuvaaminen vs. pisteen kuvaaminen, pari sanaa Assignment 0:sta

Luento 8: tiea311_2017_lec08.pdf (luentoviedossa korjaus edelliseen; ei sisälly uusiin slideihin), hierarkkiset mallit, näkymägraafi, havaintoja paikallisen kurssiversion kulusta, Visual Studion tai minkä tahansa IDE:n käyttämisestä tehokkaasti, "uuteen koodiin sukeltamisesta"

Luento 9: tiea311_2017_lec09.pdf Näkymägraafin käsittely jatkuu, muunnosmatriisin päivittäminen, matriisipino, OpenGL ja glPushMatrix() glPopMatrix() käytännön demo teepannulla visual studiossa, nivelmallit (Assignment 2 johdanto), luut, nivelet, kinematiikka ja käänteiskinematiikka (jälkimmäinen "fast-forward", vuorenhuippuja kuvaavia videoita katsellen)

Luento 10: tiea311_2017_lec10.pdf Väri fysikaalisena ja kognitiivisena ilmiönä, spektri, Jyväskylän spektrikameratutkimus (luentovideolla ja Iltasanomissa), spektrin ja heijastusvasteen yhdistäminen, värin aistiminen, värisokeus, metamerismi, näyttölaitteet, standardi väriavaruus, muunnokset väriavaruuksien välillä, CIE, gamma-korjaus. Tavoite: Saatiin vähän tutkimuksellisia syötteitä mielikuvitukselle ja nähtiin syitä siihen, miksi RGBA on ihan OK vaikkapa nettisivujen ja pelien värimaailmoissa.

Luento 11: tiea311_2017_lec11.pdf Yleiskuva animaatioista ja animoinnista. Avainsanoja ja tähtäyspisteitä materiaalista, joka jätetään kokonaan pois MIT:n kurssiversiosta. Toisessa osassa: Vakavia spoilereita Assignment 1:n tekemisestä. Joitain C++ -yksityiskohtia.

Luento 12: tiea311_2017_lec12.pdf Assignmentien deadlinet, Assignment 2, C++:n osoitintyypit, C++:n new-operaattori. Kurssin loppuosan tavoitteet ja huomioita aiheeseen liittyvistä jatkokursseista. Kuvitteellinen kuvapinta/"kehys", säde kamerasta pikselin läpi kohti näkymää, renderöinti. Säteenheitto: algoritmin yleiskuva. Säteen esittäminen parametrisoituna suorana (lähtöpiste, suunta ja vapaa parametri). Neulansilmäkamera, ts. Camera Obscura. Simuloitu neulansilmäkamera: parametrisointi (sijainti, katselu- ja yläsuunta; kuvakulma ja kuvasuhde), näkymäpyramidi (frustum). Säteen suunnan määrittäminen. Perspektiiviprojektio, ortografinen projektio.

Luento 13: tiea311_2017_lec13.pdf Pistetulo eli "Euklidisen avaruuden sisätulo" + metataitojen kertausta (so. Google apuun, kun jotain ei muista tai tiedä). Säteen eksplisiittinen ja pinnan implisiittinen yhtälö. Yhdistäminen leikkauskohdan yhtälöksi. Yhtälön ratkaiseminen leikkauspisteen määrittämiseksi. Metataitojen kertausta (so. laske auki, kunnes asia on itselle selvä). Diffuusi eli täysin mattapintaisen esineen valaistusmalli normaalin ja valosuunnan pistetulona. Videolla fysikaalinen, joskin heuristinen, perustelu. Toisessa osiossa: Keskustelua tauolla heränneistä kysymyksistä, renderöintimenetelmistä ja säteenheiton sovelluksista. C++:n pontterien eli osoitintyyppien välttämättömyys ja vaarat, havaintoja mikroluokista, grafiikan debuggaamisesta, pienten esimerkkien ja "minispeksien" tarpeellisuudesta. Jarnon "tehtävänratkaisun prosessimallista".

Luento 14: tiea311_2017_lec14.pdf Alussa tarkennusta yhtälönratkaisun periaatteista ja matematiikan pyrkimyksestä yksinkertaisiin aksioomiin, joista laskukaavat johtuvat. Säteen ja pallon leikkauspisteet. Painopistekoordinaatit (eli "barysentriset" koordinaatit, engl. barycentric coordinates) kolmion määrittelemässä tasossa ja kolmion sisällä. Kulmien painojen ja säteen leikkauskohdan määrittäminen kerralla mekaanisella laskulla (ns. Cramerin sääntö). Painopistekoordinaattien yleismaailmallisuus ja käyttö pikselikohtaisessa interpoloinnissa. Toisella puoliajalla: Olioperustainen ohjelmointi ja perintä näkymägraafissa. Assignment 4 ja 5 saatesanat. Maininta CSG:stä (ohitetaan yksityiskohdat). Liukulukujen tarkkuus ja tarve pienille korjauksille heijastuvien säteiden lähtöpisteissä ("epsilon"). Säteen muuntaminen mallinnuskoordinaatistoon - helpompaa kuin maailmankoordinaatistoon muunnetun pinnan leikkaaminen. Yhteenveto pisteiden, suuntien ja normaalien muuntamisesta. 4x4 -matriisien autuus 3D:ssä. Ambientti eli yleisvalo. Varjosäteen ampuminen kohti valonlähteitä. Valon värien summaaminen.

Luento 15: tiea311_2017_lec15.pdf Perusideat säteenseurannasta: heijastus, taittuminen, realismin lisääminen sädekimppujen vs. yksittäisten säteiden avulla. Esim. pehmeät varjot, antialiasointi, "motion blur", linssitarkennuksen simulointi. Maininta rekursion lopetusehdoista ja säteenseurantakoodin nopeuttamisesta esim. Kd-puilla. Toisella puoliajalla: Materiaalin mallintaminen, fysikaalinen ja mallinnettu valon heijastuminen. BRDF perusidea. Phongin valaistusmalli. Mainintoja edistyneemmistä malleista.

Luento 16: tiea311_2017_lec16.pdf Alussa Instanssi 2017 debrief: hyvin meni, kurssilaiselle kakkossija democompossa ja opettajalle vastaava sijoitus 4 kilotavun rajoitetussa sarjassa. Kunniakirjat seinälle, ja kohti seuraavia haasteita! Ensimmäisellä puoliajalla kurssin toiseksi viimeinen varsinainen sisältöasia: Tekstuurikuvat, kärkipisteittäiset tekstuurikoordinaatit ("uv-koordinaatit", sisäpisteiden laskeminen interpoloimalla kolmion painopistekoordinaateilla (ts. barysentrisillä koordinaateilla). Tekstuurien käyttötarkoituksia. Varjostinohjelmat ja Oscar-palkinnon arvoinen pseudosatunnaisalgoritmi (Ken Perlin). Toisella puoliajalla poimintoja kahdesta MIT-kurssin loppupuolen luennosta: Näytteistys (engl. sampling), alias-ilmiö ja antialiasoinnin perusidea. MIP-kuvaukset. Globaali valaistus, BRDF:n Monte Carlo -integrointi, avainsanoja ja ideoita approksimaatioihin ja välimuistitukseen perustuvista tekniikoista vähentää laskennallista vaativuutta.

Luento 17: tiea311_2017_lec17.pdf Rasteroinnista: ennakointia syventävän jatkokurssin asioista. Toisella puoliajalla loppukeskustelu: mitä opittiin ja mitä olisi haluttu oppia.

Demot

Linkki demo-ohjeisiin: https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-837-computer-graphics-fall-2012/assignments/.

Jokainen tehtävä arvostellaan skaalalla 1-5, ja kurssin arvosanaksi tulee keskiarvo. Kurssin läpäisemiseksi jokainen tehtävä on palautettava vähintään minimivaatimuksilla, ja lisäksi on läpäistävä plagiointia/siipeilyä ehkäisevä varmistustentti.

Assignment 0

Deadline: pe 27.1.2017

Palautustapa:

Assignment 1

Deadline: ti 21.2.2017

Palautustapa:

  • Tasan yksi tiedosto, vastaus.zip, sähköpostin liitetiedostona
  • Tiedostossa vastaus.zip täytyy olla seuraavanlainen sisältö:
  • Vastaanottajat paavo.j.nieminen@jyu.fi ja jarno.m.kansanaho@jyu.fi (tasan 2 kpl)
  • Postin otsikko tasan "Assignment 1 palautus"
  • Tehtävä tarkastetaan seuraavasti: puhtaaseen hakemistoon, jossa on mallikoodi, avataan palauttamasi vastaus.zip (jolloin muuttamasi tiedostot korvaavat mallikoodin). Koodi käännetään Linuxilla (ts. älä linkitä Windowsin tai Macin systeemikirjastoihin!) ja ajellaan itsearviosi mukaisilla swp-tiedostoilla ja tehtävänannon mukainen toimivuus todetaan visuaalisesti.
  • Vaatimukset:

    Assignment 2

    Deadline: pe 3.3.2017 (Deadlineja siirrettiin +1vko; force majeure: opettajan vatsatauti ja toisen suunniteltu poissaolo)

    Palautustapa: (olennaisesti sama kuin viimeksi)

  • Tasan yksi tiedosto, vastaus.zip, sähköpostin liitetiedostona
  • Tiedostossa vastaus.zip täytyy olla seuraavanlainen sisältö:
  • Vastaanottajat paavo.j.nieminen@jyu.fi ja jarno.m.kansanaho@jyu.fi (tasan 2 kpl)
  • Postin otsikko tasan "Assignment 2 palautus"
  • Tehtävä tarkastetaan seuraavasti: puhtaaseen hakemistoon, jossa on mallikoodi, avataan palauttamasi vastaus.zip (jolloin muuttamasi tiedostot korvaavat mallikoodin). Koodi käännetään Linuxilla (ts. älä linkitä Windowsin tai Macin systeemikirjastoihin!) ja ajellaan itsearviosi mukaisilla tiedostoilla ja tehtävänannon mukainen toimivuus todetaan visuaalisesti.
  • Vaatimukset:

    Assignment 4

    Deadline: pe 10.3.2017 (ts. kurssin viimeinen päivä! Aktiivisen ohjauksen osalta kioski kiinni ja siirryttävä kevään 2. periodin kursseja kohti! Teknisesti palautuksia saa tehdä myöhemminkin, sitten kun on omasta mielestä valmista.)

    Palautustapa: (olennaisesti sama kuin viimeksi)

  • Tasan yksi tiedosto, vastaus.zip, sähköpostin liitetiedostona
  • Tiedostossa vastaus.zip täytyy olla seuraavanlainen sisältö:
  • Vastaanottajat paavo.j.nieminen@jyu.fi ja jarno.m.kansanaho@jyu.fi (tasan 2 kpl)
  • Postin otsikko tasan "Assignment 4 palautus"
  • Tehtävä tarkastetaan seuraavasti: puhtaaseen hakemistoon, jossa on mallikoodi, avataan palauttamasi vastaus.zip (jolloin muuttamasi tiedostot korvaavat mallikoodin). Koodi käännetään Linuxilla (ts. älä linkitä Windowsin tai Macin systeemikirjastoihin!)
  • Vaatimukset:

    HUOM: Handoutin listan kohta 16 eli tekstuurikartta ei kuulu maksimitavoitteeseen, tosin se vaikuttaa aika triviaalilta lisäykseltä, jos siihen asti on saatu tehtyä ja haluaa brassailla.

    HUOM: Alkuperäisistä kahden periodin kurssiin mitoitetuista tehtävistä jätettiin pois puolet Assignment 2:sta, Assignment 3 kokonaan ja Assignment 5 kokonaan, koska oma introkurssimme on periodin mittainen. Suurin piirtein vastaavasti luennoilla käytiin läpi noin 50% MIT OCW:n täyden lukukauden mittaisesta kurssista.

    Vapaaehtoinen lisätyö: "jotain siistiä" kurssin sisältöä soveltaen

    Byrokratia: Lisäharkka ei vaikuta arvosanaan, joka määräytyy yllä mainittujen Assignmentien laajuuden mukaan. Sen sijaan lisäharkasta saa +1 op muutoinkin hyväksytyn kurssin laajuuteen, ts. 6 op laajuus. Sen vuoksi on ajankäytön mielessä tärkeää, että käytät tähän maksimissaan 27 tuntia kurssin aikaa, mikä vastaa tuota 1 op työmäärää, etkä lähde yrittämään tätä, jos perusvaatimusten läpäisy vaarantuisi lisäprojektin vuoksi. Tätä ei siis merkitä erillisenä vaan ainoastaan normaalin 5 op kurssisuorituksen päälle!

    Deadline: 3.3.2017 ("Instanssi 2017 demo" -optio) tai kurssin perusosan jälkeen (jokin muu toteutustapa). Tämän hetken tiedon mukaan suoritusmahdollisuus on 1.7.2020 asti, jolloin ehdin vielä tarkastaa vastauksen ja merkitä opintopisteet nykyisen määräaikaisen työsopimukseni puitteissa. Toivottavasti kevään 2017 kurssilaiset ovat kuitenkin tuossa vaiheessa jo valmistuneet!

    Vaihtoehtoiset toteutustavat (4 kpl) speksattu alla.

    Vaihtoehto 1: Tuotos Instanssi 2017 demokompoon

    Vaihtoehto 2: Vastaava tuotos jälkitoimituksena Instanssi 2017 -tapahtuman jälkeen

    Vaihtoehto 3: Jotain muuta "siistiä" (mielestäsi), missä kurssin sisältöä sovelletaan

    Vaihtoehto 4: Alkuperäisen kurssin Assignment 5