This shows you the differences between two versions of the page.
egc:teme:2023:03 [2023/12/17 19:04] andrei.lapusteanu Added cylinder primitive .zip file |
egc:teme:2023:03 [2023/12/17 20:28] (current) andrei.lapusteanu Fix typo |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | <hidden> | ||
======= Tema 3 - Lighthouse ======= | ======= Tema 3 - Lighthouse ======= | ||
Line 32: | Line 31: | ||
<note> | <note> | ||
* Este permisă importarea de mesh-uri create în aplicații de modelare 3D | * Este permisă importarea de mesh-uri create în aplicații de modelare 3D | ||
- | * Primitiva **cilindru** pe care am folosit-o pentru demo o puteți descarca de aici: {{:egc:teme:2023:cylinder.zip|}} | + | * Primitiva **cilindru** pe care am folosit-o pentru demo o puteți descărca de aici: {{:egc:teme:2023:cylinder.zip|}} |
</note> | </note> | ||
Line 65: | Line 64: | ||
Pe mesh-ul corespunzător apei va trebui aplicată o textură care se repetă. Acest lucru se poate obține prin oricare dintre următoarele 2 moduri: | Pe mesh-ul corespunzător apei va trebui aplicată o textură care se repetă. Acest lucru se poate obține prin oricare dintre următoarele 2 moduri: | ||
* Folosirea unui mesh (fie importat, fie creat de către voi din cod) ale cărui coordonate de texturare sunt în afara domeniului uzual al spațiului UV (0,0) -> (1,1) | * Folosirea unui mesh (fie importat, fie creat de către voi din cod) ale cărui coordonate de texturare sunt în afara domeniului uzual al spațiului UV (0,0) -> (1,1) | ||
- | * Prin scalarea coordonatelor de texturare în shader. În cazul în care mesh-ul pentru plan/quad are toate coordonatele de texturare definite în intervalul (0,0) -> (1,1), deoarece acest mesh trebuie scalat în mod semnificativ pentru scena virtuală, simpla aplicare a texturii va conduce la întinderea acesteia pe întreg planul și veți obține un efect de 'zoomed-in'. Așadar, va trebui să scalați coordonatele de texturare în shader pentru a repeta textura pe mesh | + | * Prin scalarea coordonatelor de texturare în shader. În cazul în care mesh-ul pentru plan/quad are toate coordonatele de texturare definite în intervalul (0,0) -> (1,1), deoarece acest mesh trebuie scalat în mod semnificativ pentru scena virtuală, simpla aplicare a texturii va conduce la întinderea acesteia pe întreg planul și veți obține un efect 'zoomed-in'. Așadar, va trebui să scalați coordonatele de texturare în shader pentru a repeta textura pe mesh |
<note tip> | <note tip> | ||
Line 104: | Line 103: | ||
<note important>**Atenție**, această colorare este doar în scop demonstrativ! Voi va trebui să vă folosiți de acest concept **nu** pentru colorarea directă a mesh-ului, ci pentru alterarea coordonatelor de texturare ale apei.</note> | <note important>**Atenție**, această colorare este doar în scop demonstrativ! Voi va trebui să vă folosiți de acest concept **nu** pentru colorarea directă a mesh-ului, ci pentru alterarea coordonatelor de texturare ale apei.</note> | ||
- | În GIF-ul de mai jos puteți observa în partea stânga textura apei care suferă doar efectul de translație, iar în partea dreaptă un exemplu pentru translație + efectul de valuri. | + | În GIF-ul de mai jos puteți observa în partea stângă textura apei care suferă doar efectul de translație, iar în partea dreaptă un exemplu pentru translație + efectul de valuri. |
{{ :egc:teme:2023:egc_2023_t3_watertexturemodulation.gif?650 |}} | {{ :egc:teme:2023:egc_2023_t3_watertexturemodulation.gif?650 |}} | ||
Line 114: | Line 113: | ||
Iluminarea scenei se va implementa folosind 3 tipuri de surse de lumină: **punctiformă**, **direcțională** și **spotlight**. Fiecare sursă de lumină (indiferent de tipul acesteia) o să aibă o culoare specifică și trebuie să se țină cont de această culoare pentru iluminare. | Iluminarea scenei se va implementa folosind 3 tipuri de surse de lumină: **punctiformă**, **direcțională** și **spotlight**. Fiecare sursă de lumină (indiferent de tipul acesteia) o să aibă o culoare specifică și trebuie să se țină cont de această culoare pentru iluminare. | ||
- | **Lumină punctiformă:** acest tip de sursă de lumină este cel prezentat la laborator. Este necesar să se folosească acest tip de lumina pentru: | + | **Lumina punctiformă:** acest tip de sursă de lumină este cel prezentat la laborator. Este necesar să se folosească acest tip de lumină pentru: |
* Reflectorul farului (pe lângă lumina spotlight a acestuia) astfel încât să se ilumineze zonele din proximitatea farului | * Reflectorul farului (pe lângă lumina spotlight a acestuia) astfel încât să se ilumineze zonele din proximitatea farului | ||
* Fiecare bărcuță, astfel încât să se ilumineze aceasta și apa din jurul ei. Lumina va fi atașată de bărcuță și trebuie să aibă o culoare aleatorie | * Fiecare bărcuță, astfel încât să se ilumineze aceasta și apa din jurul ei. Lumina va fi atașată de bărcuță și trebuie să aibă o culoare aleatorie | ||
Line 122: | Line 121: | ||
{{ :egc:teme:2023:egc_2023_t3_pointlightsonly.png?400 |}} | {{ :egc:teme:2023:egc_2023_t3_pointlightsonly.png?400 |}} | ||
- | **Lumină direcțională:** aceasta va ilumina toate obiectele din scenă cu aceeași intensitate. Specific luminii de tip direcțional este faptul că vectorul luminii incidente $L$ nu depinde de poziția luminii sau a fragmentului care trebuie iluminat (precum în cazul luminilor de tip point și spot). Așadar, pentru fiecare fragment, iluminarea va fi calculată folosind același vector $L$ (corespunzător direcției luminii). Astfel, pentru o sursă de tip direcțională este nevoie să se definească direcția acesteia și culoarea luminii emise. În cadrul acestei teme vom considera luna ca `sursa` acestei lumini direcționale, așadar, va trebui să setați direcția acestei lumini în mod corespunzător. | + | **Lumina direcțională:** aceasta va ilumina toate obiectele din scenă cu aceeași intensitate. Specific luminii de tip direcțional este faptul că vectorul luminii incidente $L$ nu depinde de poziția luminii sau a fragmentului care trebuie iluminat (precum în cazul luminilor de tip point și spot). Așadar, pentru fiecare fragment, iluminarea va fi calculată folosind același vector $L$ (corespunzător direcției luminii). Astfel, pentru o sursă de lumină de tip direcțional este nevoie să se definească direcția acesteia și culoarea luminii emise. În cadrul acestei teme vom considera luna ca `sursa` acestei lumini direcționale, așadar, va trebui să setați direcția acestei lumini în mod corespunzător. |
În următoarea imagine a fost activată numai lumina direcțională - observați iluminarea pe partea stângă a farului, corespunzătoare direcției cerute. | În următoarea imagine a fost activată numai lumina direcțională - observați iluminarea pe partea stângă a farului, corespunzătoare direcției cerute. | ||
Line 128: | Line 127: | ||
{{ :egc:teme:2023:egc_2023_t3_dirlightonly.png?400 |}} | {{ :egc:teme:2023:egc_2023_t3_dirlightonly.png?400 |}} | ||
- | **Lumina de tip spotlight:** acest tip de sursă de lumină este cel prezentat la laborator. Este necesar să se folosească 2 surse de acest tip de lumină pentru far, poziționate în partea superioară a acestuia, care să se rotească în jurul farului în mod continuu. Între direcțiile celor 2 surse spotlight trebuie să fie un defazaj de 180°. De asemenea, luminile spotlight trebuie să fie colorate (detalii în secțiunea **Interfața cu utilizatorul**) | + | **Lumina de tip spotlight:** acest tip de sursă de lumină este cel prezentat la laborator. Este necesar să se folosească 2 surse de acest tip pentru far, poziționate în partea superioară a acestuia, care să se rotească în jurul farului în mod continuu. Între direcțiile celor 2 surse spotlight trebuie să fie un defazaj de 180°. De asemenea, luminile spotlight trebuie să fie colorate (detalii în secțiunea **Interfața cu utilizatorul**) |
În următorul GIF puteți observa un exemplu de implementare pentru comportamentul acestor spotlight-uri. | În următorul GIF puteți observa un exemplu de implementare pentru comportamentul acestor spotlight-uri. | ||
Line 146: | Line 145: | ||
==== Mesh-ul lunii ==== | ==== Mesh-ul lunii ==== | ||
- | Mesh-ul lunii trebuie texturat cu o imagine a lunii. Pentru a oferi o strălucire lunii (efect de glow) este necesar ca randarea acesteia să includă și o componentă emisivă de culoare albă. | + | Mesh-ul lunii trebuie texturat cu o imagine a lunii. Pentru a oferi o strălucire lunii este necesar ca randarea acesteia să includă și o componentă emisivă de culoare albă. |
===== Interfața cu utilizatorul ===== | ===== Interfața cu utilizatorul ===== | ||
Line 193: | Line 192: | ||
* Utilizarea unei traiectorii complexe pentru deplasarea bărcuțelor | * Utilizarea unei traiectorii complexe pentru deplasarea bărcuțelor | ||
* Modelarea unor obstacole plutitoare | * Modelarea unor obstacole plutitoare | ||
- | * Selector de culoare sub forma circulară pe modelul HSV | + | * Selector de culoare sub formă circulară pe modelul HSV |
===== Întrebări și răspunsuri ===== | ===== Întrebări și răspunsuri ===== | ||
Line 221: | Line 220: | ||
* În cazul în care arhiva tot depășește limita de 50MB (nu ar trebui), puteți să ștergeți și folderul __**/deps**__ sau __**/assets**__ întrucât se pot adăuga la testare. Nu este recomandat să faceți acest lucru întrucât îngreunează mult testarea în cazul în care versiunea curentă a bibliotecilor/resurselor diferă de versiunea utilizată la momentul scrierii temei. | * În cazul în care arhiva tot depășește limita de 50MB (nu ar trebui), puteți să ștergeți și folderul __**/deps**__ sau __**/assets**__ întrucât se pot adăuga la testare. Nu este recomandat să faceți acest lucru întrucât îngreunează mult testarea în cazul în care versiunea curentă a bibliotecilor/resurselor diferă de versiunea utilizată la momentul scrierii temei. | ||
</note> | </note> | ||
- | |||
- | </hidden> |