Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pgapi:teme:2024:01 [2024/11/15 09:03]
silviu.stancioiu00 [Tema 1]
pgapi:teme:2024:01 [2024/12/08 16:55] (current)
silviu.stancioiu00 [Teren]
Line 3: Line 3:
   * **Responsabili:​** Anca Băluțoiu, Silviu Stăncioiu, Mihnea Mitrache, Andrei Voicu   * **Responsabili:​** Anca Băluțoiu, Silviu Stăncioiu, Mihnea Mitrache, Andrei Voicu
   * **Lansare:​** 15 noiembrie 2024   * **Lansare:​** 15 noiembrie 2024
-  * **Termen de predare:​** ​decembrie 2024, ora 23:55 +  * **Termen de predare:​** ​11 decembrie 2024, ora 23:55 
   * **Regulament:​** https://​ocw.cs.pub.ro/​courses/​pgapi/​regulament_general   * **Regulament:​** https://​ocw.cs.pub.ro/​courses/​pgapi/​regulament_general
   * **Notă: Orice informație ce nu a fost acoperită în acest document este la latitudinea voastră!**   * **Notă: Orice informație ce nu a fost acoperită în acest document este la latitudinea voastră!**
  
-În cadrul acestei teme va trebui să realizați o simulare a unui lac de la munte, în care se varsă o cascadă. Simularea se va face pe timp de noapte, în scenă fiind prezente surse de lumină ​mișcătoare. Un video demonstrativ ce înfățișează o posibilă implementare îl puteți viziona în filmulețul de mai jos:+În cadrul acestei teme va trebui să realizați o simulare a unui lac de la munte, în care se varsă o cascadă. Simularea se va face pe timp de noapte, în scenă fiind prezente surse de lumină ​dinamice. Un video demonstrativ ce înfățișează o posibilă implementare îl puteți viziona în filmulețul de mai jos:
 <​html>​ <​html>​
 <p style="​text-align:​center;​margin:​auto;">​ <p style="​text-align:​center;​margin:​auto;">​
Line 16: Line 16:
 ===== Teren ===== ===== Teren =====
  
-Se va genera procedural un mesh pentru teren. Inițial se va porni de la un grid de rezoluție m x n, iar apoi se vor face următoarele operații de displacement pe vertecșii acestuia: +Se va genera procedural un mesh pentru teren. Pentru a simplifica lucrurile, mesh-ul va fi generat în întregime pe CPU (folosind metoda prezentată în laboratorul 2 de EGC), nefiind necesară folosirea de Geomtry Shaders. Inițial se va porni de la un grid de rezoluție m x n, iar apoi se vor face următoarele operații de displacement pe vertecșii acestuia: 
-  - Definirea suprafețelor concave și convexe ale terenului: Terenul va defini o suprafață convexă pentru zona în care se va afla lacul și una concavă unde vor fi munții. Displacement-ul aferent acestor parabole va fi calculat în funcție de distanța dintre vertecși și centrul mesh-ului astfel:{{ :​pgapi:​teme:​2024:​screenshot_2024-11-14_232244.png?300 |}}unde hmax este înălțimea dorită pentru suprafață,​ iar d este o valoare calculată în felul următor: {{ :​pgapi:​teme:​2024:​screenshot_2024-11-14_232359.png?​200 |}} unde v este poziția vertexului curent în planul XZ, c este centrul mesh-ului în planul XZ, iar r este raza gropii. Rezultatul dorit este următorul (imaginea afișează normalele suprafeței pentru a fi mai ușor de perceput forma): {{ :​pgapi:​teme:​2024:​1.png?​500 |}}+  - Definirea suprafețelor concave și convexe ale terenului: Terenul va defini o suprafață convexă pentru zona în care se va afla lacul și una concavă unde vor fi munții. Displacement-ul aferent acestor parabole va fi calculat în funcție de distanța dintre vertecși și centrul mesh-ului astfel: 
 +{{ :​pgapi:​teme:​2024:​formula_teren.png?200 |}} 
 +unde hmax este înălțimea dorită pentru suprafață,​ iar d este o valoare calculată în felul următor: {{ :​pgapi:​teme:​2024:​screenshot_2024-11-14_232359.png?​200 |}} unde v este poziția vertexului curent în planul XZ, c este centrul mesh-ului în planul XZ, iar r este raza gropii. Rezultatul dorit este următorul (imaginea afișează normalele suprafeței pentru a fi mai ușor de perceput forma): {{ :​pgapi:​teme:​2024:​1.png?​500 |}}
   - Denivelări ale suprafeței pentru a da impresia de munți: Pentru asta se poate folosi noise: [[https://​thebookofshaders.com/​11/​|The Book of Shaders: Noise]]. După aplicarea denivelarilor,​ un rezultat satisfăcător este acesta: {{ :​pgapi:​teme:​2024:​2.png?​500 |}}   - Denivelări ale suprafeței pentru a da impresia de munți: Pentru asta se poate folosi noise: [[https://​thebookofshaders.com/​11/​|The Book of Shaders: Noise]]. După aplicarea denivelarilor,​ un rezultat satisfăcător este acesta: {{ :​pgapi:​teme:​2024:​2.png?​500 |}}
   - Curbură ce definește zona prin care se va vărsa cascada: Se va folosi o curbă Bezier pe baza căreia se va denivela o parte a terenului. Pentru fiecare pereche (xv, zv) de coordonate ale vertecșilor terenului în planul XZ și fiecare pereche (xc, zc) de coordonate ale curbei Bezier în planul XZ se va calcula parametrul t al curbei Bezier pentru care distanța dintre (xv, zv) și curba proiectată este minimă.   - Curbură ce definește zona prin care se va vărsa cascada: Se va folosi o curbă Bezier pe baza căreia se va denivela o parte a terenului. Pentru fiecare pereche (xv, zv) de coordonate ale vertecșilor terenului în planul XZ și fiecare pereche (xc, zc) de coordonate ale curbei Bezier în planul XZ se va calcula parametrul t al curbei Bezier pentru care distanța dintre (xv, zv) și curba proiectată este minimă.
Line 29: Line 31:
 Parametrul t este apoi folosit pentru a evalua curba propriu-zisă (nu cea proiectată pe OZ) și a găsi cel mai apropiat punct de pe curbă. O să numim acest punct b_closest. Parametrul t este apoi folosit pentru a evalua curba propriu-zisă (nu cea proiectată pe OZ) și a găsi cel mai apropiat punct de pe curbă. O să numim acest punct b_closest.
  
-Pentru a realiza curbura în teren putem interpola între înălțimea sa inițială și înălțimea celui mai apropiat punct pe curba în 3D (y_b_closest) astfel:{{ :​pgapi:​teme:​2024:​screenshot_2024-11-14_232359.png?200 |}} unde r_cascada este raza cascadei noastre.+Pentru a realiza curbura în teren putem interpola între înălțimea sa inițială și înălțimea celui mai apropiat punct pe curba în 3D (y_b_closest) astfel:{{ :​pgapi:​teme:​2024:​screenshot_2024-11-14_233111.png?200 |}} unde r_cascada este raza cascadei noastre.
  
 Folosind formula descrisă mai sus vom avea o curbură, dar aceasta nu va avea o formă naturală. Putem îmbunătăți forma acesteia folosind funcția sinus: Folosind formula descrisă mai sus vom avea o curbură, dar aceasta nu va avea o formă naturală. Putem îmbunătăți forma acesteia folosind funcția sinus:
Line 54: Line 56:
 ===== Cerul ===== ===== Cerul =====
  
-În implementarea temei trebuie să sintetizați atât cerul cât și pereții exteriori ai mediului înconjurător. Veți folosi un cubemap sugestiv pentru a realiza această ​sinteză.+În implementarea temei trebuie să sintetizați atât cerul cât și pereții exteriori ai mediului înconjurător. Veți folosi un cubemap sugestiv pentru a realiza această ​sarcină. Varianta folosită în temă este disponibilă {{:​pgapi:​teme:​2024:​cubemap.zip | aici}}.
  
 {{ :​pgapi:​teme:​2024:​7.png?​500 |}} {{ :​pgapi:​teme:​2024:​7.png?​500 |}}
Line 70: Line 72:
 {{ :​pgapi:​teme:​2024:​8.png?​500 |}} {{ :​pgapi:​teme:​2024:​8.png?​500 |}}
  
-Dacă dorim să se păstreze și iluminarea în reflexia calculată, atunci va trebuie ​modificat modul de randare a mediului în cubemap. Pentru a face asta, este nevoie de deferred rendering la nivel de cube map, cu shader speciale pentru asta (shader care sa scrie informațiile despre scenă și shader pentru light accumulation).+Dacă dorim să se păstreze și iluminarea în reflexia calculată, atunci va trebui ​modificat modul de randare a mediului în cubemap. Pentru a face asta, este nevoie de deferred rendering la nivel de cube map, cu shader speciale pentru asta (shader care sa scrie informațiile despre scenă și shader pentru light accumulation).
  
 Procesul este similar cel folosit în laboratoarele despre reflexie și deferred rendering, cu excepția câtorva observații:​ Procesul este similar cel folosit în laboratoarele despre reflexie și deferred rendering, cu excepția câtorva observații:​
Line 105: Line 107:
        * Noise (25)        * Noise (25)
        * Curbura pentru cascada (25)        * Curbura pentru cascada (25)
-  * Puncte de lumina miscatoare ​(50)+  ​* Cerul (50) 
 +    * Skybox (20) 
 +    ​* Puncte de lumină mișcătoare ​(30)
   * Petic de apa (75)   * Petic de apa (75)
        * Reflexie (25)        * Reflexie (25)
pgapi/teme/2024/01.1731654184.txt.gz · Last modified: 2024/11/15 09:03 by silviu.stancioiu00
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0