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) |