Raytracing – podstata a pipeline

Raytracing – podstata a pipeline

Raytracing – podstata a pipeline

Nekomentované

Raytracing, v slovenčine ‘metóda sledovania lúča’, je veľmi efektívny a najpoužívanejší algoritmus pre rendering scén v počítačovej grafike. Jeho princíp je jasný už z jeho názvu. Pri raytracingu vieme následne okrem farby rátať aj odlesky, tiene, priesvitnosť a rôzne iné artefakty, ktorými náš vyrenderovaný obrázok priblížime realite. Pri renderovaní budeme musieť poznať nasledovné:
plochy – geometrické objekty v scéne, ich súradnice v priestore;
reflekčné charakteristiky plôch – farba, normály, absorbcia, odraz, lom…;
osvetlenie – svetelné zdroje, pozícia, smer intenzita, iné vlastnosti;
Pričom predpokladáme, že naša scéna je dokonalá, tj. oproti reálnemu svetu je bez malých prachových častíc v priestore, a svetlo pri zažatí dosiahne rovnakú distribúciu v každej časti scény.

K problému sa dá pristupovať dvoma prístupmi:
dopredná metóda - tj. tak ako v prírode, fotóny vychádzajú zo svetelného zdroja, šíria sa rýchlosťou svetla, je ich v podstate “nekonečne veľa”, po mnohých odrazoch niektoré z nich dorazia do ľudského oka, resp. do kamery.
spätná metódapoužívaná pri raytracingu, lúče vystreľujeme z kamery a ideme v inverznom poradí smerom do svetelného zdroja. Vyhneme sa rátaniu lúčov, ktoré do kamery nikdy nedorazia (čo by bolo v podstate 99 percent z nich).

Raytracing je jednoducho implementovateľný a intuitívny algoritmus, vhodný najmä na lesklé objekty. Najťažšie na ňom je ho zefektívniť a akcelerovať jeho výpočet. Potom sa dá efektívne renderovať aj v reálnom čase. Nie úplne dobre zvláda renderovanie matných povrchov (z hľadiska reálnosti výsledku).

Pipeline raytracingu

Ray generation – generovanie lúča – lúč začína v kamere, polpriamka vychádzajúca z kamery cez renderovaný pixel priemetne.

Ray traversal – “pochodovanie po lúči”, prechádzame po lúči v scéne, ktorú máme rozdelenú na bunky. Zisťujeme, či v danej bunke (oblasti) scény sa nachádza nejaký objekt. Pokračujeme, až kým nenájdeme bunku, v ktorej sa nachádza nejaký objekt.

Intersection – hľadáme prienik lúča s daným objektom v danej bunke scény. Hľadáme súradnice x,y,z prieniku. Ak je v bunke objektov viac, hľadáme ten, ktorého prienik je najbližší ku kamere, tj. hľadáme najmenší parameter t pre prieniky lúča r=o+t.d (o – origin, d – direction)

Shading – tieňovanie, výpočet farby (nie tieňa). V bode priesečníka sa opäť generujú lúče:
tieňový lúč – ktorý smeruje do svetelného zdroju, opakujeme celý algoristmus pre tento lúč. Ak lúč prechádza nejakým objektom, znamená to, že je v tieni, ak neprechádza, tak nie je v tieni.
odrazený lúč – začína tiež v priesečníku, jeho smer je daný odrazom v danom bode na základe materiálu daného povrchu, resp. na základe jeho normály. Tento odrazený lúč opäť putuje scénou a opakujeme pre neho celý algoritmus.
druhý odrazený lúč – navyše, ak je materiál priesvitný, tak z priesečníku vychádza druhý odrazový lúč, láme sa dovnútra objektu na základe indexu lomu.

Model perspektívnej kamery

V grafike sa používa dokonalá perspektívna kamera, takzvaná dierková kamera, alebo pinhole camera. To zaručuje obraz bez deformácií a drobných nepresností, oproti reálnej kamere so šošovkou.

raytracing2

Kamera má niekoľko parametrov:
o – origin, bod pozície kamery,
u – up vector – vektor určujúci, ktorým smerom je “hore” v kamere (keďže kamera môže byť napríklad trochu pootočená/naklonená),
f – vektor určujúci, kam sa kamera pozerá, ohnisková vzdialenosť
x,y – rozmery priemetne
vzdialenosť od o do f je ohnisková vzdialenosť
xres,yres je rozlíšenie priemetne v pixloch, cez každý pixel smerujeme vektor d smerom od o do scény
fov – field of view, uhol, koľko toho kamera vidí z priestoru, uhol medzi priamkami oa a ob, kde a=max(x), b=min(x)


facebooktwittergoogle_pluspinterestlinkedintumblr

Komentáre

Trochu matiky *

Späť hore