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:
- Tasan yksi tiedosto, main.cpp, sähköpostin liitetiedostona
- Vastaanottajat paavo.j.nieminen@jyu.fi ja
jarno.m.kansanaho@jyu.fi (tasan 2 kpl)
- Postin otsikko tasan "Assignment 0 palautus"
- Alussa C++:n kommentti, jossa vähintään seuraavat asiat: (1) Tekijän nimi (2) Numeerinen itsearvio 1-5 (ks. vaatimukset alla) ja luettelo toteutetuista ominaisuuksista, joilla itsearvio perustellaan. (3) Vastaus kysymykseen "miltä tehtävä tuntui, ja mikä oli vaikeinta".
- Vaatimukset: 1/5: MIT:n perusosio (handoutin luku 2) oltava tehty. 2-5/5: Lisäksi MIT:n ehdotettuja Easy- ja Medium-lisäominaisuuksia, 1 piste per erillinen toteutettu kohta. HUOM: Hard-osio ylittää kurssin sisältörajauksen; sen saa tehdä harrastelupohjalta ja omalla vastuulla.
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ö:
- muuttamasi lähdekooditiedostot, oletettavasti surf.cpp ja
curve.cpp
- EI binäärejä eikä mallikoodin muuttamattomaksi
jätettyjä tiedostoja!
- README.txt -tiedosto, jossa plaintext-formaatissa (mieluiten
UTF-8 -koodauksella) vähintään seuraavat asiat: (1) Tekijän nimi (2)
Numeerinen itsearvio 1-5 (ks. vaatimukset alla) ja luettelo
toteutetuista ominaisuuksista, joilla itsearvio perustellaan. (3)
Vastaus kysymykseen "miltä tehtävä tuntui, ja mikä oli
vaikeinta".
- itse tehty .swp -tiedosto, mikäli pääsit pistetavoitteeseen,
jossa sen sai tehdä
- muut tarvittavat tiedostot, esim. muutetut renderöintikoodit,
tekstuurikuvat, tmv. jos vahingossa käytit aikaa
edistyneempien lisätehtävien tekemiseen (täten siis
arvosanatavoitteen 5 reilusti ylittäen...)
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:
- Pisteet 1/5: Käyrät (== Kuutiollinen Bezier ja B-spline; V
asettuu oikein, mutta T,N,B ei tarvitse) TAI generalized cylinder - profiilipinta (==
tor.swp toimii; ei tarvitse omaa käyräkoodia)
- Pisteet 2/5: Käyrät JA profiilipinta (edellisen kohdan
minimivaatimuksin)
- Pisteet 3/5: Käyrät JA pyörähdyspinta (== wineglass.swp toimii)
JA profiilipinta (saa olla epäjatkuvuuksia weird.swp:ssä, mutta oman
käyräkoodin tulee tehdä V, T, N ja B ohjeen mukaisesti niin että
pinnat on OK vähintään pyyhkäisykäyrän 4:n peräkkäisen
kontrollipisteen osamatkalla)
- Pisteet 4/5: Käyrät JA pinnat (em. kohdan vaatimuksin) JA [ oma
luovasti tehty swp-tiedosto TAI oma proseduraalinen erikoiskäyrä
(ts. esim. lisätehtävässä mainittu Trefoil knot tmv.) ]
- Pisteet 5/5: Kaikki edelliset JA suljetun pyyhkäisykäyrän
orientaation epäjatkuvuus korjattu ohjeen mukaan (weird.swp ja
weirder.swp toimivat nätisti; Easy-lisätehtävä!)
- HUOM: Muut lisätehtävät ylittävät meidän
maksimiarvosanatavoitteen; niitä voi tehdä omalla ajalla ja omalla
vastuulla. Assignment 2:een kannattaa kuitenkin ajankäytön mielessä
siirtyä pian, jos Assignment 1 on läpi ja siihen on käytetty riittävästi aikaa. Tekemistä on
vielä, että saadaan aihepiirien laajuus kattamaan
haaveena oleva tavoite (so. noin 50% OCW:n kurssista)!
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ö:
- muuttamasi lähdekooditiedostot
- EI binäärejä eikä mallikoodin muuttamattomaksi
jätettyjä tiedostoja!
- README.txt -tiedosto, jossa plaintext-formaatissa (mieluiten
UTF-8 -koodauksella) vähintään seuraavat asiat: (1) Tekijän nimi (2)
Numeerinen itsearvio 1-5 (ks. vaatimukset alla) ja luettelo
toteutetuista ominaisuuksista, joilla itsearvio perustellaan. (3)
Vastaus kysymykseen "miltä tehtävä tuntui, ja mikä oli
vaikeinta".
- muut tarvittavat tiedostot, esim. muutetut renderöintikoodit,
tekstuurikuvat, tmv. jos vahingossa käytit aikaa
sellaisiin (täten siis arvosanatavoitteen 5 reilusti
ylittäen...)
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:
- Pisteet 1/5: MatrixStack, tiedostonluku, ja palloja piirtyy johonkin (saa olla "väärissä paikoissa")
- Pisteet 2/5: MatrixStack, tiedostonluku, ja pallot piirtyy oikeellisesti nivelten kohdalle
- Pisteet 3/5: Edelliset ja lisäksi ohjeen mukaiset tikut pallojen välissä
- Pisteet 4/5: Edelliset ja käyttöliittymä ohjeen mukaan
- Pisteet 5/5: Edelliset ja ensimmäinen Easy-lisätehtävä, ts. laajennos niin, että voi olla useita tikku-ukkoja. HUOM: Käyttöliittymää ei tarvitse laajentaa useille ukoille, ts. saavat esim. "liikkua samaan tahtiin"
- HUOM: Hand-outin lukua 4 ja siihen liittyviä skinning-tehtäviä ei tarvitse tehdä. Jos on jo lipsahtanut, niin käypi päikseen Easy-lisätehtävän kanssa pistetavoitteeseen 5/5.
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ö:
- muuttamasi lähdekooditiedostot
- EI binäärejä eikä mallikoodin muuttamattomaksi
jätettyjä tiedostoja!
- README.txt -tiedosto, jossa plaintext-formaatissa (mieluiten
UTF-8 -koodauksella) vähintään seuraavat asiat: (1) Tekijän nimi (2)
Numeerinen itsearvio 1-5 (ks. vaatimukset alla) ja luettelo
toteutetuista ominaisuuksista, joilla itsearvio perustellaan. (3)
Vastaus kysymykseen "miltä tehtävä tuntui, ja mikä oli
vaikeinta".
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:
- Pisteet 1/5: Ohjelma tuottaa pikselikuvan, jonka koko ja nimi määrittyvät komentoriviltä vähintään siten, että esimerkeissä olevat vakiomuotoiset komentorivit toimisivat sellaisenaan (ts. saa olla esim. kovakoodattu kuvan kooksi stoi(argv[4]) vaakaan ja stoi(argv[5]) pystyyn ja tulostiedoston nimeksi argv[7]!). Esimerkistä "scene03_sphere.txt" piirtyy ympyrän muotoinen hahmo, jonka ei tarvitse olla varjostettu, eikä edes oikeellisesti skaalattu littanaksi. (Handoutin luvun 4 listasta kohdat 1-7, saa jäädä bugeja ja "placeholder" -tyyppisiä kovakoodattuja toteutuksia, joiden tarkoitus olisi ainoastaan tukea yksittäisen osion visuaalista debuggausta myöhemmässä kehitystyössä). Tässä toteutuu minimaalinen osaamistavoite: Tehtävän tähän asti toteuttanut opiskelija osaa ottaa haltuun 1830 rivin (vecmath-kirjastoineen 5350 rivin) mittaisen C++ -malliohjelman siinä määrin, että löytää siitä ohjeiden avulla sopivat paikat grafiikkaohjelmassa tarvittavien ominaisuuksien lisäämiseksi ja aloittaa ominaisuuksien lisäämisen inkrementaalisesti vähän kerrallaan. (En vielä välttämättä hakisi koodarin töitä tämän tavoitteen saavuttamisen perusteella, mutta kurssin suorittamiseksi riittää OK! Minimitavoite perustuu havaintoihin kevään 2017 kurssin mikroluokkaohjauksissa ja deadlineen mennessä palautettujen tuotosten pieneen määrään).
- Pisteet 2/5: Edellisen lisäksi vähintään joko pallon normaalivektorin laskenta ja visualisointi tai etäisyyden visualisointi. Saa olla bugeja, mutta pallokuvassa ei saa enää olla vakioväri, vaan jokin (selvästi ympyräsymmetrinen) sävytys, jossa käytetään Hit-olion lopputilasta luettavia asioita. Pallo saa edelleen olla origossa ilman muunnoksia.
- Pisteet 3/5: Edellisten lisäksi diffuusi valaistus toimii vähintään origossa sijaitsevalle yksikköpallolle. (ts. Handoutin luvun 4 kohdat 1-11 alustavalla toteutuksella)
- Pisteet 4/5: Pallon lisäksi vähintään taso. Muunnokset ja perspektiivi toimivat siten, että tasoista ja palloista koostuvat malliesimerkit piirtävät primitiivit oikeisiin paikkoihin suhteessa handoutin mallikuviin. Saa olla pientä summittaisuutta, bugia tai kummaa valaistusilmiötä, mutta kuvien pitää piirtyä tunnistettavasti mallikuvien kaltaisiksi. (Handoutin luvun 4 kohdat 1-14)
- Pisteet 5/5: Handoutin luvun 4 listasta on toteutettu kohdat 1-15 ja esimerkkikuvat piirtyvät läheisesti saman näköisiksi kuin handoutin esimerkeissä. Pieniä häröjä saa olla... niistä ei yksittäisen pikkukurssin aikaskaalassa päästä eroon, ja se on vaan maailman fakta. Myös maksimitavoitteen laajuus määräytyi havaintojen mukaan kevään 2017 kurssilla, joten siitä saapi kiittää (tai syyttää) vuoden 2017 kurssikerran eturintaman suorittajia.
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
- Tämän voi tehdä, jos kokee, että demoscene-tuotoksen tekeminen on omasta mielestä "siistiä" ja pystyy osallistumaan omakustanteisesti Linkki Jyväskylä ry:n järjestämään tapahtumaan Instanssi 2017.
- Tuotoksen tulee olla Instanssi 2017 -tapahtuman sääntöjen mukainen tuotos joko kompossa Instanssi-demo (suositeltava, ajankäytön mielessä) tai Pikkiriikkinen demo (jossa 4 kilotavun kokorajoitus todennäköisesti aiheuttaa kurssin sisällön mielessä tarpeetonta teknistä säätöä ja ajankäyttöä).
- Älä ole tyhmä: Tuotoksen on oltava omaa luovaa tuotosta. Se kyllä huomataan viimeistään ajan mittaan, jos olet ottanut esimerkkikoodin ja vaihtanut siitä pari parametria erilaisiksi ja väität omaksi tekeleeksi. Siitä seuraa vaivalloista häpeää. Tee oma luova tuotos!
- Ole kuitenkin fiksu: Luova tuotos saa ilman muuta (ja sen kannattaa) perustua valmiiseen esimerkkirunkoon, jota muutat riittävän paljon, että syntyy uusi teos. Maalaisjärki! Esim. mallikoodissa voi olla pyörivä kuutio, mutta jos tuotoksessasi on lopulta hämähäkkirobottiarmeija, niin eiköhän se ole kaikkien mielestä aika eri juttu kuin se alkuperäinen pyörivä kuutio! (Paitsi jos se hämähäkkirobottiarmeija on copy-pastattu jostain toisesta tutoriaalista.. no siis maalaisjärki ja luovuutta kehiin!)
- Älä ole tyhmä: Pohjana olevan esimerkkirungon lisenssin täytyy sallia uuden tuotoksen tekeminen, ja vähintään tuotoksen mukana olevassa README.txt (tmv.) tekstitiedostossa tulee avoimesti kertoa, mihin pohjaan oma tuotos perustuu, ja mikä taas on omaa kädenjälkeä. Vain, jos alkuperäinen koodi on selkeästi "public domain", ts. tekijä ei näe tarpeelliseksi ns. "omistaa" sitä millään tasolla, tai se on muuten selkeästi yksinkertaista kaikkien tuntemaa peruskauraa, voit käyttää sitä kuin muutakin "julkista omaisuutta" kuten metsässä pihapiirien ulkopuolella kasvavia marjoja...
- Ole kiltti: Jos pohjana on kurssin Assignment-esimerkit, niin älä julkaise koodeja avoimena lähdekoodina, vaikka Instanssin säännöt yleisesti ottaen näin suosittelevat. Kyseessä olisi silloin julkinen mallivastaus demoihin, jotka palvelevat tarkoitustaan vain ilman mahdollisuutta katsoa/kopioida suoraa mallivastausta! Kurssi demoineen on kohtalaisen briljantti ja ilmiselvästi suurella vaivalla kyhätty, emmekä halua vetää mattoa jalkojen alta globaalilta yleisöltä, joka voi käyttää samoja demoja oppimiseen ja opettamiseen!
- Kaikki edeltävä sanottuna, tuotos saa pohjautua kurssin mallikoodeihin, joita muuntelet tai sovellat luovasti. Parhaimmillaan sovellat aihepiirejä, joita tähän asti on käsitelty muutenkin, ts. OpenGL, GLU, GLUT, splinet, kolmioverkot, hierarkkinen malli.
- Demoscene-tuotoksen mielessä pelkkä kurssin demojen modaaminen ei vie aivan perille, koska ilman lisätemppuja mukana ei ole mitään äänimaailmaa. Yritetään löytää esimerkkipohjia, joissa olisi myös audiogenerointi mukana...
- Älä ole tyhmä: Vaikka meillä on kirjastoja (mm. SDL) joilla saa biisin soimaan tuotoksen taustalla, niin tekijänoikeudella suojattua / muualla julkaistua musaa ei saa käyttää! Ts. vaikkapa piippaus tai ylös-alas menevä siniaalto ja ministi satunnaiskohinaa (volyymillä, joka ei hajota kaiuttimia tai kuulijoiden korvia) on OK, mutta ripattu biisi ei missään nimessä!!
- Jos tuotoksia tulee paljon (parhaassa tapauksessa tulee!) voi olla että esim. audion puuttumisen takia tai "juryn kokeman näennäisen tylsyyden" vuoksi tuotos saatetaan jättää näyttämättä pääkilpailun finaalissa. Ei huolta: Instanssi 2017 organisaatio on luvannut, että lain mukaiset tuotokset (ei siis lainvastaisia törkeyksiä tmv.) näytetään tapahtumassa screenillä varsinaisten kilpailujen jälkeen, vaikkeivät ne olisi mahtuneet aikataulusyistä rajalliseen, varsinaiseen kilpailufinaaliin. Eli lain ja sääntöjen mukaisille tuotoksille on nyt luvattu varmaa "big screen -aikaa" jossain vaiheessa yötä.
- Itselle tutuin pohjakoodi Windowsille (Visual Studio C++) on
Inigo Quilezin
System1k4k:http://www.iquilezles.org/code/isystem1k4k/isystem1k4k.htm
- tuo pohja on kohtalaisen "härö", ohjelmistoteknisesti
perverssi, tarkoitettu 1k ja 4k -kilpailusarjoihin, joihin ei nyt
kannata rajoittua, mutta varsinkin pohjaversio "i4k_OGL"
antaa ilman mitään ylimääräistä helinätä OpenGL:llä pyörivän kuution
ja audiogenerointimahdollisuuden, minkä jälkeen loppu onkin kurssilta
tuttua C++:aa ja OpenGL 1.1:tä!! Siihen vaan kopsii vielä vaikka
kurssin vecmath-kirjaston, niin ollaan olennaisesti (GLUTia vaille)
täysin samassa ympäristössä kuin Assignmenteissa!
- Palautustapa: Osallistuminen mainittuun kilpailuun, mikä ilmentää suoraan
henkilökohtaista vastuuta tuotoksen omintakeisuudesta.
Vaihtoehto 2: Vastaava tuotos jälkitoimituksena Instanssi 2017 -tapahtuman jälkeen
- Jos on kiirettä ja kalenteri yskii verta helmikuussa 2017, voit
kurssityön mielessä toteuttaa vastaavan tuotoksen (harmillisesti,
toki) Instanssi 2017 -tapahtuman jälkeenkin. Sehän jäisi kuitenkin
pohjaksi jotain myöhempää julkista esitystä tai kilpailua tmv. varten,
mikäli harrastus kiinnostaa pidemmän päälle.
- Palautustapana uskottava
esittely (käytännössä lähdekoodi ja README).
Vaihtoehto 3: Jotain muuta "siistiä" (mielestäsi), missä kurssin sisältöä sovelletaan
- Tämän voi tehdä, jos esim. (1) kokee, että demoscene ei ole
omasta mielestä "siistiä", (2) jos helmikuun aikataulu ei
salli, tai (3) jos ei ole halua tai ei pysty osallistumaan Instanssi
2017 tapahtumaan omakustanteisesti (vähintään 5 euron konepaikaton
lippu tarvitaan kilpailuosallistumiseen).
- Rajoitteet: Sovella kurssilla opittua johonkin uuteen, luovaan, tuotokseen.
- Suosituksia: Parhaimmillaan siirrät konseptit WWW-ympäristöön, ts. HTML5, JavaScript, WebGL
- Mahdollisuuksia: Tuotos voi olla myös interaktiivinen, toisin kuin perinteinen "demo". Yleisiä JavaScript-kirjastoja, kuten Three.js, AngularJS, voi käyttää.
- Esimerkkejä: "Opetuspeli" tai havainnollistava WWW-kikkare jollekin grafiikkakurssilla käydylle teoria-asialle. Eli esim. Splinet selkeämmin / muuten hienommin kuin luennolla esitelty JavaScript-demo, tai vastaava juttu näkymägraafin läpikäynnille, pintojen kolmioindeksien määrittämiselle tmv.
- Lisää esimerkkejä: Datan visualisointityökalu jonkun muun meneillään olevan kursssin tai harrastuksen puitteissa. Algoritmin tai tietorakenteen visualisointi... Pieni interaktiivinen piirto-ohjelma tai animaatiotyökalu.. Pieni peli, jossa itse tehty grafiikkakoodi...
- Kiteytettynä: "kurssilla TIEA311 opittua soveltava luova tuotos" max. 27 tunnissa toteutettuna toimien joko tavallisessa WWW-selaimessa tai kurssilla käytetyn GLUT-kirjaston päällä (C++98, kääntyy ilman käyttöjärjestelmäspesifejä tai muitakaan ylimääräisiä kirjastoja).
- Palautustapana uskottava esittely (käytännössä lähdekoodi ja README)
Vaihtoehto 4: Alkuperäisen kurssin Assignment 5
- Tämän voi tehdä, jos jäi kytö käydä läpi käytännön harjoitteena
säteenseuranta vielä säteenheiton päälle.
- Alkuperäisen hand-outin ohjeita noudattaen, max. 27 tuntia
tehokasta tekemistä ja raportointi lopputulemasta, mihin se aika
riitti ja mihin ei.
- Palautustapana uskottava esittely (käytännössä lähdekoodi ja
README)