TIES531 Fysikaaliset mallit tietokoneanimaatioissa - kesä 2018

Idea

Kurssi tarjotaan kesällä 2018 'ad hoc' jatkona kevään kursseille Tietokonegrafiikan perusteet ja Reaaliaikainen renderöinti. Pääkohderyhmä on keväällä 2018 edellämainitut kurssit vähintään kiitettävästi suorittaneet opiskelijat, jotka eivät ole saaneet tarpeekseen matemattisten kaavojen koodaamisen ilosta ja tuskasta. Mainittujen kurssien vahva osaaminen on ehdoton esitietovaatimus. Tarkoitus on opiskella tehokkaasti ja aiempaa itsenäisemmin. Opettaja pyrkii fasilitoimaan oppimista noin viikottaisella lähitapaamisella sekä ottamalla kantaa netistä etsittävän opiskelumateriaalin soveltuvuuteen. Sovitaan kurssin alussa käytännöt ja tavoitteet. Lähtökohtana on, että otetaan sisältöluettelon mukaisia asioita haltuun lukemalla tutoriaaleja ja tieteellisiä julkaisuja ja erityisesti toteuttamalla algoritmeja itse C++ ja OpenGL -alustalla reaaliaikaisen animoinnin kontekstissa. Pidetään kirjaa ajankäytöstä ja todetaan lopussa osaamisen kehitys suhteessa 5 opintopisteen mittaiseen pienoisseikkailuun.

Omalla vastuulla voi nyt ilmoittautua, jos aihe nappaa ja uskaltaa ottaa haasteen vastaan. Aloitussessio on varattu mikroluokkaan Ag B212.2 (Mountains) 23.5.2018 klo 14:15-16:00. Jos ei pääse paikalle, niin ei se mitään. Yritetään alussa sommitella kesän kulku, kuten em. tiedotteessa speksailin. Ilmoittautumalla voi osoittaa intention kurssin suorittamista kohtaan. Paikalle pääsemällä voi tietysti vaikuttaa kuvioon kaikkein eniten.

Suoritustapa

Luetaan, ohjelmoidaan ja reflektoidaan.

HUOM: Pitäkää kirjaa ajankäytöstä, tavoite on 135 tuntia. Kurssimuodon vuoksi kirjanpito on esiehto arvostelulle!

Ehdotan kevyttä päiväkirjamuotoa, jossa on seuraavat huomiot vaikkapa aina istunnon päätteeksi:

  • Työskentelysession kesto (pikkutaukoja ei kannattane laskea vaan loppuaika miinus alkuaika)

  • Mitä tein?

  • Mitä ongelmia jäi (oppimisessa, koodissa)?

Kurssin sisältöä (muovautuu tekemisen edetessä)

Aluksi

Ensimmäistä lukemistoa olisi varmastikin tämä:

https://www.pixar.com/assets/pbm2001/index.html

Lähdetään koodaamisen osalta liikkeelle tekemällä MIT:n graffakurssin Assignment 3 eli partikkelisysteemit. Assignmentit tämän linkin takana

Kaikessa hirveydessään MIT:n luennot 7-10 voivat olla jossain määrin hyödyllisiä. Luennot tästä linkistä

Seuraavaksi

... saa nähdä, mitä tulee :)

Huomioita mikroluokkasessioista

23.5.2018 Aloitussessio

ties531_kesa2018@korppi.jyu.fi on 'Kurssin TIES513 Fysikaaliset mallit tietokoneanimaatioissa ainoa "the" sähköpostilista, jossa toivottavasti paahdetaan sata viestiä päivässä alkaen 23.5.2018 kurssin loppuun saakka!'

Listan postit arkistoituvat jäsenille Korpissa.

Tästä se lähtee. Ensimmäisenä voitais murtaa jäätä ja laitaa listalle lyhyt esittely: kuka olet ja mitä toivot tältä kurssilta.

Sovittiin paikalla olleiden kesken, että pidetään mikroluokassa kaksi tarkistuspistettä viikossa kesäkuun ajan. Paikalla olevat päättivät, että maanantai ja keskiviikko klo 16:15-17:45 on hyvät ajat, koska siihen ehtii tulla paikalle vaikka kesätöistä. Tarkistuspisteitä varten olisi syytä olla listattuna ratkaisemattomia pulmia, joihin voidaan yrittää löytää ratkaisuja porukalla. Varasin näille mikroluokan Sovjet (AgB211.1), kun se oli vapaana kaikkina aikoina.

Muiden projektien vuoksi saatan joutua omalta osaltani perumaan joitain tarkistuspisteitä, mutta näistä tiedottelen erikseen. Joka tapauksessa olisi hyvä, että näette porukalla stabiilisti, vaikka itse en pääsisi paikalle. Itseorganisoituva ryhmätuki!!

MIT:n Assignment 3 -esimerkkikoodi saatiin kääntymään onnistuneesti Linuxilla sekä Windows-läppärillä, johon oli mahdollista asentaa rinnalle vanha VS ja sitä kautta vanha toolsetti. Mikroluokan VS2017:ssä en saanut vielä toimimaan sellaisenaan, koska mukana on vanhan VS:n päällä käännetty mystinen kirjasto. Analyysini on, että se on MIT:n omaa tekoa ilman lähdekoodia. Kyseessä ilmeisesti Rungen ja Kuttan ratkaisumenetelmän toteutus Assignment 3:n käyttämän ParticleSystem -luokan rajapinnalle. Nähdäkseni ei estä tehtävässä vaadittujen omien ratkaisijoiden toteuttamista, jos toistaiseksi poistaa kytkennän RK4:ään (ja kommentoi pois siihen liittyvän koodipätkän). Eli alkuun on mahdollista päästä mikroluokassakin sitä kautta. Katotaan, jos ehdin etsiä ja löytää jonkun valmiin RK4-ratkaisijan, joka olis helppo modata Assignment 3:n rajapintaa tukevaksi. Se ei oo vielä ihan tänään.

Tehdään tää Assn3 nyt ripeästi lämmittelynä ja mietitään sitten seuraava aihe.

Seuraava tarkistuspiste ensi maanantaina Sovjet-luokassa.

28.5.2018 Tarkistuspiste

Assignment 3 pohjakoodi kääntyy kaikilla, ja osalla on jo Euler ja Trapezoid toteutettuna ja nauhamainen jousirakenne toimii. Kangasmallissa vielä debugattavaa. Osalla vielä tehtävään tutustuminen menossa.

Debuggailtiin viivojen piirtämistä vanhassa OpenGL:ssä: Jos valaistusmalli on päällä (niin kuin meidän pohjakoodissa on), niin viivatkin tulee sen kautta. Jos on tarkoitus piirtää rautalankamalli ilman valaistusmallia, niin glDisable(GL_LIGHTING) ennen ja glEnable(GL_LIGHTING) jälkeen viivain piirron tekee tempun.

30.5.2018 Tarkistuspiste

Paikalla 5 tekijää. Assignment 3 edelleen työn alla vaihtelevissa vaiheissa. Kankaat monella mukana. Muutama toteuttanut jo 4. asteen Rungen ja Kuttan menetelmän. Pyritään siihen, että kaikki tekisivät tämän, koska ratkaisijan koodaus on hyvää harjoitusta.

Tuntikirjanpito hallussa - tähän mennessä käytetty noin 10 tuntia tavoitteena olevasta 135:stä. Tilanne näyttää hyvältä. Leikitään vielä Assignment 3:n kanssa ja mietitään ensi maanantaina, mihin suuntaan edetään. Oletus, että SIGGRAPH-tutoriaalin mukaan kohti jäykän kappaleen mallinnusta.

4.6.2018 Tarkistuspiste

Paikalla 2 tekijää. Tavoitteena saada kaikille itse koodattu neljännen asteen Rungen ja Kuttan ratkaisija mukaan partikkelisimulaation. Sitten voi leikkiä huvikseen kangasmallilla hetken. Ylihuomenna mennään kohti jäykän kappaleen simulointia. Siihen ei olekaan pohjakoodia, joten lähdetään scratchistä liikkeelle. Kuitenkin hyvä varmaan käytellä tuttua ja turvallista vecmath-kirjastoa juttuihin, joihin sitä voi soveltaa. Eka tavoitteena olis vaikka saada aikaan muutama luonnollisesti toisiinsa törmäilevä ja painovoimassa putoava kuutio. Katotaan, mihin asti päästään SIGRAPH-tutoriaalin Rigid body -osion avulla.

6.6.2018 Tarkistuspiste

Paikalla 5 tekijää. RK4:t melkein kaikilla tehtynä. Seuraava tavoite: jäykkien kappaleiden dynamiikan simulointi, enklanniksi rigid body dynamics.

Valmista mallikoodia ei suoraan ole, mutta onneksi tässä vaiheessa osataan piirtää kolmioita ja viivoja! Aiemmista kurssitöistä kannattanee varastaa (itseltään ja MIT:n matskuista) soveltuvia koodipätkiä.

Saattaa olla sopivaa käytellä tuttua ja turvallista vecmath-kirjastoa juttuihin, joihin sitä voi soveltaa. Eka tavoitteena olis vaikka saada aikaan muutama luonnollisesti toisiinsa törmäilevä ja painovoimassa putoava kuutio. Katotaan, mihin asti päästään SIGRAPH-tutoriaalin Rigid body -osion avulla.

Pidetäänpä mielessä:

  • Inkrementaali kehitys (ensin objekti ilman fysiikkaa, piirto kuntoon, sitten vasta fysiikkaa mukaan, sitäkin askeleittain)

  • Versionhallinta!

  • Oliomallinnus: valmistaudutaan yleisiin muotoihin, vaikka ehkä ehditään tehdä vain laatikko. Eli RigidBody, josta peritään BoxRigidBody (suurin osa toiminnallisuudesta mennee yliluokkaan)

  • Seuraillaan ohjeen steppejä ja algoritmeja niin oma toteutus ei "divergoi" liikaa

  • Vecmath on tuttu ja turvallinen representaatio. Sieltä löytyy myös kvaternioluokka.

  • Hallitusti voi miettiä, onko kiinteä array hyvä vai olisiko std::vector kivampi. Onko pelkkä taulukko vai RigidBodySystem -luokka? Varaudutaan jollain tasolla siihen, että järjestelmän esineitä tullaan törmäyttelemään toisiinsa. Mutta Keep It Simple aina kun mahdollista!

11.6.2018 Tarkistuspiste

Paikalla 2 tekijää. Työn alla jäykän kappaleen mallintamisen teoriaan tutustuminen. Käytetyt tuntimäärät on läsnäolijoilla vielä aika pienet (20-40), joten nyt tarvitaan tsemppiä tai sadepäiviä. Näitä pittää miettiä ja koettaa koodata, että päästään käsiksi ongelmiin ja ongelmanratkontaan!

13.6.2018 Tarkistuspiste

Paikalla 5 tekijää. Työn alla jäykän kappaleen mallintamisen teoriaan tutustuminen ja puolella porukasta jo koodaaminen. Debuggaamista näyttäisi vielä olevan. Käytetyt tuntimäärät edelleen pienehköt (20-60), joten... sitä tsemppiä, jos ei sadepäiviä tulekaan.

Kun mennään Collision detection -puolelle, on todennäköisesti tarpeen etsiä lisää tietoa SIGGRAPH-tutoriaalin lisäksi. Tutoriaalin lähdeluettelo voi olla yksi alku. Google ja Google Scholar ja sitten yliopiston verkostahan pääsee muihinkin tietokantoihin ja tieteellisiin hakukoneissin (ACM, IEEE, ...).

20.6.2018 Tarkistuspiste

Paikalla 3 tekijää. Työn alla jäykän kappaleen mallintaminen. Kovin paljon tunteja ei ole kertynyt viime viikon jälkeen. Eli samat sanat jälleen tsempistä ja sadepäivistä... Homma vaatii aikaa, ja meillä ilmeisesti on vielä yli puolet ajasta jäljellä!

25.6.2018 Tarkistuspiste

Paikalla 1 tekijä, koska opekin yrittää vähän tehdä jotain, mutta muita ei ole... Agora on lukossa, mutta voin tulla hakemaan ovelta, puhelinnumero 040 576 8507.

27.6.2018 Tarkistuspiste

Paikalla 1 tekijä. Hiljast oli.

2.7.2018 Tarkistuspiste (toiseksi viimeinen heinäkuussa)

Paikalla 2 tekijää.

Ryhdytään alustavasti miettimään, mitä vois tehdä jäljellä olevan ajan puitteissa.

Yksi mahdollinen träkki on koettaa taistella RigidBodyyn mukaan vielä törmäystarkastukset.

Toinen mahdollisuus on hyväksyä, että tiedetään, mitä törmäystarkastuksiin suurin piirtein kuuluisi, mutta siirtyä kuitenkin vielä yhteen uuteen aihepiiriin. Yksi mahdollisuus olisi nestedynamiikka, esimerkiksi Gpu GEMsin luku 38: https://developer.nvidia.com/gpugems/GPUGems/gpugems_ch38.html

Tai ehkä tollanen tutoriaali: https://software.intel.com/en-us/articles/fluid-simulation-for-video-games-part-1

4.7.2018 Tarkistuspiste (toiseksi viimeinen heinäkuussa)

Paikalla 2 tekijää.

Tämä on viimeinen sessio ennen "lomakautta", kuka sitten päättää käyttää tuon kauden mitenkin. Pysytään alkuperäisessä tavoitteessa, että kurssiin käytetään opintopistemäärän mukainen 135 tuntia, jonka ajalta kerrytetään kirjanpito opituista ja askarruttavista asioista.

Tässä vaiheessa ilmeisesti tuntimäärät ovat noin puolivälissä.

Tekemistä loppuajalle:

  • Yksi mahdollinen träkki on koettaa taistella RigidBodyyn mukaan vielä törmäystarkastukset.

  • Toinen mahdollisuus on hyväksyä (about 100 tunnin kohdalla?), että tiedetään, mitä törmäystarkastuksiin suurin piirtein kuuluisi, mutta siirtyä kuitenkin vielä yhteen uuteen aihepiiriin. Yksi mahdollisuus olisi nestedynamiikka, esimerkiksi Gpu GEMsin luku 38: https://developer.nvidia.com/gpugems/GPUGems/gpugems_ch38.html

    Tai ehkä tollanen tutoriaali: https://software.intel.com/en-us/articles/fluid-simulation-for-video-games-part-1

Kaikissa vaihtoehdoissa tarpeen lienee lähdeviitteisiin tutustuminen ja valmiiksi tehtyjen esimerkkien etsiminen. Googlet rullaamaan!

Pari jälkipyykkinä löytynyttä linkkiä:

  • https://research.ncl.ac.uk/game/mastersdegree/gametechnologies/

  • http://www.tara.tcd.ie/handle/2262/18699

Kimmon opastusta nestedynamiikkaan

Jos joku rupee puuhaa fluidimekaniikkaa, niin suosittelen vahvasti tuota pidempää tutoriaalia: https://software.intel.com/en-us/articles/fluid-simulation-for-video-games-part-1 jne. Siinä selitetään aika kattavasti erilaisia toteutusvaihtoehtoja ja niiden eroavaisuuksia. Plus melkein pakasta toimiva demokoodi, johon päästään jo tutoriaalin kolmannessa osassa.

Käytin useamman tunnin siihen, että sain demokoodin toimimaan, joten kirjotin Windows-käyttäjille pikku ohjeet, joilla sen pitäis onnistua vartissa =)

Ladattavat jutut

  • Lataa tutoriaalin source sivun alalaidassa olevasta linkistä https://software.intel.com/en-us/articles/fluid-simulation-for-video-games-part-3/ ja pura se jonnekin.

  • Lataa TBBstä windowsille sopiva versio (tbb2018_20180618oss_win.zip ) githubista https://github.com/01org/tbb/releases ja pura se jonnekin.

Kopioitavat jutut

Todetaan ensin että asioita puuttuu:

  • Avaa VorteGrid.sln Visual Studioon ja hyväksy muutokset.

  • Tee Project->Retarget Project oletusasetuksilla.

  • Buildaamisen pitäisi heittää virheitä "Cannot open include file tbb/...", koska TBB ei ole vielä mukana.

Korjataan tilanne:

  • Luo MjgIntelFluidDemo-kansioon kansio "tbb" ja "lib".

  • Kopioi aiemmin puretusta tbb:stä tbb2018_20180618oss\lib\ia32\vc14 tiedostot "tbb.lib" ja "tbb_debug.lib" lib-kansioon.

  • Kopioi G:\Koodi\C++\PE\tbb2018_20180618oss\include\tbb sisältö kansioon MjgIntelFluidDemo.

VS asetukset

  • Kerrotaan linkkerille mistä libit löytyy: Project -> Properties -> Linker -> Input -> Additional Dependencies -> Edit -> lisää rivit "lib/tbb.lib" ja "lib/tbb_debug.lib". Tää ei varmaan ole oikea tapa lisätä noita? Joku paremmin tietävä voi kommentoida. Toimii kuitenkin.

  • Periaattessa nyt ois kaikki valmiina, mutta käännettäessä saa MSB3073 copy -virheen. Säädetään vielä yks asetus mistä mulla ei ole mitään hajua eli: Project -> Properties -> Build Events -> Post Build Event -> Use in Build -> No.

Jos en unohtanu mitään niin nyt pitäis kääntyä kauniisti, ja Debug x86 asetuksilla saa ajettua demon.

These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.