Quake II RTX: jak funguje ray tracing na GeForce RTX | Kapitola 8
Seznam kapitol
Nvidia před nedávnem vydala vlastní modifikaci letitého Quake II s podporou technologie RTX. Původní renderer nahradila vlastním, který obraz vykresluje s pomocí ray tracingu. A jde zatím o nejkomplexnější implementaci této technologie, na níž lze demonstrovat, co bude ray tracing znamenat pro kvalitu obrazu.
Pokud jste viděli úvodní video s „nalejvárnou“ od Nvidie a rozuměli jste mu, můžete tuto kapitolku přeskočit, bude to jeho prosté převyprávění.
Na úvodním snímku je schéma path traceru implementovaného do Quake II RTX.
![Quake II RTX: jak funguje ray tracing na GeForce RTX](https://storage.googleapis.com/pctuning-cz/media/images/n4esobj2tacf85660d53c993b3d2244455876.jpg)
Začneme z kamery (či chcete-li z oka), ze kterého do scény vyšleme primární paprsek.
![Quake II RTX: jak funguje ray tracing na GeForce RTX](https://storage.googleapis.com/pctuning-cz/media/images/0g35sh3eydyg9wx60d53db40c971595069431.jpg)
![Quake II RTX: jak funguje ray tracing na GeForce RTX](https://storage.googleapis.com/pctuning-cz/media/images/yqfqbleyje3dp7i60d53f913bedf642183426.jpg)
Render, který má údaje o scéně jen z tohoto primárního paprsku (s jednoduchým ambientním světlem, bez kterého by scéna byla černá), vypadá nějak takto:
![Quake II RTX: jak funguje ray tracing na GeForce RTX](https://storage.googleapis.com/pctuning-cz/media/images/prz52jve3012t5360d5407c226b6327522991.jpg)
Když se primární paprsek setká s povrchem, tak se od něj odráží nebo láme (anebo obojí). Ve scéně se potká s tvarovaným sklem, které je částečně propustné a částečně odráží obraz.
![Quake II RTX: jak funguje ray tracing na GeForce RTX](https://storage.googleapis.com/pctuning-cz/media/images/gllq60u3wmw9llr60d5419955044115547156.jpg)
Na snímku se pak objeví odraz zadní stěny místnosti za kamerou (reflection), který se navíc láme na tvarovaném sklu.
![Quake II RTX: jak funguje ray tracing na GeForce RTX](https://storage.googleapis.com/pctuning-cz/media/images/oz0o9chcuqbuw4i60d543243c8bc341126394.jpg)
Renderer posílá z místa prvního odrazu paprsky náhodnými směry, kde narazí buď na různá místní světla, anebo na stín.
![Quake II RTX: jak funguje ray tracing na GeForce RTX](https://storage.googleapis.com/pctuning-cz/media/images/98b3iec9wuz2rnd60d54388ccab9802880114.jpg)
Podle toho získá barvu a intenzitu nasvícení. A už tady vidíte, že scéna získala plastičtější podobu a přibylo nejen světlo, ale vystoupily v ní i stíny – třeba za sudem.
![Quake II RTX: jak funguje ray tracing na GeForce RTX](https://storage.googleapis.com/pctuning-cz/media/images/ff177oaomxx6kkr60d543e7cea80839962812.jpg)
![Quake II RTX: jak funguje ray tracing na GeForce RTX](https://storage.googleapis.com/pctuning-cz/media/images/pxl9xfs5gek5su560d54406e427f859012014.jpg)
V dalším kroku se přidá světlo od slunce – engine posílá paprsek a opět zkoumá, jestli narazí na světlo od slunce, nebo na stín.
![Quake II RTX: jak funguje ray tracing na GeForce RTX](https://storage.googleapis.com/pctuning-cz/media/images/6ti6b7k2fuxj1lw60d5442851ff8412123391.jpg)
A takto to vypadá, když se ve scéně objeví místa nasvícená přímým slunečním světlem.
![Quake II RTX: jak funguje ray tracing na GeForce RTX](https://storage.googleapis.com/pctuning-cz/media/images/bnjvs4etuxzny8t60d54446e6233115804046.jpg)
![Quake II RTX: jak funguje ray tracing na GeForce RTX](https://storage.googleapis.com/pctuning-cz/media/images/jx55uhq04czm6f560d544686b8a1843445835.jpg)
Dalším příspěvkem do nasvícení scény je nepřímé osvětlení. Ke světlům se v pátém kroku přidává i osvětlení scény světlem odraženým od okolních povrchů (5).
![Quake II RTX: jak funguje ray tracing na GeForce RTX](https://storage.googleapis.com/pctuning-cz/media/images/xw226tlkso1v0dt60d549f13ad0a344348640.jpg)
![Quake II RTX: jak funguje ray tracing na GeForce RTX](https://storage.googleapis.com/pctuning-cz/media/images/5adjzkiqtx2xk2z60d54a4de8419589535639.jpg)
![Quake II RTX: jak funguje ray tracing na GeForce RTX](https://storage.googleapis.com/pctuning-cz/media/images/ymf0r4sucmqxsq060d54bc30cf0c333033246.jpg)
I z „přisvětlovacích“ povrchů se posléze opět posílá paprsek ke blízkým zdrojům světla ve scéně.
![Quake II RTX: jak funguje ray tracing na GeForce RTX](https://storage.googleapis.com/pctuning-cz/media/images/9d56ulkn3b9szsv60d54c756d127094349945.jpg)
Díky tomu daný bod naakumuluje světlo ze scény, takže celá scéna opět o něco zesvětlí (a opět je o něco plastičtější.
![Quake II RTX: jak funguje ray tracing na GeForce RTX](https://storage.googleapis.com/pctuning-cz/media/images/g3rvf82s6dtbzv960d54ca9cd1f9408980483.jpg)
![Quake II RTX: jak funguje ray tracing na GeForce RTX](https://storage.googleapis.com/pctuning-cz/media/images/fo0irckgg2qhr0n60d54cea554ae554577949.jpg)
A k tomu se opět přidá sluneční světlo. Z přisvětlovacího povrchu pošle engine paprsky vedle místních světel i do slunce.
![Quake II RTX: jak funguje ray tracing na GeForce RTX](https://storage.googleapis.com/pctuning-cz/media/images/6fm4hijbmy0pzjh60d54d27e7453430364242.jpg)
Na scénu to má mnohem výraznější dopad než lokální světla, získá tím opět větší plasticitu a výraznější dojem nasvícení pomocí „globálního osvětlení“).
![Quake II RTX: jak funguje ray tracing na GeForce RTX](https://storage.googleapis.com/pctuning-cz/media/images/gzlmlwiybr35a2d60d54d6851d10565149698.jpg)
![Quake II RTX: jak funguje ray tracing na GeForce RTX](https://storage.googleapis.com/pctuning-cz/media/images/16u7tawya7ks55v60d54dad55850360163650.jpg)
A lze jít i dál a přidávat osvětlení od ploch nasvícených světlem od jiných ploch nasvícených zase jinými plochami a světly, téměř donekonečna. Záleží jen na tom, do jaké míry preferujete vyšší kvalitu obrazu než vyšší výkon.
V posledním kroku je zapotřebí z obrazu odfiltrovat šum.
![Quake II RTX: jak funguje ray tracing na GeForce RTX](https://storage.googleapis.com/pctuning-cz/media/images/cxsdzvgtkq93sgx60d54e42b64a3227998955.jpg)
Pro rendering v reálném čase engine používá jen „pár“ paprsků na pixel. Denoiser potom vezme obraz s poměrně nízkým vzorkováním a snaží se z něj rekonstruovat plnohodnotný obraz. Využívá pro to kombinaci odšumování statického obrazu a kombinaci více po sobě jdoucích snímků. Protože je obraz generovaný náhodně, šum na dvou po sobě jdoucích snímcích se liší a jejich kombinací získáme vyšší počet vzorků. Je to běžná technika využívaná i při odstranění šumu z videa, nevýhodou je, že mírně rozmazává obraz a při rychlejších pohybech kontrastních objektů se v obraze mohou dělat artefakty, obvykle ve formě duchů.
Na dalším obrázku je porovnání trvání renderingu jednoho snímku v závislosti na využití nových optimalizací pro rychlejší rendering a ray tracing u karet s architekturou Turing. Na prvním grafu je renderning na GTX 1080 Ti s architekturou Pascal, kde se počítá jen na klasických FP32 Cores.
Na druhém snímku je už RTX 2080, kde je část zátěže rozložená na FP32 a část na INT32 cores a výkon je zhruba poloviční. A když s výpočty pomohou i RT Cores, tak se klíčová část výpočtu smrskne ještě asi čtyřikrát.
![Quake II RTX: jak funguje ray tracing na GeForce RTX](https://storage.googleapis.com/pctuning-cz/media/images/7ivdsezq1hd44c160d54e6e0b33f619059228.jpg)
Další snímek ukazuje Q2 RTX, kolik času zabírá která část pipeline. V první části (Geometry VH) se připravuje scéna do podoby vhodné pro ray tracing. Následují výpočty odrazů, lomu světla a přímého osvětlení. Nejvíc, asi třetinu času, zabírá výpočet nepřímého osvětlení (indirect lighting), které ale obrazu přidává na věrnosti nejvíc (a obdobné je to s náročností nepřímého osvětlení i při klasickém renderingu). Na závěrečných výpočtech už se RT Cores nepodílejí a tak je stejně náročný jak s nimi, tak bez nich – jde o odšumování a post processing.
![Quake II RTX: jak funguje ray tracing na GeForce RTX](https://storage.googleapis.com/pctuning-cz/media/images/yxh6fqm5yi7u0dh60d54eabe5a50275808207.jpg)