This shows you the differences between two versions of the page.
| 
    pgapi:teme:2024:01 [2024/11/15 10:49] maria_anca.balutoiu [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:** 5 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ă!** | ||
| 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 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) | ||