CURS - RANDAREA CU SUPORT FIZIC (PBR)
Physically-based rendering (PBR) – după https://marmoset.co/posts/basic-theory-of-physically-based-rendering/
Mare parte din ceea ce face ca un sistem de randare cu suport fizic să fie diferit de predecesorii săi este o modelare mai realistă a comportamentului luminii și suprafețelor. Puterea de randare a avansat suficient pentru ca unele dintre vechile aproximații să poată fi acum eliminate în siguranță, iar odată cu ele unele dintre metodele vechi de producere a artei. Aceasta înseamnă că atât inginerul, cât și artistul ar trebui să înțeleagă motivațiile acestor schimbări.
Difuzia si reflexia
Difuzia și reflecția - cunoscute în terminologia CG şi ca „diffuse” și respectiv „specular” - sunt două cuvinte care descriu separarea primară a interacțiunilor suprafață / lumină. Majoritatea oamenilor sunt familiarizați cu aceste idei la nivel practic, dar nu știu cum se deosebesc din punct de vedere fizic.
Când lumina atinge o suprafață, o parte din ea se va reflecta (bounce off) îndreptându-se într-o direcție opusă celei de sosire (in raport cu normala la suprafaţă). Acest comportament este foarte asemănător cu cel al bilei de biliard care loveste manta. Pe o suprafață netedă va rezulta un aspect asemănător unei oglinzi. Însuşi cuvântul „specular”, adesea folosit pentru a descrie efectul, este derivat din termenul latin pentru „oglindă”.
Nu toată lumina se reflectă într-o suprafață. De obicei, o parte va pătrunde în interiorul obiectului iluminat. Acolo va fi absorbită de material (transformându-se de obicei la căldură) sau se va împrăștia în interior. O parte din această lumină împrăștiată se poate întoarce în afara suprafeței, devenind apoi vizibilă încă o dată pentru ochi și camere. Acest lucru este cunoscut în CG sub mai multe denumiri: „Diffuse Light”, “Diffusion”, “Subsurface Scattering”.
Adesea, absorbția și împrăștierea luminii difuze variază de-a lungul spectrului vizibil, ceea ce oferă obiectelor culoarea lor (de exemplu, dacă un obiect absoarbe cea mai mare parte a luminii, dar împrăștie albastru, acesta va apărea albastru). Răspândirea este adesea atât de haotică încât se poate spune că apare la fel din toate direcțiile - cu totul diferită de cazul unei oglinzi! Un shader care folosește această aproximare are într-adevăr nevoie de o singură intrare, numită „albedo” sau „diffuse color”: o valoare care descrie culoarea împrăștiată de o suprafață.
Translucenţa şi transparenţa
În unele cazuri, difuzarea este mai complicată - în materiale care au profunzimi de împrăștiere mai mari, cum ar fi pielea sau ceara. În aceste cazuri, o simplă culoare nu va fi de ajuns; shaderul trebuie să țină cont de forma și grosimea obiectului luminat. Dacă sunt suficient de subțiri, astfel de obiecte lasă adesea lumina să le traverseze și pot fi numite translucide. Dacă difuzia este şi mai mică (de exemplu, sticla), atunci împrăștierea nu mai este perceptibilă, vederea poate trece nestingherită dintr-o parte în alta şi obiectul se numeşte transparent. Aceste comportamente sunt destul de diferite de difuzarea tipică „aproape de suprafață”, aşa încât pentru a le simula sunt necesare shadere dedicate.
Conservarea energiei
În baza noţiunilor prezentate până aici putem trage o concluzie importantă: reflecția și difuzarea se exclud reciproc. Acest lucru se datorează faptului că, pentru ca lumina să fie difuzată, ea trebuie să pătrundă mai întâi în suprafață (adică să nu reflecte). Acest lucru este cunoscut în terminologia CG ca un exemplu practic de „conservare a energiei”: lumina care iese dintr-o suprafață nu este niciodată mai strălucitoare decât cea care a căzut pe ea inițial.
Acest lucru este ușor de implementat într-un shader: pur și simplu se scade lumina reflectată înainte de a o calcula pe cea difuză. Acest lucru înseamnă că obiectele extrem de reflectorizante vor avea puţină culoare difuză, deoarece lumina e mai degrabă reflectată decât lăsată să intre în material. Reciproca e de asemenea adevărată: dacă un obiect are o difuzie strălucitoare, el nu poate fi prea reflectorizant.
Conservarea energiei de acest fel este un aspect important al PBR. Permite artistului să lucreze cu reflectivitate și valori albedo pentru un material fără a încălca accidental legile fizicii (ceea ce de regulă arată rău). Deși aplicarea acestei constrângeri nu este strict necesară pentru producerea de artă cu aspect bun, ea are un rol util ca un fel de „fizician”, care va împiedica lucrările de artă să încalce regulile fizicii sau să devină inconsistente în diferite condiții de iluminare.
Metale
Materialele conductoare electric, în special metalele, gestionează lumina într-un mod aparte:
1/ Tind să fie mult mai reflexive decât izolatorii (non-conductorii). Conductorii vor prezenta, de obicei, reflexivități de până la 60-90%, în timp ce izolatorii sunt în general mult mai mici, în intervalul 0-20%. Aceste reflexivități ridicate împiedică cea mai mare parte a luminii să ajungă în interior și să se împrăștie, dând metalelor un aspect foarte „strălucitor”.
2/ Reflexivitatea conductorilor va varia uneori de-a lungul spectrului vizibil, ceea ce înseamnă că în reflexiile lor pot apărea nuanțe. (E un fenomen mai rar, dar apare în unele metale precum aurul, cuprul și alama). Izolatorii, ca regulă generală, nu prezintă acest efect, iar reflexiile lor nu sunt colorate.
3/ Conductorii electrici vor absorbi, mai degrabă decât să împrăștie, orice lumină care pătrunde în suprafață. Aceasta înseamnă că, în teorie, conductorii nu vor avea nici un fel de culoare difuză. În practică, însă, există adesea oxizi sau alte reziduuri pe suprafața unui metal care vor împrăștia o anumită doză de lumină.
Această dualitate între metale și aproape orice altceva determină ca unele sisteme de randare să adopte „metalness” ca parametru. În astfel de sisteme artiștii specifică gradul în care un material se comportă ca un metal, în loc să specifice doar albedo și reflectivitate în mod explicit. Acest lucru este uneori preferat ca un mijloc mai simplu de a crea materiale, dar nu este neapărat o caracteristică a redării fizice.
Fresnel
În grafică computerizată, cuvântul Fresnel[1] se referă la legătura dintre gradul de reflexivitate şi unghiul de incidenţă al luminii faţă de suprafaţă. Această legătură spune că este mai improbabil să se reflecte lumina care atinge suprafața într-un unghi apropiat de 90° decât cea care o atinge razant. Ca o consecinţă practică, formele bombate par să aibă reflexii mai luminoase lângă margini decât in centru. Cei mai mulți dintre noi suntem familiarizați cu acest lucru de ceva vreme și prezența sa în grafica computerului nu este nouă. Cu toate acestea, shaderele PBR au făcut populare câteva corecții importante în evaluarea ecuațiilor lui Fresnel.
Prima este că pentru toate materialele reflexivitatea devine totală pe margini. Acestea trebuie să acționeze ca oglinzi perfecte (necolorate), indiferent de material (cu condiţia ca suprafaţa acestuia să fie netedă). Da, într-adevăr: orice substanță poate acționa ca o oglindă perfectă dacă este netedă și privită în unghiul corect! Acest lucru poate fi contraintuitiv, dar fizica este clară.
A doua observație despre proprietățile Fresnel este că curba sau gradientul dintre unghiuri nu variază mult de la material la material. Metalele sunt cele mai divergente, dar și ele se supun regulii, ceea ce înseamnă că, dacă se doreşte realism, controlul artistului asupra parametrului Fresnel ar trebui, în general, să fie mai degrabă redus decât extins. Aceasta este o veste bună, pentru că ne poate simplifica munca. Sistemul PBR poate acum să gestioneze automat efectul Fresnel; trebuie doar să îl calculeze pe baza unora dintre celelalte proprietăți ale materialului, cum ar fi luciul și reflectivitatea.
Artistul indică „reflectivitatea de bază” (cantitatea minimă și culoarea luminii reflectate), iar ecuaţiie pt efectul Fresnel adaugă automat reflexii în partea superioară (a curburii), ajungând până la 100% (alb).
ATENTIE! Tot ce s-a discutat până aici a avut în vedere o suprafaţă perfect netedă. De acum înainte vom analiza impactul rugozităţii asupra reflexiilor unui material.
Microsuprafaţa
Descrierile de mai sus privind reflexia și difuzia depind şi de orientarea suprafeței. La nivel macroscopic, aceasta este dictată de forma meshului de randat, care poate folosi eventual și o hartă a normalelor („normal map”) pentru a descrie detaliile mici. Cu aceste informații, orice sistem de redare oferă rezultate satisfăcătoare. Cu toate acestea, mai lipsește o piesă importantă. Majoritatea suprafețelor din lumea reală au imperfecțiuni foarte mici: caneluri minuscule, fisuri și bulgări prea mici pentru a se vedea cu ochiul liber și mult prea mici pentru a fi reprezentate într-o hartă normală la o rezoluţie rezoluție rezonabilă. Deși sunt invizibile pentru ochiul liber, aceste caracteristici microscopice afectează totuși difuzia și reflectarea luminii.
Detaliile microscopice au cel mai vizibil efect asupra reflecției (difuzarea nu este foarte afectată și nu va fi discutată aici). În diagrama de mai sus, puteți vedea linii paralele de lumină incidentă care diverg atunci când sunt reflectate de la o suprafață mai dură, deoarece fiecare rază atinge o particică diferit orientată a suprafeței. Unghiul de reflexie devine imprevizibil. Pe scurt, cu cât suprafața devine mai rugoasă, cu atât lumina reflectată va fi mai „neclară”.
Din păcate, evaluarea fiecărei faţete ar fi prohibitivă pentru randare. Deci, ce trebuie să facem? Se dovedește că dacă renunțăm la descrierea detaliată a microporilor și, în schimb, specificăm o măsură generală a rugozității, putem avea shadere destul de precise care produc rezultate convingătoare. Această măsură este adesea denumită „Glossiness”, „Smoothness” sau „Roughness”. Poate fi specificată ca o textură sau ca o constantă pentru un material dat.
Detalierea la nivel microscopic este o caracteristică foarte importantă pentru orice material, deoarece lumea reală este plină de o mare varietate de micropori. Cartografierea strălucirii nu este un concept nou, dar joacă un rol esențial în PBR (detaliile având un efect atât de mare asupra reflectării luminii). După cum vom vedea în curând, există mai multe considerații referitoare la proprietățile microscopice pe care le îmbunătățește un sistem de randare PBR.
Conservarea energiei (din nou)
Întrucât modelul nostru de randare ia în considerare acum detaliile microsuprafeţei și răspândește lumina reflectată în mod corespunzător, trebuie să aibă grijă să reflecte şi cantitatea corectă de lumină. Din păcate, multe sisteme de redare mai vechi au obținut acest lucru în mod greșit, reflectând prea multă sau prea puțină lumină, în funcție de rugozitatea microscopică.
Atunci când ecuațiile sunt bine echilibrate, un motor de randare ar trebui să afișeze suprafețe rugoase ca având pete de reflexie (highlights) ce par mai mari şi mai estompate decât cele mici şi clare ale unei suprafețe netede. Această diferență aparentă de luminozitate este esențială: ambele materiale reflectă aceeași cantitate de lumină, dar suprafața mai rugoasă o răspândește în direcții diferite, în timp ce suprafața mai netedă reflectă un „fascicul” mai concentrat:
Aici avem o a doua formă de conservare a energiei, pe lângă echilibrul difuzie / reflexie descris anterior. Obținerea acestui balans este unul dintre punctele necesare oricărui motor de randare care aspiră să aibă la bază un „suport fizic”.
Prin cunoștințele de mai sus ajungem la înţelegerea unui fapt important: lucrul cu micro-suprafețe afectează direct strălucirea aparentă a reflexiilor. Acest lucru înseamnă că un artist poate picta variații ale reflexiei direct pe harta asperităţilor (roughness map) - zgârieturi, scufundări, zone degradate sau lustruite, orice - și un sistem PBR va afișa nu doar schimbarea petei de reflexie, ci și variaţia intensităţii sale. Nu este necesară nici o mască suplimentară de reflectivitate!
Acest lucru este semnificativ, deoarece două caracteristici din lumea reală care sunt legate fizic – detaliile microscopice și reflexivitatea – sunt de acum legate în mod corespunzător şi în motorul de randare. Acest lucru este asemănător cu actul de echilibrare a difuziei / reflecției descris anterior: am putea gestiona cele două valori în mod independent, dar, întrucât ele sunt legate, sarcina ar fi îngreunată de tentativa de a le trata separat.
Mai mult, o analiză a materialelor din lumea reală va arăta că valorile reflectivității nu variază mult (vezi secțiunea anterioară despre conductivitate). Un exemplu bun ar fi apa și noroiul: ambele au reflectivitate foarte asemănătoare, dar întrucât noroiul este destul de rugos și suprafața unei bălți este foarte netedă, ele apar foarte diferite în ceea ce privește reflexiile lor. Un artist care creează o astfel de scenă într-un sistem PBR ar marca diferența în primul rând prin hărți de asperitate, mai degrabă decât prin reglarea reflectivității, așa cum se arată mai jos:
Proprietățile microsuprafeţei au și alte efecte subtile asupra reflecției. De exemplu, efectul Fresnel se diminuează pe suprafețele mai rugoase (natura haotică a unei suprafețe rugoase „împrăștie” efectul Fresnel, împiedicând privitorul să-l poată percepe clar). În plus, microsuprafeţele concave pot „captura” lumina - determinând-o să se reflecte în suprafaţă de mai multe ori la rând, crescând absorbția și reducând astfel difuzia.
Referinte
Gasiti aici valorile numerice care trebuie atribuite parametrilor definitorii ale materialelor comune.
Cititi si tutorialul lui Joe Wilson despre crearea operelor de artă PBR.
Pentru cei care doresc mai multe informații tehnice, se recomanda:
Rezumatul lui Sébastien Lagarde: Rendering Remember Me
Blogul lui Sébastien Lagarde: https://seblagarde.wordpress.com/
Cursul SIGGRAPH 2010: http://renderwonk.com/publications/s2010-shading-course/
Obs:
[ AO, NM ]
Intrebari si exercitii
1/ Foloseste modelul PBR pt a reda o suprafaţă netedă din plastic / apă / metal / ceară / sticlă (in ce motor de randare preferi).
2/ Revino asupra materialelor de la exerciţiul 1/ pentru a le adăuga rugozitate, apoi stabileste dacă există o corespondenţă intre materialele cerute acolo şi: cauciuc / noroi / gheaţă / piele / nori (nu neaparat in aceasta ordine).
3/ Exporta materialele de la exercitiul 1 în Sketchfab / Unreal Engine şi compară rezultatele. Vezi care din parametri s-au păstrat ca atare, care au fost reatribuiţi şi care s-au pierdut.