Počítačová grafika dnes

(Píše sa rok 2021)

Pingpong patril medzi prvé počítačové hry. Svetlo sveta uzrel v roku 1972 (relatívne nedávno, nie?). Grafika hry bola naozaj jednoduchá. Ako rakety slúžili dve čiary. Sieťka bola dlhá čiara v strede. Hráči ovládali rakety a odrážali si malý štvorček-loptičku. Na vrchu obrazovky bolo počítadlo bodov. Oficiálny názov hry je Pong. [1]
Prvá počítačová hra - Pong
Obr. 1.: Prvá počítačová hra - Pong [2]
Odvtedy prešla počítačová grafika vývojom a dnes je úžasná, niekedy sa ani nedá rozoznať od reality. Za svoj nádherný vzhľad vďačí matematike. Matematika totiž opisuje prírodné zákony s dokonalou presnosťou a túto schopnosť vieme preniesť do počítačov. Nie celú, iba jej malý zlomok, ale aj to stačí na to, aby sa nám animácie zdali ako živé. Simulovať celú prírodu, tak ako je v skutočnosti, na to by pravdepodobne nestačili ani všetky počítače na svete.

Nie všetky veci sa robia rovnako a tak si ukážeme, ako fungujú aspoň niektoré z nich.

SIGGRAPH

SIGGRAPH je grafická konferencia, kde výskumníci z oblasti počítačovej grafiky každoročne prezentujú svoje objavy. Keď si dáš vyhľadať videá SIGGRAPH 2020 (alebo iný rok), nájdeš zhrnutie konferencie. Výsledky sú veľmi zaujímavé na pohľad. Často ide o simulácie rôznych tekutín, pohybu postáv, textílií a podobných vecí. Výskumníci sa každý rok tešia, že prekonali ďalšiu prekážku a počítačová grafika sa zasa o čosi viac podobá nášmu svetu.

Konferenciu nespomíname náhodou. Za každým objavom stojí matematika a môžeš tak vidieť jej použitie v praxi. Aj v tomto článku budeme ukazovať obrázky zo SIGGRAPH-u, aby si videl, kde sme dnes.

Pevné objekty

Táto kategória je čo do výpočtov aj do práce z tých ľahších. Tuhé/pevné telesá tvoria väčšinu objektov. Sú to všetky také klasické objekty, ako domy, autá, stoličky, vlaky atď. Skrátka to, čo je aj v našom svete pevné/tuhé.

Prácu s nimi sme si predviedli aj v článkoch o analytickej geometrii. Grafik spraví v programe nejaký objekt. Ten sa skladá z veľmi veľa trojuholníčkov. Ukázali sme si aj vykresľovanie týchto objektov, tzv. raytracing.
Pevné telesá
Obr. 2.[15]: Pevné telesá sú také, ktoré majú stále svoj rovnaký tvar. Môžu to byť napríklad domy, autá, nábytok ale aj ľudia či stromy.

Plyny a tekutiny

Oheň, voda, dym, prach. To všetko sú veci, ktoré dokážu vo filmoch spraviť úžasné efekty. Netreba ich natáčať vždy len naživo. Dajú sa spraviť aj na počítači.
SIGGRAPH 2011: oheň
Obr. 3.: SIGGRAPH 2011: oheň [8]
SIGGRAPH 2020: voda
Obr. 4.: SIGGRAPH 2020: voda [7]
SIGGRAPH 2020: dym
Obr. 5.: SIGGRAPH 2020: dym [9]
Všetky tekutiny a plyny sa skladajú z miliónov malých molekúl. Obaliť všetky molekuly do trojuholníčkov, tak ako sa to robí pri pevných telesách, by bolo trošku náročné. Našťastie má matematika riešenie aj na toto.

Kedysi dávno, medzi rokmi 1822 a 1850 dvaja matematici Navier a Stoke opísali správanie plynov a kvapalín. Základom pre ich rovnicu bol Newtonov zákon sily $\vec{F} = m \cdot \vec{a}$. Ide tam o niečo také, že pre každú časticu plynu/kvapaliny chcú vypočítať to, ako sa hýbe - teda jej zrýchlenie $\vec{a}$. Hmotnosť častice $m$ je známa. Možno aj ty si sa kedysi na chémií učil, koľko váži molekula vody. Potom je tam vektor sily $\vec{F}$. Tento vektor sa skladá zo všetkých síl, ktoré na časticu pôsobia. V Navier-Stokovej rovnici je to gravitačné zrýchlenie, rýchlosť tekutiny/plynu, tlak (ktorý vyvíja plyn/kvapalina na nejakú jednotku plochy), hustota a viskozita. [4]

Navier-Stokova rovnica je základ aj pre dnešné simulácie kvapalín a plynov. Samozrejme existujú jej rôzne vylepšenia, ktoré zdokonaľujú vzhľad a správanie plynov/kvapalín. Na jej použitie v počítači existujú rôzne spôsoby.

Textílie

Textil zasa nemôžeme obaliť trojuholníčkami. Chceme, aby sa hýbal. Chceme, aby uterák nepadal ako doska, ale ako uterák. Chceme, aby tričko nevyzeralo na človeku ako brnenie, ale ako tričko. Chceme, aby vlajka netrčala na stožiari ako kus dreva, ale aby pekne viala vo vetre.

Textílie vieme zobraziť tromi spôsobmi. Prvý je geometrický. Je to najjednoduchší spôsob a používal sa už dávno. Je rovnaký ako pevné telesá. Látku vymodeluje grafik v nejakom programe. Lenže takáto handrička je ako pevné teleso. Nemá žiadne fyzikálne vlastnosti textilu a nevie sa nijako hýbať, krčiť, viať. Iba stojí. Druhý spôsob je fyzikálny. Vedci sa pozrú na vlastnosti materiálu (napr. ako sa dá natiahnuť, či je tenký, hrubý, dá sa ľahko ohnúť alebo je to naškrobená košeľa). Podobne ako Navier so Stokom, spravia nejaké rovnice. Tie sa potom použijú na to, aby sa vedelo, ako sa má textil správať. Fyzikálny spôsob je veľmi náročný na výpočty a dlho trvá, kým sa napríklad správne nasimuluje celý pád uteráku na zem. Preto sa niekedy používa hybridný model. Tam grafici spravia nejaké základné tvary uteráka a zvyšok sa dopočíta. [3]
SIGGRAPH 2017: textil
Obr. 6.: SIGGRAPH 2017: textil [12]
Oblečenie sa snažili nasimulovať aj v roku 2020 [10]. Panáčik, ktorý sa hýbe, má na sebe oblečené tričká z rôznych materiálov. Tričká sa vlnia a krčia podľa jeho pohybu. V roku 2018 skúmali mokrú textíliu [11]. Chceli vedieť, čo sa s látkou deje, keď je namočená alebo ako vyzerá v okamihu, keď sa na ňu vyleje voda.

Vlasy

Vlasy dotvárajú charakter človeka. Dokonca dokážu doladiť celú atmosféru. Uvedomili si to aj tvorcovia animovaných filmov a tak sa pustili do výskumu vlasov.

Vlasom máme na hlave véééľmi veľa. Spraviť každý vlas zvlášť zaberie nejaký ten rok. Ešte treba, aby sa vedel správne pohnúť na každý závan vetra alebo pohyb. Samozrejme musí dobre vyzerať spolu s ostatnými. Nechceme, aby postavička mala vlasy pripomínajúce ježkov kožuch.

S týmito požiadavkami zasa pomôže matematika. Niektorí ľudia sa pozerali na to, ako fungujú vlasy. Ako vyzerajú, keď sa človek nehýbe, ako keď otočí hlavou, keď uteká alebo keď mu do nich fúka vietor. Zasa spravili nejaké rovnice, ktoré opisujú správanie jedného vlasu. Lenže vlasov je veľmi veľa a nechceme rovnice počítať pre každý vlas. Robí sa to tak, že sa vyberú nejaké vlasy, pre ne sa vypočítajú rovnice a okolité vlasy sa správajú podľa nich. Takto treba robiť výpočty pre menej vlasov, ale animácia stále vyzerá dobre. [5]

Aj štúdio Pixar sa zaoberalo vlasmi, keď chcelo spraviť pekné filmy. Vo filme Brave má hlavná hrdinka krásne, ryšavé a hlavne kučeravé vlasy. Nad tým, ako spraviť kučeravé vlasy si lámali hlavy dlho. Nakoniec zistili, že kučeravý vlas sa správa ako pružina a tak do rovnice pre vlas vložili rovnicu pružiny. Výsledok sa im celkom podaril, čo povieš? [6]
Kučeravé vlasy
Obr. 7.[13]: Kučeravé vlasy potrápili aj tvorcov animovaných filmov.

Svetlo

Či je dôležité svetlo, o tom sa ani nemusíme baviť. Okrem toho, že nám umožňuje vidieť objekty, dotvára aj atmosféru. Vieme spraviť krásny slnečný deň, smutný upršaný alebo strašidelnú tmavú noc. Nehovoriac o rôznych efektoch, ktoré robia odrazy svetla.

Na osvetľovanie scén v hrách a animovaných filmoch existuje viacero spôsobov, viac či menej realistických. Tu si povieme niečo o jednej z nich, o raytracingu.

Najprv nám však treba vedieť, ako funguje naozajstné svetlo. Svetlo pochádza zo slnka. Pre jednoduchosť si predstavme, že k nám prichádza v lúčoch. Už starý Isaac Newton zistil, že lúč sa skladá z viacerých farieb (na detaily teraz nie je priestor, ale určite niečo viac nájdeš na internete). Taký lúč doputuje na zem a do niečoho narazí. Napríklad do červeného jablka. Jablko pohltí všetky farby z lúča, okrem červenej. Tú odrazí. Odrazená červená farba sa nám dostane do oka a preto vidíme jablko červené. Zelené jablko zasa pohltí všetky farby okrem zelenej, ktorú odrazí. Naše oko zachytí odrazenú farbu a my vidíme zelené jablko. Svetlo teda funguje tak, že príde k nám v lúčoch, odráža sa po svete a niektoré z tých odrazených lúčov zachytí naše oko.

Počítačová grafika tiež skúša napodobniť odrážanie lúčov. Zo slnka príde ohromne veľa lúčov a len malé percento z nich zachytia naše oči. Je hlúposť sledovať každý lúč a pozerať, ako sa odráža. Raytracing to robí naopak. Pre každý pixel budúceho obrázku vyšle lúč, ktorý vychádza z kamery, prechádza cez daný pixel, poodráža sa od objektov v scéne a z každého objektu, ktorý stretol, zoberie kúsok farby. Takto dostaneme iba toľko lúčov koľko potrebujeme. Lúč narazí do prvého objektu. Zapamätá si jeho farbu, potom sa odrazí do ďalšieho objektu a z tohto objektu pripočíta kúsok farby. Lúč sa môže odraziť niekoľkokrát. Lúč sa odráža podľa zákonu uhla odrazu, čiže podľa toho, ako to funguje v prírode. Ak chceme zistiť, či sa objekt nachádza na svetle alebo v tieni, zoberieme si vektor, ktorý ukazuje z objektu do slnka a tým smerom vyšleme ďalší lúč. Ak lúč na svojej ceste za slnkom stretne iný objekt, znamená to, že náš objekt je v tieni. Vtedy farbu trošku stmavíme.
Raytracing
Obr. 8.: Osvetlenie pomocou raytracingu. Dokáže na predmetoch vytvoriť odrazy okolia. No je to výpočtovo zložité aj v dnešnej dobe. [14]

Zdroje

[1] Pong. 2021. https://en.wikipedia.org/wiki/Pong

[2] https://www.youtube.com/watch?v=XNRx5hc4gYc

[3] RUDOLF A., BOGOVIC S., CAR B. R. et al.: Textile Forms’ Computer Simulation Techniques. 2017. https://www.intechopen.com/chapters/54600

[4] BRIDSON R., Muller-Fisher M.: Fluid Simulation. 2007. SIGGRAPH 2007 Presentations.

[5] CHAI M., ZHENG CH., ZHOU. K.: Adaptive Skinning for Interactive Hair-Solid Simulation

[6] IBEN H., MEYER M., PETROVIC L.: Artistic Simulation of Curly Hair

[7] An Interface Quadrature Material Point Method for Coupled Solids and Fluids. 2020. https://www.youtube.com/watch?v=Au3A7YUOol8

[8] Animating Fire with Sound. 2011. https://www.youtube.com/watch?v=hZC6ORUbLog

[9] Frequency-Domain Smoke Guiding. 2020. https://www.youtube.com/watch?v=Qi8pDl7jMd0

[10] Homogenized Yarn-Level Cloth. 2020. https://www.youtube.com/watch?v=vn-WzWm74Pc&t=108s

[11] A Multi-Scale Model for Simulating Liquid-Fabric Interactions. 2018. https://www.youtube.com/watch?v=xvyGpBKevLM&t=24s

[12] Anisotropic Elastoplasticity for Cloth, Knit and Hair Frictional Contact. 2017. https://www.youtube.com/watch?v=eGtB0VXJsuI

[13] Computer Simulation (Pixar in a Box). https://www.youtube.com/watch?v=YeYW8TIWLG8

[14] RTX Boulevard - Direct Illumination Demo. https://www.youtube.com/watch?v=AiliuDkVJRs&t=19s

[15] www.pexels.com