11. 5. 2012

299 792 458 m/s

"Všetky hry na Unreal engine vyzerajú veľmi podobne, nesú charakteristickú stigmu". Zamyslel sa niekto z vás nad tým čo presne sa vlastne za tým skrýva. Ide predsa o množštvo hier od rozličných dev tímov, ktoré majú úplne odlišný balík textúr, modelov, prostredie, žáner. Kde je teda ten problém. Samozrejme vo svetle. Z tohto odkazu asi múdry nikto nebude a ani z môjho podráždeného mumlania o domrdanej specular zložke Unreal enginu a žiarivej budúcnosti anizotropné BRDF a FB renderingu /Physically Based Rendering/. Nastal však čas vám v tom trochu jasno urobiť, ten wiki článok o svetle vám pekne prežujem. Je to totiž nasvietenie čo je alfa a omega dobrej grafiky, až potom nasledujú textúry /modifikované svetlom/ a niekde na konci je geometria. Aj to je dôvodom silného dôrazu na pixel shader výkon dnešných GPU a menšie ignorovanie vertex časti.

Svetlo je teda elektromagnetické žiarenie /jouly/, ktoré je vďaka časti svojho spektra o istej vlnovej dĺžke viditeľné aj ľudským okom. Definuje ho smer, intenzita, rýchlosť, vlnová dĺžka a polarizácia. S týmto sa bude váš grafický engine potýkať hneď v úvode. Veľmi často najdete v pdfkách herných vývojárov šialené rovnice, nočná mora bežného "matematika a fyzika". Ak si však uvedomíte, že svetlo ako elektromagnetické žiarenie by malo mať nejakú zložku E /elektrické pole/ a B /magnetické pole/ a počuli ste niečo o Maxwellovi, hneď vám bude jasnejšie, že polarizácie je vlastne vzájomný /fázový/ vzťah týchto dvoch veličín, a že aj napnuté lano môže kmitať v dvoch hlavných smeroch /vertikálnom a horizontálnom/.

Prejdeme však ku herne zaujímavejšej téme, ktorá súvisi aj s tým Unreal enginom v prvom odseku. Interakcia svetla a hmoty. Použijeme patologicky známu fresnelovu rovnicu. Opisuje opäť dve základné vlastnosti - odrazené a prechádzajúce svetlo /elektromagnetická energia/. Odraz je ako vieme daný uhlom dopadu, refrakciou /Snellov zákon/, indexom lomu, vlnovou dĺžkou. Svetlo, ktoré sa od telesa odrazí úplne definuje jeho spekulárna komponentu. Opakom je prechádzajúce-pohltené svetlo, ktoré sa ďalej týmto prostredím môže šíriť /skatering - chaotická propagácia, absorpcia, re-emerge/. Dôležité. Mimochodom re-emerge "znovu objavené" svetlo je vlastne druhou hlavnou zložkou nážho enginu, ktorú poznáte skôr pod názvom difúzna komponenta /čiastočný odraz/. Fotóny sa môžu vytratiť aj po ceste /herne - atmosferická vlhkosť, mraky, hmla/ zrážkou s inými časticami /elektróny, ak ich to posunie na vyššiu energetickú hladinu - objekt sa zahrieva/. Opäť veľmi dôležité, lebo sa menia aj jeho "optické" vlastnosti z pohľadu svetla. Kto povedal, že dobrý lighting model je jednoduchá vec. Fresnelovské koeficienty vlastne hovoria aký je pomer medzi spekulárnou a diffúznou zložkou svetla /čo veľa hovorí o vlastnej podstate materiálu, z ktorého je objekt zložený/ a týmto sa dostávame už len na malý krok ku problému Unreal enginu.

Wiki v inom článku hovorí. Je úplne jedno, ako dlho budete leštiť golôčku z mramoru, nikdy vám z toho zrkladlo nevznikne, tiež to, že objekt by nemal odraziť viac svetla /energie/ než koľko naňho dopadne. Mudrejším už asi došlo, že za tým bude nejaký háčik v energetickej bilanci a fresnelovej rovnici a majú pravdu. Pre kovové predmety /z ktorých zrkadlo leštením vyrobíte celkom hravo/ totiž platí - všetko prechádzajúce svetlo je plne absorbované a z toho vyplýva, že nemajú difúznu zložku a sú definované iba spekulárnou komponentou !! A tajomstvo materiálov a Unreal enginu je vám odhalené. Dodám aj to, že spekulárne a diffúzne odrazy majú aj odlišnú polarizáciu a spekulárne odlesky je možné polarizačnými filtrami zo scény odstrániť. Pamätajte aj, že všetky matariály /nielen tie lesklé/ majú spekulárnu komponentu, aj keď to na prvý pohľad nie je zjavné.


A teraz ta pointa. V hernom engine sa snažíte nejako rozumne /veľmi často hrubo aproximovane/ matematicky popísať obe tieto naše zložky a vzájomné interakcie. Napríklad model pre diffúzne nasvietenie /Lambert/, alebo spekulárne /Phong/. Nepochybujem, že o tom druhom ste už niečo počuli, týchto modelov je inak cela kopa /Blinn-Phong/. Problémom je, že popisujú šírenie svetla iba približne, empiricky, odhadom, vynechaním mnohých výpočetne náročných premenných, tak aby sa to hodilo na väčšinu materiálov, a výpočty boli rýchle a lacné. A vôbec nespomínam to, že svetlo je v sklutočnosti málokedy ideálne izotropné ako naše rovnice /máte plochý predmet, rotujete ním, "mení" sa odraz ?, potom nejde o izotropný povrch/. Naopak fyzikálne vlastnosti svetla /odrazu/ sa menia často podľa smeru, v ktorom tieto vlastnosti meriame !! Ľudské vlasy, hrubšie brúsené materiály - nekonečne množstvo normál, nekonečné variácie odrazy, preto je aj dobrý "model nasvietenie vlasov" tak ťažko realizovateľný. A nie náhodou je súčasťou poslednej Nv 680 prezentačky !!



Tri-Ace sa s Physically Based Renderingom hraje už dlhšiu dobu

Ak chceme tomuto bordeľu urobiť koniec, musíme sa pokúsiť o "fyzikálne" korektné nasvietenie /FB rendering - Physically Based Rendering/. Tu by ste už nemali nájsť modely, kde objekt odráža viac energie, než naňho dopadlo - tu máte svoj nepodarený Unreal engine. Disproporcie medzi vaším očakávaním, známou realitou a pokriveným surealizmom lesklo slizkých plôch, ktoré tie odlesky zo seba potia ako ježiš krv na kríži. Pri hrani Bioshocku som nevidel snaď jednu cimru, kde by spekulárna a diffúzna složka bola jakž takž v poriadku. Najnovší Batman tiež ďaleko neuteká, posledné verzie Unreal enginu sa snažia aktívne s týmto problémom bojovať, avšak iba staticky. Denný cyklus je pri ich LightMass technológiu /hlavne difúzne odrazy/ stále nemožný. Budúcnosťou je jasne FB rendering /o tom vám niečo neskôr extra napíšem/. Nielen z hľadiska vizuálnej kvality. Je zároveň výrazne lacnejší pre grafikov, vyžaduje ďaleko menej zásahov a korekcií-hackov /čas sú peniaze/, modifikovanie scény je jednoduchšie, dynamické zmeny dennej doby sú samozrejmosťou, anizotropiu ma doslova v duši. Práve kvalita nasvietenia v 2-3 generácii hier pre PS4 by mala byť pre vás tým najväčším vizuálnym šokom /nie textúry, nie modely, nie tiene/. BRDF /bidirectional reflectance distribution function/ je inak veľmi ohybná funkcia, 4 rozmerný modifikátor - od ideálneho "Lamberta", po komplikované viac "facetové" odrazy na neprehľadných telesách.