Praktikum 14: Advanced Shading (Ripples, Bump-mapping)

  • Alusprogramm: (zip)
    Tänases praktikumis tutvume kahe ilusa efektiga: vee lainekeste simuleerimine ning bump-mapping.
    Mõlemad efektid on levinud demo-programmeerijate seas, ning mõlemad kuuluvad "pixel-shadingu" alla graafika-konveieris (niiet kui te tahaksite neid OpenGL abil realiseerida peaksite kirjutama enda shaderit CG või GLSL abil).
    Ülesanded lühidalt: laadige maha alusprogrammi ning pakige lahti. Uurige programme bumpmap_sample ning ripples_sample kataloogis bin. Ülesandeks on realiseerida selliseid efekte ise, kasutades antud alusprogramme.
    Vee ülesande kohta lugege näiteks siit. Teie ülesandeks on aga mitte realiseerida kiirte refraktsiooni, nagu tolles artiklis kirjeldatud, vaid hoopis peegeldust. S.t. simuleerige mitte sellist situatsiooni kus me näeme seda mis "paistab läbi vee põhjast", vaid kus vedelik on ideaalne peegeldaja ning me näeme seal pildi n.ö. "peegeldatud laest". Tõsi küll, sobivate parameetrite puhul on visuaalne tulemus peaaegu sama mis refraktsiooni puhul. Vastava valemi tuletust palun kommenteerida (näiteks kohe koodi sees).
    Bump-mappingu kohta soovitan S. Buss-i raamatu V. peatüki ning muidugi Googlit ka.
    Mõlema ülesande puhul on "otsesed" realisatsioonid päris aeglased. Eraldi ülesandeks on neid optimeerida kasutades look-up tabeleid seal kus vaja. See illustreerib suhteliselt tüüpilise situatsiooni nii demo- kui ka shaderite programmeerimisel kus suur osa keerukusest on just optimeerimises.
    Nii esimese kui ka teise ülesande "tavaline" versioon annab 0.5 punkti. Mõlema puhul saab optimeeritud versiooni eest veel ühe lisapunkti (kokku seega maksimaalselt 3).
    Optimeeritud versioon on selline mis jookseb enam-vähem sama kiiresti kui näitelahendus (ning mitte selle pärast et te testite seda mõnda mega-kiire arvuti peal vaid kuna koodis kasutatakse look-up tabeleid ja muid trikke mis teile pähe tulla võivad)
    Selle praktikumi põhisõnumid:
    • Kavala pixel-shadingu abil saab teha lahedaid efekte.
    • Lahedaid efekte on mõnikord raske programmeerida efektiivselt. Eelarvutamine on sinu sõber.
    • Raytracing-tüüpi arvutusi võib teha mitte ainult raytracing-põhises 3D mootoris (neid samu laineid võis realiseerida ka OpenGL-iga)
    • Tutvu differentsiaalvõrranditega, nendega tehakse mitte ainult laineid vaid ka muid füüsikalisi simulatsioone.
  • Viited
    • Lainedest:
      • G. Willemse. The Water Effect Explained. (html)
      • L. Lardinois. Interactive Water Effect. (html)
      • A. Iglesias. Computer graphics for water modeling and rendering - a survey. (pdf)
      • S. Leal. Modeling Realistic Water and Fire. (pdf)
      • H. Seyringer. Ocean Waves Tutorial. (html)
      • Füüsikahuvilistele: http://www.navier-stokes.net/
    • Bump-mappingu kohta vt. S. Buss-i raamatu V. peatüki. Ning Google ka muidugi.

Praktikumiülesandeid tuleb esitada selle lehe kaudu. Esitamise tähtaeg - järgmisele praktikumile eelnev kesköö. Ülesannete eest saab kuni 3 punkti. Norm on 2.

edit