This shows you the differences between two versions of the page.
|
pgapi:teme:2025:01 [2025/11/15 21:42] andrei.lambru |
pgapi:teme:2025:01 [2025/12/03 13:47] (current) robert.caragicu |
||
|---|---|---|---|
| Line 3: | Line 3: | ||
| * **Responsabili:** Robert Caragicu, Silviu Stăncioiu, Cristian Lambru | * **Responsabili:** Robert Caragicu, Silviu Stăncioiu, Cristian Lambru | ||
| * **Lansare:** 16 noiembrie 2025 | * **Lansare:** 16 noiembrie 2025 | ||
| - | * **Termen de predare:** 7 decembrie 2025, ora 23:55 | + | * **Termen de predare:** 11 decembrie 2025, 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ă dinamice. Un video demonstrativ ce înfățișează o posibilă implementare îl puteți viziona în filmulețul de mai jos: | + | În cadrul acestei teme, veți avea de realizat o scenă demonstrativă similară cu cea din filmulețul de mai jos. |
| + | |||
| + | Interiorul scenei conține o încăpere cu două mese, un televizor, o lampă care luminează și două vaze. Geometria obiectelor este realizată prin utilizarea de suprafețe de rotație și de translație. Pe ecranul televizorului se afișează un foc de artificii. De asemenea, ecranul televizorului este lucios și în el se reflectă toate celelalte obiecte din încăpere. Iluminarea produce umbre care se regăsesc și în reflexia de pe ecranul televizorului. | ||
| <html> | <html> | ||
| <p style="text-align:center;margin:auto;"> | <p style="text-align:center;margin:auto;"> | ||
| Line 21: | Line 24: | ||
| În cadrul acestei teme veți folosi mai multe suprafețe de rotație și translație. Se vor folosi Geometry Shaders descrise în [[pgapi:laboratoare:04|]]. Vom modifica generarea din cadrul laboratorului în 3 moduri importante: | În cadrul acestei teme veți folosi mai multe suprafețe de rotație și translație. Se vor folosi Geometry Shaders descrise în [[pgapi:laboratoare:04|]]. Vom modifica generarea din cadrul laboratorului în 3 moduri importante: | ||
| - | - Geometria generată va fi multiplicată pentru a desena într-un singur pas pe toate fețele unui cubemap. Cubemap-ul va fi folosit pentru a desena reflexia mediului înconjurător pe ecranul televizorului (capitolul //Reflexiile incăperii pe ecran//). | + | - Geometria generată va fi multiplicată pentru a desena într-un singur pas pe toate fețele unui cubemap. Cubemap-ul va fi folosit pentru a desena reflexia mediului înconjurător pe ecranul televizorului (capitolul //Reflexiile incăperii pe ecranul televizorului//). |
| - Coordonate UV vor fi calculate fiecărui vârf pentru a permite desenarea de suprafețe texturate. | - Coordonate UV vor fi calculate fiecărui vârf pentru a permite desenarea de suprafețe texturate. | ||
| - Fiecare vârf va avea calculată o normală pentru a permite atât desenarea suprafețelor iluminate de lampă cât și desenarea reflexiilor pe ecranul televizorului. | - Fiecare vârf va avea calculată o normală pentru a permite atât desenarea suprafețelor iluminate de lampă cât și desenarea reflexiilor pe ecranul televizorului. | ||
| - | //Atenție că acest geometry shader-ul trimite mai multe informații față de cel din [[pgapi:laboratoare:04|]]. Astfel numărul maxim de vârfuri pe o fâșie va fi mai mic (încercați o valoare de 70).// | + | //Atenție la faptul că acest geometry shader trimite mai multe informații față de cel din [[pgapi:laboratoare:04|]]. Astfel numărul maxim de vârfuri pe o fâșie va fi mai mic (încercați o valoare de 70).// |
| //Funcția de eliminare a fețelor auto-obturate (face culling) va fi dezactivată pentru a permite vederea interiorului obiectelor.// | //Funcția de eliminare a fețelor auto-obturate (face culling) va fi dezactivată pentru a permite vederea interiorului obiectelor.// | ||
| Line 84: | Line 87: | ||
| Vaza este generată dintr-o suprafață de rotație. | Vaza este generată dintr-o suprafață de rotație. | ||
| - | ===== Artificiile de ecranul televizorului ===== | + | ===== Iluminarea încăperii ===== |
| + | |||
| + | Încăperea este iluminată de lampa care se află pe masa din partea opusă celei pe care se află televizorul și vazele. Se utilizează o sursă de lumină de tip spot, similară cu cea utilizată în [[pgapi:laboratoare:01|]]. Direcția de iluminare trebuie orientată conform geometriei lămpii. Suplimentar, intensitatea iluminării lămpii trebuie să fluctueze conform unui șablon de modificare similar cu cel din filmulețul demonstrativ de mai sus. | ||
| + | |||
| + | Similar cu abordarea utilizata în [[pgapi:laboratoare:01|]], iluminarea trebuie să producă umbre pe baza obiectelor din încăpere, după cum se poate observa în imaginea de mai jos. | ||
| + | |||
| + | {{ :pgapi:teme:2025:shadows.png?600 |}} | ||
| + | |||
| + | ===== Artificiile pe ecranul televizorului ===== | ||
| Ecranul televizorului va afișa constant un show de artificii. Pentru aceasta se va folosi un framebuffer în care se va desena un sistem de particule configurat astfel încât să arate ca niște artificii. Textura de culoare din framebuffer va fi afișată pe ecranul televizorului. | Ecranul televizorului va afișa constant un show de artificii. Pentru aceasta se va folosi un framebuffer în care se va desena un sistem de particule configurat astfel încât să arate ca niște artificii. Textura de culoare din framebuffer va fi afișată pe ecranul televizorului. | ||
| Line 98: | Line 109: | ||
| {{ :pgapi:teme:2025:fireworks_gif.gif?300 |}} | {{ :pgapi:teme:2025:fireworks_gif.gif?300 |}} | ||
| - | |||
| ===== Reflexiile încăperii pe ecranul televizorului ===== | ===== Reflexiile încăperii pe ecranul televizorului ===== | ||
| - | Din centrul televizorului se va randa întreaga scenă (mai puțin televizorul și ecranul acestuia) într-un cubemap. Obiectele desenate în acest cubemap nu este necesar să casteze și umbre. Totuși, iluminarea lămpii trebuie să fie prezentă. | + | Din centrul televizorului se va randa întreaga scenă (mai puțin televizorul și ecranul acestuia) într-un cubemap. Obiectele desenate în acest cubemap trebuie să fie luminate și să casteze umbre. |
| - | {{ :pgapi:teme:2025:room_cubemap.gif?300 |}} | + | {{ :pgapi:teme:2025:room_cubemap_2.gif?300 |}} |
| Pe ecranul televizorului se va folosi acest cubemap pentru a reflecta încăperea (vezi [[pgapi:laboratoare:06|]]) | Pe ecranul televizorului se va folosi acest cubemap pentru a reflecta încăperea (vezi [[pgapi:laboratoare:06|]]) | ||
| - | {{ :pgapi:teme:2025:tv_reflection.png?300 |}} | + | {{ :pgapi:teme:2025:tv_reflection_2.png?300 |}} |
| Pentru ca televizorul să afișeze și show-ul de artificii, dar și reflexiile se va face o interpolare liniară între culorile preluate din cele două texturi (textura în care se randeaza artificiile și cubemap-ul reflexiilor) cu un factor de interpolare constant (ex: 0.25). Exemplu de implementare: | Pentru ca televizorul să afișeze și show-ul de artificii, dar și reflexiile se va face o interpolare liniară între culorile preluate din cele două texturi (textura în care se randeaza artificiile și cubemap-ul reflexiilor) cu un factor de interpolare constant (ex: 0.25). Exemplu de implementare: | ||
| - | out_color = mix(texture(color_texture, uv), texture(texture_cubemap, cubemapDir), 0.25); | + | <code glsl> |
| + | out_color = mix(texture(color_texture, uv), texture(texture_cubemap, cubemapDir), 0.25); | ||
| + | </code> | ||
| | | ||
| Pentru combinarea celor două texturi vă puteți juca cu formula folosită pentru a obține ce rezultate vreți, dar important este ca pe suprafața ecranului să fie prezente și reflexiile și artificiile. | Pentru combinarea celor două texturi vă puteți juca cu formula folosită pentru a obține ce rezultate vreți, dar important este ca pe suprafața ecranului să fie prezente și reflexiile și artificiile. | ||
| - | ===== Iluminare ===== | ||
| - | |||
| - | @Cristi | ||
| + | <note important> | ||
| + | Pentru facilitarea vizualizării efectului de reflexie pe suprafața ecranului de la televizor, acesta din urmă trebuie să poată fi rotit în jurul axei OY, în ambele sensuri, prin apăsarea butoanelor 1 și 2 de la tastatură. Reflexia pe ecran trebuie să fie coerentă cu rotația pe care o are ecranul televizorului. | ||
| + | </note> | ||
| ===== Notare (250) ===== | ===== Notare (250) ===== | ||
| - | * Desenarea geometriei scenei (100p) | + | - Desenarea geometriei scenei (100p) |
| * Geometria mesei - 30p | * Geometria mesei - 30p | ||
| - | * Blatul mesei - 15p | + | * Blatul mesei - 20p |
| - | * Picioarele mesei - 15p | + | * Picioarele mesei - 10p |
| * Geometria televizorului - 20p | * Geometria televizorului - 20p | ||
| - | * Geometria lampei - 20p | + | * Geometria lămpii - 20p |
| * Geometria vazei - 10p | * Geometria vazei - 10p | ||
| - | * Asamblarea incaperii din obiecte - 20p | + | * Asamblarea încăperii din obiecte - 20p |
| - | * Desenarea geometriei scenei cu texturi si iluminare de la lampa (30p) | + | - Iluminarea încăperii (50p) |
| - | * Desenarea artificiilor pe ecranul televizorului (40p) | + | * Desenarea geometriei scenei cu texturi și iluminare de la lampă - 20p |
| - | * Desenarea artificiilor - 30p | + | * Desenarea umbrelor pentru obiectele din scenă - 30p |
| - | * Desenarea articiilor in ecranul televizorului - 10p | + | - Desenarea artificiilor pe ecranul televizorului (50p) |
| - | * Desenarea reflexiei obiectelor din scena in ecranul televizorului (40p) | + | * Desenarea artificiilor - 40p |
| - | * Desenarea umbrelor pentru obiectele din scena (40p) | + | * Desenarea articiilor pe ecranul televizorului - 10p |
| + | - Desenarea reflexiei obiectelor din scenă în ecranul televizorului (50p) | ||
| + | |||
| + | <note warning> | ||
| + | Rezolvările cerințelor de la punctul 2 sunt punctate doar în situația în care se iluminează, respectiv se creează umbre, cu geometrie realizată prin suprafețe de translație și de rotație. | ||
| + | Similar, rezolvarea cerinței 4 este punctată doar în situația în care pe ecranul televizorului este reflectată geometrie realizată prin suprafețe de translație și de rotație. | ||
| + | </note> | ||
| ===== Bonusuri posibile ===== | ===== Bonusuri posibile ===== | ||
| - | @Toti | + | * Introducerea de alte obiecte create prin utilizarea suprafețelor de translație și de rotație |
| + | * Schimbarea tematicii lumii cu observatia ca se pastreaza geometria ecranului, artificiile de pe ecran, reflexiile, iluminarea si umbrele | ||
| + | * Orice aduce imbunatatiri vizuale scenei | ||