Differences

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

Link to this comparison view

pgapi:teme:2025:01 [2025/11/15 21:30]
andrei.lambru
pgapi:teme:2025:01 [2025/12/03 13:47] (current)
robert.caragicu
Line 1: Line 1:
-====== Tema 1 - Cozy Room ======+====== Tema 1 - Oldie Room ======
  
   * **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:​** ​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ă dinamiceUn video demonstrativ ce înfățișează o posibilă implementare îl putețviziona ​în filmulețul ​de mai jos:+În cadrul acestei teme, veți avea de realizat ​scenă demonstrativă similară cu cea din filmulețul ​de mai jos. 
 + 
 +Interiorul scenei conține o încăpere cu două meseun televizor, o lampă ​care luminează și două vazeGeometria 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 asemeneaecranul televizorului este lucios și în el se reflectă toate celelalte obiecte din încăpereIluminarea 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 13: Line 16:
 </​html>​ </​html>​
  
-===== Geometrie obiecte incapere ​=====+===== Geometria obiectelor din încăpere ​===== 
 + 
 +==== Descriere generică ​====
  
 Toate obiectele din scenă vor fi plasate într-o cameră de formă un paralelipiped. Pereții, tavanul și podeaua camerei sunt o nuanță de gri. Toate obiectele din scenă vor fi plasate într-o cameră de formă un paralelipiped. Pereții, tavanul și podeaua camerei sunt o nuanță de gri.
Line 19: 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.//​
  
-==Coordonate UV pentru suprafețe de rotație și translație==+===Coordonate UV pentru suprafețe de rotație și translație===
  
 {{ :​pgapi:​teme:​2025:​uv_tema1_v2.png?​400 |}} {{ :​pgapi:​teme:​2025:​uv_tema1_v2.png?​400 |}}
Line 40: Line 45:
  
  
-==Normală vârfuri pentru suprafețe de rotație și translație==+===Normală vârfuri pentru suprafețe de rotație și translație===
  
 {{ :​pgapi:​teme:​2025:​normale_tema1.png?​300 |}} {{ :​pgapi:​teme:​2025:​normale_tema1.png?​300 |}}
Line 46: Line 51:
 În figură ilustrăm cum se calculează normala unui vârf X. Săgeata roșie și verde reprezintă vectorii tangentă la suprafață. Ei se determină calculând direcția de la vârful X la vârfuri vecine. Normala - săgeata albastră - este produsul vectorial dintre săgeata verde și săgeata roșie (atenție la ordinea termenilor!). În figură ilustrăm cum se calculează normala unui vârf X. Săgeata roșie și verde reprezintă vectorii tangentă la suprafață. Ei se determină calculând direcția de la vârful X la vârfuri vecine. Normala - săgeata albastră - este produsul vectorial dintre săgeata verde și săgeata roșie (atenție la ordinea termenilor!).
  
-==== Masa ====+==== Geometria mesei ====
 {{ :​pgapi:​teme:​2025:​masa_tema1.png?​500 |}} {{ :​pgapi:​teme:​2025:​masa_tema1.png?​500 |}}
  
Line 59: Line 64:
 Laturile sunt suprafețe de translație. Pornind de la o curbă Bezier se realizează două laturi translatând curba pe direcția săgeții roșii, respectiv pe direcția săgeții verzi. Celelalte două laturi se construiesc simetric. Laturile sunt suprafețe de translație. Pornind de la o curbă Bezier se realizează două laturi translatând curba pe direcția săgeții roșii, respectiv pe direcția săgeții verzi. Celelalte două laturi se construiesc simetric.
  
-==== Televizorul ​====+==== Geometria televizorului ​====
  
 {{ :​pgapi:​teme:​2025:​tv_tema1.png?​300 |}} {{ :​pgapi:​teme:​2025:​tv_tema1.png?​300 |}}
Line 70: Line 75:
  
  
-==== Lampa ====+==== Geometria lămpii ​====
  
 {{ :​pgapi:​teme:​2025:​lampa_tema1.png?​300 |}} {{ :​pgapi:​teme:​2025:​lampa_tema1.png?​300 |}}
Line 76: Line 81:
 Baza lampei și abajurul sunt suprafețe de rotație. Atenție ca abajurul să nu aibă o gaură în spate. Baza lampei și abajurul sunt suprafețe de rotație. Atenție ca abajurul să nu aibă o gaură în spate.
  
-==== Vazele ​====+==== Geometria vazei ====
  
 {{ :​pgapi:​teme:​2025:​vaza_tema1.png?​300 |}} {{ :​pgapi:​teme:​2025:​vaza_tema1.png?​300 |}}
  
-Vazele sunt suprafeț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 97: Line 110:
 {{ :​pgapi:​teme:​2025:​fireworks_gif.gif?​300 |}} {{ :​pgapi:​teme:​2025:​fireworks_gif.gif?​300 |}}
  
 +===== Reflexiile încăperii pe ecranul televizorului =====
  
-===== Reflexiile incaperii pe ecran =====+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.
  
-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ă. +{{ :​pgapi:​teme:​2025:​room_cubemap_2.gif?300 |}}
- +
-{{ :​pgapi:​teme:​2025:​room_cubemap.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 - 10p +         * Blatul mesei - 20p 
-         * Picioarele mesei - 20p+         * 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
  
  
pgapi/teme/2025/01.1763235027.txt.gz · Last modified: 2025/11/15 21:30 by andrei.lambru
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