Differences

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

Link to this comparison view

egc:laboratoare:07 [2020/11/27 14:26]
victor.asavei [Componenta speculară]
egc:laboratoare:07 [2022/11/22 09:38] (current)
andrei.lambru
Line 13: Line 13:
 ==== Modelul Phong pentru calculul reflexiei luminii ==== ==== Modelul Phong pentru calculul reflexiei luminii ====
  
-Intensitatea luminii reflectată într-un punct de pe suprafață către observator este normalizată ​în intervalul \( [0,1] \), unde 0 reprezintă situația în care lumina care ajunge în acel punct nu este reflectată deloc către observator și 1 este situația în care tot fasciculul de lumină care ajunge in punctul respectiv este reflectat către observator. Pentru a calcula această intensitate în punctul ales vom folosi ​un model de reflexie ​care extinde modelul Phong și care conține ​un total de 4 componente ​ale intensității luminii ​pentru a descrie intensitatea finală in punctul de pe suprafață:+Ca model de reflexie vom prezenta ​în continuare ​un model care extinde modelul ​de reflexie ​Phong și care conține ​toate cele 4 componente ​care pot fi folosite ​pentru a calcula iluminarea. Pentru a obține astfel culoarea într-un punct al unei suprafețe vom avea următoarele componente ​
   * Componenta emisivă   * Componenta emisivă
   * Componenta ambientală   * Componenta ambientală
   * Componenta difuză   * Componenta difuză
   * Componenta speculară   * Componenta speculară
-Contribuția fiecărei componente este calculată ca o combinație dintre proprietățile de material ale obiectului (factorul de strălucire și de difuzie al materialului) și proprietățile sursei de lumină (intensitatea ​sursei de lumină, poziția sursei de lumină).+Contribuția fiecărei componente este calculată ca o combinație dintre proprietățile de material ale obiectului (factorul de strălucire și de difuzie al materialului) și proprietățile sursei de lumină (culoarea ​sursei de lumină, poziția sursei de lumină).
  
-Astfel, ​intensitatea ​finală a luminii într-un punct aparținând unei suprafețe este:+Astfel, ​culoarea ​finală a luminii într-un punct aparținând unei suprafețe este:
  
 <code glsl> <code glsl>
-     float intensitate ​= emisiva + ambientala + difuza + speculara; # GLSL+     culoare ​= emisiva + ambientala + difuza + speculara; # GLSL
 </​code>​ </​code>​
  
Line 34: Line 34:
 Avem astfel: Avem astfel:
 <code glsl> ​ <code glsl> ​
-     float emisiva = Ke; # GLSL+     ​emisiva = Ke; # GLSL
 </​code>​ </​code>​
 <note tip> <note tip>
-  * Ke – intensitatea ​emisivă a materialului+  * Ke – culoarea ​emisivă a materialului
 </​note>​ </​note>​
  
Line 46: Line 46:
 Astfel, lumina ambientală nu vine dintr-o direcție anume, apărând ca și cum ar veni din toate direcțiile. Din această cauză, componenta ambientală este independentă de poziția sursei de lumină. Astfel, lumina ambientală nu vine dintr-o direcție anume, apărând ca și cum ar veni din toate direcțiile. Din această cauză, componenta ambientală este independentă de poziția sursei de lumină.
  
-Componenta ambientală depinde de intensitatea ​de material ambientală a suprafeței obiectului și de intensitatea ​luminii.+Componenta ambientală depinde de culoarea ​de material ambientală a suprafeței obiectului și de culoarea ambientală ​luminii.
  
-Similar componentei emisive, componenta ambientală este o constantă (se poate extinde modelul atribuind fiecărei lumini din scenă o intensitate ​ambientală).+Similar componentei emisive, componenta ambientală este o constantă (se poate extinde modelul atribuind fiecărei lumini din scenă o culoare ​ambientală).
  
 Avem astfel: Avem astfel:
  
 <code glsl> <code glsl>
-     float ambientala = Ka * intensitateAmbientalaGlobala; # GLSL+     ​ambientala = Ka * culoareAmbientalaGlobala; # GLSL
 </​code>​ </​code>​
  
 <note tip> <note tip>
   * Ka – constanta de reflexie ambientală a materialului   * Ka – constanta de reflexie ambientală a materialului
-  * intensitateAmbientalaGlobala ​– intensitatea ​ambientală a luminii+  * culoareaAmbientalaGlobala ​– culoarea ​ambientală a luminii
 </​note>​ </​note>​
  
Line 70: Line 70:
  
 Avem astfel: Avem astfel:
-$difuza = K_d \cdot intensitateLumina ​\cdot max(\vec{N}\cdot \vec{L}, 0)$+$difuza = K_d \cdot culoareLumina ​\cdot max(\vec{N}\cdot \vec{L}, 0)$
 <code glsl> <code glsl>
-     float difuza = Kd * intensitateLumina ​* max (dot(N,L), 0); # GLSL+     ​difuza = Kd * culoareLumina ​* max (dot(N,L), 0); # GLSL
 </​code>​ </​code>​
 <note tip> <note tip>
   * Kd - constanta de reflexie difuză a materialului   * Kd - constanta de reflexie difuză a materialului
-  * intensitateLumina ​– intensitatea ​luminii+  * culoareLumina ​– culoarea ​luminii
   * N – normala la suprafață (normalizată) ​   * N – normala la suprafață (normalizată) ​
   * L – vectorul direcției luminii incidente (normalizat)   * L – vectorul direcției luminii incidente (normalizat)
Line 103: Line 103:
  
 Astfel avem: Astfel avem:
-$speculara = K_s \cdot intensitateLumina ​\cdot primesteLumina \cdot (max(\vec{V}\cdot \vec{R}, 0))^n$+$speculara = K_s \cdot culoareLumina ​\cdot primesteLumina \cdot (max(\vec{V}\cdot \vec{R}, 0))^n$
 <code glsl> <code glsl>
-     float speculara = Ks * intensitateLumina ​* primesteLumina * pow(max(dot(V,​ R), 0), n) # GLSL+     ​speculara = Ks * culoareLumina ​* primesteLumina * pow(max(dot(V,​ R), 0), n) # GLSL
 </​code>​ </​code>​
  
Line 132: Line 132:
  
 Ținând cont de toate acestea, avem pentru componenta speculară următoarea formulă: ​ Ținând cont de toate acestea, avem pentru componenta speculară următoarea formulă: ​
-$speculara = K_s \cdot  ​intensitateLumina ​\cdot  primesteLumina \cdot  (max(\vec{N}\cdot \vec{H}, 0)^n $+$speculara = K_s \cdot  ​culoareLumina ​\cdot  primesteLumina \cdot  (max(\vec{N}\cdot \vec{H}, 0)^n $
 <code glsl> <code glsl>
-     float speculara = Ks * intensitateLumina ​* primesteLumina * pow(max(dot(N,​ H), 0), n) # GLSL+     ​speculara = Ks * culoareLumina ​* primesteLumina * pow(max(dot(N,​ H), 0), n) # GLSL
 </​code>​ </​code>​
  
Line 141: Line 141:
 Atunci ​ când sursa de lumină punctiformă este suficient de îndepărtată de obiectele scenei vizualizate,​ vectorul $\vec{L}$ este același în orice punct. Sursa de lumină este numită în acest caz direcțională. Aplicând modelul pentru vizualizarea a două suprafețe paralele construite din același material, se va  obține o aceeași intensitate (unghiul dintre $\vec{L}$ și normală este același pentru cele două suprafețe). Dacă proiecțiile suprafețelor se suprapun în  imagine, ​ atunci ele nu se  vor  distinge. ​ Această situație apare deoarece în  model nu se ține cont de faptul că intensitatea luminii descrește proporțional cu inversul pătratului distanței de la sursa de lumină la obiect. Deci, obiectele mai îndepărtate de sursă sunt mai slab luminate. O posibilă corecție a  modelului, care poate fi aplicată pentru surse poziționale (la distanță finită de scenă) este: Atunci ​ când sursa de lumină punctiformă este suficient de îndepărtată de obiectele scenei vizualizate,​ vectorul $\vec{L}$ este același în orice punct. Sursa de lumină este numită în acest caz direcțională. Aplicând modelul pentru vizualizarea a două suprafețe paralele construite din același material, se va  obține o aceeași intensitate (unghiul dintre $\vec{L}$ și normală este același pentru cele două suprafețe). Dacă proiecțiile suprafețelor se suprapun în  imagine, ​ atunci ele nu se  vor  distinge. ​ Această situație apare deoarece în  model nu se ține cont de faptul că intensitatea luminii descrește proporțional cu inversul pătratului distanței de la sursa de lumină la obiect. Deci, obiectele mai îndepărtate de sursă sunt mai slab luminate. O posibilă corecție a  modelului, care poate fi aplicată pentru surse poziționale (la distanță finită de scenă) este:
 <code glsl> <code glsl>
-     float intensitate ​= emisiva + ambientala + factorAtenuare * ( difuza + speculara ); # GLSL+     culoareObiect ​= emisiva + ambientala + factorAtenuare * ( difuza + speculara ); # GLSL
 </​code>​ </​code>​
  
Line 159: Line 159:
   * $K_q$ - factorul de atenuare patratic   * $K_q$ - factorul de atenuare patratic
 </​note>​ </​note>​
- 
-Pentru a include în final culoarea de material a obiectului și culoarea luminii (care alternativ pot fi incluse și în formulele de mai sus) se folosește: 
- 
-<code glsl> 
-     vec3 culoare = culoareObiect * (emisiva + culoareLumina * (ambientala + factorAtenuare * ( difuza + speculara ))); # GLSL 
-</​code>​ 
  
 ====Modele de shading==== ====Modele de shading====
Line 182: Line 176:
 Pentru simplitate, în cadrul laboratorului vom implementa modelul de shading Gouraud (în vertex shader): Pentru simplitate, în cadrul laboratorului vom implementa modelul de shading Gouraud (în vertex shader):
   * Se vor calcula practic doar componentele difuze și speculare așa cum au fost prezentate anterior; componenta emisivă nu va fi folosită iar calculul componentei ambientale va fi simplificat astfel încât să nu mai trebuiască trimis nimic din program către shader (mai multe detalii la punctul 3).   * Se vor calcula practic doar componentele difuze și speculare așa cum au fost prezentate anterior; componenta emisivă nu va fi folosită iar calculul componentei ambientale va fi simplificat astfel încât să nu mai trebuiască trimis nimic din program către shader (mai multe detalii la punctul 3).
-  * Vom folosi ca proprietăți de material pentru obiecte doar intensitatea ​de material difuză și speculară (transmise din program către shader) : Ks și Kd. +  * Vom folosi ca proprietăți de material pentru obiecte doar culoarea ​de material difuză și speculară (transmise din program către shader) : Ks și Kd. 
-  * În shader vom aproxima lumina ambientală cu o ''​intensitateAmbientalaGlobala''​ care va fi o constantă în shader, iar în loc de Ka (constanta de material ambientală a obiectului) vom folosi Kd (constanta de material difuză a obiectului). +  * În shader vom aproxima lumina ambientală cu o ''​culoareAmbientalaGlobala''​ care va fi o constantă în shader, iar în loc de Ka (constanta de material ambientală a obiectului) vom folosi Kd (constanta de material difuză a obiectului). 
-  * Intensitatea ​luminii va fi 1 și nu va mai fi necesar să fie folosită la înmulțirile din formulele de calcul pentru componentele difuză și speculară.+  * Culoarea ​luminii ​(difuză și speculară) va fi albă, deci culoareLumina ​va fi 1 și nu va mai fi necesar să fie folosită la înmulțirile din formulele de calcul pentru componentele difuză și speculară.
   * Calculele de iluminare se vor face în world space, deci înainte de a fi folosite, poziția și normala vor trebui aduse din object space în world space. Acest lucru se poate face astfel:   * Calculele de iluminare se vor face în world space, deci înainte de a fi folosite, poziția și normala vor trebui aduse din object space în world space. Acest lucru se poate face astfel:
      ​* ​  ​pentru poziție: <code glsl>​vec3 world_pos = (model_matrix * vec4(v_position,​1)).xyz;</​code>​      ​* ​  ​pentru poziție: <code glsl>​vec3 world_pos = (model_matrix * vec4(v_position,​1)).xyz;</​code>​
egc/laboratoare/07.1606479963.txt.gz · Last modified: 2020/11/27 14:26 by victor.asavei
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