CS-C2100 - Ohjelmointistudio 1, 14.09.2020-20.12.2020
This course space end date is set to 20.12.2020 Search Courses: CS-C2100
Oldskool Demo!
Tällä tehtäväkierroksella tarkoituksena on toteuttaa oldskool demo, josta näytettiin esimerkkejä tämän viikon luennoilla. Demon voisi sanoa muistuttavan ohjelmoituja musiikkivideoita, joissa kuviot ja muodot liikkuvat ruudulla. Opiskelijat voivat itse päättää demonsa efektit ja aiheen.
Oldskool -demo tarkoittaa tyypillisesti sitä, että demo suoritetaan aiemmin sovitulla vanhalla tietokoneella. 90-luvulla tietokoneissa ei ollut vielä 3D-grafiikkakortteja, minkä vuoksi monet efektit ovat pitkälti 2D -maailmassa. Demossa voi olla esimerkiksi liehuva lippu, koostua liikkuvista ympyröistä tai olla esimerkiksi Star Warsin hyperspacen kaltainen toteutus. Demoissa on lähes poikkeuksetta monta eri tällaista ohjelmoitua "efektiä", jotka esitetään peräkkäin.
Alla on listattuna linkkejä Youtube-videoihin, jotka avaavat hieman tarkemmin sitä, mitä demolla tarkoitetaan ja toivottavasti antavat myös ideoita demojen toteutukseen. Osa esimerkkien demoista on todella vaativia toteuttaa, emmekä vaadi niin monimutkaisia demoja tällä kurssilla.
Demoja
Second Reality: Future Crew https://www.youtube.com/watch?v=ugPZnsRHUkc Assembly 93' democompon voittaja. Katsottiin luennolla
Intrinsic Gravity: Still https://www.youtube.com/watch?v=-ZxPhDC-r3w Pitkälti mustavalkoinen ja vahvasti graafinen demo.
Amiga-Demo Spaceballs vuodelta 92. https://www.youtube.com/watch?v=89wq5EoXy-0
Efektejä
Tuliefekti: https://lodev.org/cgtutor/fire.html Ttuli lähtee liikkeelle kuvan alalaitaan arvotuista mustista ja kirkkaista pikseleistä. Liekki kasvaa kun kuvaa käydään läpi ylhäältä alas, laskemalla rivillä näkyvä osa liekkiä sen alapuolella olevista pikseleistä. Kun koko kuva on laskettu läpi, arvotaan sivun alalaitaan uudet pikselit ja käydään kuva taas läpi ylhäältä alas rivi kerrallaan.
Parallax starfield : https://www.youtube.com/watch?v=u42UiIlNp0g Tämä efekti on helppo toteuttaa O1:n kirjastoilla Flappya/Constellation -tehtävän piirtoa mukaillen. Kaukana olevat tähdet ovat himmeämpiä ja putoavat hitaammin jolloin syntyy vaikutelma syvyydestä.
3D-starfield : https://www.youtube.com/watch?v=E42_kq6_zD8 Tässä efektissä jokaisella pisteellä on x- ja y- ja z- koordinaatti. z-koordinaattia muutetaan vähitellen ja x- ja y- koordinaatit skaalataan näin x_kuvassa = x * vakio / z
.
Voxel terrain : https://www.youtube.com/watch?v=zltOnwH_VSU Tällaista grafiikkaa varten tarvitaan yleensä kuva, joka jokaisen pikselin kirkkaus on sen korkeus. Kun halutaan piirtää "3d-kuva" lähdetään kauimmaisesta rivistä ja piirretään jokaisen pikselin kohdalle saman korkuinen siiva kuin mikä pikselin kirkkaus on. Seuraava rivi peittää osan taaimmaisesta rivistä jne. Maisemaan saa varjoja laskemalla kirkkauseron kahden vierekkäisen pikselin välillä ja säätämällä tällä piirretyn viivan kirkkautta. Pisteen värin saa myös haluttaessa suoraan korkeudesta ja valitsemalla värit hyvin voi loputulos näyttää, kuten videossa, maisemalta vuorineen.
Muuta inspiraatiota
How To Draw With Code | Casey Reas : https://www.youtube.com/watch?v=_8DMEHxOLQE
Glslsandboxista löytyy paljon ideoita (ja koodiakin) Glslsandbox : http://glslsandbox.com/e#50555.0
Pouet.net, valtavasti demoja ja linkit youtube-videoihin : pouet.net
Millainen demo voisi olla?
Useampana vuonna monen ryhmän demon aiheena oli joulu tai itsenäisyyspäivä.
- Lumisade joka laskeutui talojen ja kuusten ylle (variaatio starfieldistä - mutta kun piste piirretään kohtaan jossa se koskee taustakuvaan, se jää paikalleen osaksi kuvaa, jolloin lumi kinostuu)
- Liehuva Suomen lippu: Jos lipun kuvan piirtää vasemmalta oikealle "irrallisina" pystyviivoina ja liikuttaa jokaisen viivan alareunaa vaikkapa sin-funktiolla jonka amplitudi ja vaihe muuttuvat eri kuvissa, näyttää kuva väreilevän. Jos myös x-suuntaa muuttaa jollain tavoin, on lopputulos vielä hienompi. Kuten voxel-esimerkissä, voi sin-funktiosta ottaa myös vihjettä pisteen kirkkauteen jolloin lippu näyttää aidommalta.
- Tuli takassa : Fire Effect (katso youtube video)
- Lentävä joulupukki (piirretään liikkuva kuva lumisade-efektin päälle)
- Erilaisia joulukuusia piirtävä demo
Vuonna 2017 ideoiden joukossa olivat esim. hyperspace efektin päällä lentävä Millenium Falcon asiaan kuuluvalla taustamusiikilla, yksinkertaiset 3d-moottorit, erilaiset generative-art teeman mukaiset ympyröitä, viivoja jne päällekkäin piirtävät ja värejä tehokkaasti käyttävät ideat: (https://www.google.com/search?q=generative+art&tbm=isch) jne.
Tänä vuonna olen hämmästynyt jollei demossa ole yhtään korona- tai Trump-aiheista osuutta. :)
Hyvin suunniteltu on puoliksi tehty
Aloitetaan demo pohtimalla millaisia juttuja olisi kiva tehdä. Koska kyseessä on oldskool-demo, ei lopputuloksen tarvitse olla 3D-grafiikan viimeisintä huutoa. Kertokaa Teams-kanavalla muille millaiset efektit ajattelitte toteuttaa, ja mitä ideoita teillä on niiden toteuttamiseen. Voimme yhdessä pohtia miten niitä kannattaa lähteä toteuttamaan.
Laittakaa suunnitelmaan (viestiin) seuraavat:
- Ryhmän nimi (keksikää jotain raflaavaa)
- Demon nimi (jälleen jotain hauskaa)
- Ryhmän jäsenet (ja taiteilijanimet)
- Kuvaus tehtävistä efekteistä ja lyhyt sanallinen kuvaus kuinka ne voisi rakentaa. Tähän ei tarvita koodia, vaan kuvaus riittää. (Toki koodiakin saa laittaa mukaan)
Ryhmätyöstä
Demo-projekti toteutetaan pienryhmissä, kuten vaikkapa Puzzlescript aiemmin kurssilla. Ryhmä voi olla sama kuin aiemmin, mutta tähän voi halutessaan muodostaa myös uuden ryhmän. Ryhmä voi keskenään toteuttaa muutaman selvästi monimutkaisemman demoefektin tai vaihtoehtoisesti ryhmän jäsenet voivat toteuttaa omat pienemmät efektit, jotka lopulta yhdistetään yhdeksi kokonaisuudeksi. Tarkoitus on kuitenkin tehdä asioita yhdessä, ei niin että jokainen puuhaa omissa oloissaan. Tämän kurssin tavoitteena on tänä Koronasyksynä yhdessä koodaaminen.
Jos joku ryhmän jäsenistä kuitenkin kokee haluavansa panostaa demon tekemiseen selvästi enemmän aikaa, tällöin hän voi toteuttaa erillisen oman efektin, joka lopullisessa palautuksessa yhdistetään muiden ryhmäläisten efekteihin. Tärkeintä on, että jokainen ryhmän jäsen on mukana demon toteuttamisessa
Toteutus
Tarjoamme projektia varten 2 vaihtoehtoista alustaa, joilla voi toteuttaa luennolla esiteltyjen efektien kaltaisia ideoita ja joka suorittaa demon osuuksia automaattisesti yksi toisensa jälkeen. Pohjat eivät ole esimerkkejä siitä mitä toivomme teiltä.
Huom hae gitin clone-linkki version.aalto.fi:stä
https://version.aalto.fi/gitlab/studio-2020-demos/studio-demo-2020 on Java:n standardigrafiikkakirjastoa swing:iä käyttävä pohja. Swing:in käytöstä on pohjassa joukko esimerkkejä. Tämä on tarjotuista pohjista tehokkaampi.
https://version.aalto.fi/gitlab/studio-2020-demos/studio-demo-o1-2020 on O1:n Flappy-projektia mukaileva pohja joka käyttää O1:n grafiikkakirjastoa. Tämä voi olla monelle kurssilaiselle tuttu.
Annamme tässä poikkeuksellisesti myös vapauksia ryhmille joilla on aiempaa kokemusta ja jotka haluavat haastaa itseään. Ryhmien, jotka valitsevat jonkin yllä annetuista poikkeavan toteutusalustan tulee taata että kaikki jäsenet tuntevat alustan jotta kaikki voivat osallistua projektiin. Mm. Processing sopii tarvittaessa erinomaisesti projektin kasaamiseen. Forkatkaa tällöinkin jompi kumpi pohjista jotta skriptimme löytävät tekemänne projektin automaattisesti.
Palautuksen tulee sisältää kommentoitu lähdekoodi ja kääntyä SBT:llä Jos valitut työkalut ovat erityisen poikkeavat ja assistentin ei voi olettaa asentavan kaikkea tarvittavaa, on mukava jos voit tarjota myös videon ohjelman toiminnasta.
Käytännössä kaikki Scalalla koodattu grafiikkaa ja ääntä tuottava koodi kelpaa.
Palautus
Tehtävä palautetaan version.aalto.fi:n kautta antamalla assarille oikeudet kuten aiemmatkin tehtävät kurssilla.
Laittakaa projektiinne lyhyt README.txt tiedosto, jossa kerrotaan palauttajien nimet ja opiskelijanumerot sekä lyhyt kuvaus siitä mitä kukakin projektissa puuhaili ja miten efektit rakennettiin (mahdolliset linkit lähteisiin voi laittaa myös tänne) Jos haluatte tehdä mieluummin PDF:n niin sekin käy. Ei mielellään word-tiedostoja. Tämä helpottaa assarin työtä jos hän kloonaa projektin itselleen tutkittavaksi /