\chapter{Modul RayTracer}

Jiří Bittner, bittner@fel.cvut.cz \\
Antonín Míšek, antonin.misek@skoda-auto.cz \\
15. října 2015

\section{Co to je}
Jedná se o zobrazovací modul, který používá metodu ray tracing. Používá progresivní vykreslování obrazu a je velmi interaktivní. V CAVE ve Škoda auto a.s. dokáže běžet v reálném čase. Modul umí také běžet v módu server bez zobrazovacího okna, kdy umí počítat obrázky pomocí příkazu \uv{renderimage} nebo ve spolupráci s modulem Cluster jako klient pro distribuovaný ray tracing.

\section{Implementace}
Aktuálně je plně funkční CPU implementace, umí zobrazovat bez stínů, s přímými stíny a s globálním osvětlením. Jako akcelerační strukturu používá dvě úrovně BVH (jedna je na úrovni uzlů ve scéně a druhá nad sítěmi trojúhelníků).
Výpočetně náročné části používají SSE, AVX nebo AVX2 instrukce (je nutné zvolit při kompilaci).

\section{Ovládání}

\subsection{sceneID}
ID scény, která se má vykreslovat.

\subsection{cameraID}
ID kamery, která se má použít pro vykreslování.

\subsection{maxLights}
Maximální počet použitých světel (použije první světla ve scéně).

\subsection{maxRecursionDepth}
Maximální hloubka rekurze.

\subsection{trianglesPerLeaf}
Počet trojúhelníků v listech BVH (reálný počet může být větší).

\subsection{shadows}
Zapnutí zobrazení stínů.

\subsection{rayOffset}
Posunutí paprsku při pokračování v rekurzi (pomáhá proti vzniku numerických chyb).

\subsection{headlight}
Zapnutí/vypnutí bodového světla v pozici kamery.

\subsection{cameraType}
Typ kamery použitý pro vykreslování.

\subsection{radialDistortion}
Zapnutí/vypnutí simulace deformace obrazu jako v reálných objektivech.

\subsection{horizontalFOV, verticalFOV}
Úhly definující šířku/výšku pohledu kamery.

\subsection{optimization}
Parametry optimalizace BVH.

\subsection{drawTimeouts}
Nastavení času pro výpočet před prvním vykreslením obrázku a času mezi progresivním vylepšováním.

\subsection{fullPolarization}
Nastavuje matematický model pro simulaci polarizace.

\subsection{samplesPerPixel}
Maximální počet vzorků na jeden pixel.

\subsection{samplingStrategy}
Volba algoritmu pro rozložení pixelů pro progresivní vykreslování.

\subsection{filterRadius}
Poloměr vyhlazovacího filtru. Záporné hodnoty zapínají automatickou volbu poloměru.

\subsection{contrast, brightness}
Přizpůsobení kontrastu a jasu v postprocesoru.

\subsection{syncRendering}
Vykreslí nejdříve po kompletním výpočtu prvního průchodu dle nastavení samplingStrategy. Nemusí respektovat první čas v drawTimeouts.

\subsection{usePathTracing}
Zapnutí globálního osvětlení.

\subsection{renderThreads}
Počet vláken použitých pro výpočet (doporučená hodnota pro interaktivní zobrazení je o jedničku nižší než je počet jader v systému).

\subsection{remoteTiles}
Počet bloků, které se bude snažit poslat na klienty.
