rej trejsingTakéRTPokročilý
Definice
Ray tracing je technika vykreslování, která simuluje cestu světelných paprsků scénou a z jejich průsečíků s objekty počítá barvu pixelů. Používá se pro věrohodné odrazy, stíny, průhlednost a globální osvětlení, ale je výpočetně náročnější než běžná rasterizace.
Nezaměňujte: Ray tracing se používá v počítačové grafice i v optických simulacích, zde jde o význam související s vykreslováním 3D scén.
Paprsky místo vyplňování trojúhelníků
Ray tracing vychází z jednoduché otázky: odkud se do konkrétního pixelu dostalo světlo? Rasterizace obvykle promítá trojúhelníky scény na obrazovku a potom dopočítává osvětlení pomocí triků. Ray tracing naopak vysílá z kamery paprsky do scény a hledá, s čím se potkají.
Algoritmus pro každý pixel vytvoří primární paprsek, najde nejbližší průsečík s objektem a podle materiálu rozhodne, co dál. Lesklý povrch vyšle odražený paprsek, sklo paprsek lomí a stínový paprsek ověří, zda mezi bodem a světlem neleží překážka. Základní smyčka může vypadat takto:
for pixel in image:
ray = camera.ray(pixel)
hit = scene.closest_hit(ray)
color[pixel] = shade(hit, scene)Odrazy, průhlednost a cena za přesnost
Každý další odraz zvyšuje šanci na věrohodnější obraz, ale také násobí počet průsečíků, které musí procesor nebo GPU spočítat. Složitá scéna proto používá akcelerační struktury, typicky BVH, aby paprsek nemusel testovat každý trojúhelník zvlášť. Výsledek bývá přesnější u stínů, zrcadel, lesklých kovů a průhledných materiálů.
Ray tracing často pracuje se vzorkováním. Jeden paprsek na pixel nestačí pro měkké stíny, rozmazané odrazy ani nepřímé osvětlení. Více vzorků snižuje šum, ale prodlužuje výpočet. Renderovací systémy proto kombinují omezený počet paprsků s odšumováním, časovou stabilizací a aproximacemi.
Dva příklady z praxe
Zrcadlová výloha ve hře
Herní scéna obsahuje ulici s výlohou, ve které se má odrážet projíždějící auto mimo záběr kamery. Rasterizační trik založený na obrazu obrazovky auto nezachytí, protože auto v aktuálním snímku není vidět. Ray tracing vyšle odražený paprsek do skutečné 3D scény, najde auto a zobrazí jeho odraz ve skle.
Produktový render prstenu
Studio připravuje vizualizaci zlatého prstenu s kamenem pro e-shop. Kov vytváří ostré i rozmazané odrazy okolí a průhledný kámen láme světlo podle materiálu. Ray tracing pomůže vytvořit přesvědčivé odlesky a stíny, takže zákazník lépe vnímá tvar a povrch produktu.
Proč moderní GPU kombinují ray tracing s rasterizací
Herní enginy obvykle nevykreslují celý snímek pouze ray tracingem. Rasterizace zůstává velmi rychlá pro viditelnou geometrii, zatímco paprsky se použijí na vybrané efekty: odrazy, globální osvětlení, kontaktní stíny nebo ambient occlusion. Hybridní přístup šetří výkon a zároveň zlepšuje místa, kde jsou starší triky nejvíc vidět.
Kde ray tracing končí a začíná path tracing
Path tracing je příbuzná metoda, která sleduje mnoho náhodných cest světla a snaží se řešit celkové osvětlení scény statisticky. Prakticky jde o specializovaný způsob ray tracingu. Výsledky mohou být velmi realistické, ale čistý path tracing potřebuje hodně vzorků, takže v interaktivní grafice bývá doplněn odšumováním a zjednodušením materiálů.
Příklady z praxe
Odraz mimo záběr kamery
Herní scéna obsahuje obchodní ulici se skleněnou výlohou. Při zapnutí ray tracingu se ve skle objeví i objekt, který není přímo na obrazovce, protože odražený paprsek hledá geometrii ve 3D scéně. Výsledek působí věrohodněji než odraz složený jen z aktuálního snímku.
Jednoduchý výukový renderer
Malý offline renderer počítá obrázek koule na stole. Pro každý pixel vyšle paprsek z kamery, najde nejbližší zásah a podle normály povrchu spočítá barvu. Program je pomalý, ale dobře ukazuje princip bez složitého herního enginu.
for pixel in image: ray = camera.ray(pixel) hit = scene.closest_hit(ray) image[pixel] = shade(hit)
Časté omyly
- MýtusRay tracing automaticky znamená fotorealistickou grafiku.
- Ve skutečnostiRay tracing zlepšuje výpočet světla, ale fotorealismus závisí také na materiálech, modelech, texturách, expozici, odšumování a nastavení světel. Špatná scéna bude působit uměle i s paprsky.
- MýtusKdyž hra zapne ray tracing, všechno se počítá paprsky.
- Ve skutečnostiVětšina her používá hybridní vykreslování. Rasterizace kreslí základní obraz a ray tracing doplňuje vybrané efekty, aby výkon zůstal použitelný.
Časté dotazy
- Proč ray tracing zpomaluje hry i na silné grafické kartě?
- Ray tracing zatěžuje grafickou kartu tím, že pro mnoho pixelů hledá průsečíky paprsků s objekty scény. Jeden snímek může potřebovat primární paprsky, stínové paprsky a další paprsky pro odrazy nebo lom. Specializovaná jádra v moderních GPU pomáhají s průsečíky a akceleračními strukturami, ale počet výpočtů stále rychle roste s kvalitou efektů.
- Je ray tracing totéž co path tracing?
- Ray tracing není totéž co path tracing. Ray tracing je obecná technika sledování paprsků a může se použít jen na stíny, odrazy nebo průhlednost. Path tracing je způsob vykreslování, který pomocí mnoha náhodných paprsků odhaduje šíření světla ve scéně. Path tracing je obvykle fyzikálně věrnější, ale potřebuje více vzorků a odšumování.
- Potřebuje ray tracing speciální hardware?
- Ray tracing nepotřebuje speciální hardware v absolutním smyslu, protože paprsky lze počítat i na běžném CPU. Interaktivní použití ve hrách však výrazně těží z GPU akcelerace a jednotek určených pro průsečíky paprsků s geometrií. Bez akcelerace se ray tracing často používá spíše v offline renderingu, náhledech nebo výukových programech.
- Dá se ray tracing použít mimo hry?
- Ray tracing se používá mimo hry v architektonické vizualizaci, produktových renderech, filmu, animaci a technických simulacích optiky. Společným důvodem je potřeba přesvědčivých stínů, odrazů, průhlednosti a nepřímého osvětlení. Offline render může běžet minuty nebo hodiny, zatímco hra musí typicky udržet plynulý obraz v reálném čase.
Zdroje
- Ray tracing (graphics)(otevře se v novém okně)
- Ray Tracing In Vulkan(otevře se v novém okně)
- An improved illumination model for shaded display(otevře se v novém okně)
- Rendering(otevře se v novém okně)