Úloha 022: Alternativní kamera (generátor paprsků)

Úkolem je implementovat alternativní generátor paprsků (kameru, interface ICamera) do našeho paprskového zobrazovače. Kameru začleňte do ukázkové scény a vyzkoušejte, můžete pro lepší demostraci vyrobit vlastní bohatší scénu.

Fish eye example

Základ

Jako základ poslouží projekt 048rtmontecarlo nebo 048rtmontecarlo-script z repository grcis. Je připravena aplikace, která v jednoduchém okně zobrazuje obrázek spočítaný ray-tracingem. Definice scény je v kódu, tu budete muset pro testování Vaší nové kamery upravit (minimálně vyměnit tu kameru).
Pro doplnění Vaší implementace použijte zdrojový soubor MonteCarloRT.cs, do něj budete psát Váš nový kód a nakonec mi jej odevzdáte. I definici scény (CustomScene.TestScene()) tam najdete. Této konstrukční funkci se předává též textový parametr Param: z formuláře.
Pokud byste chtěli využít možnosti definovat scénu scriptem, použijte projekt 048rtmontecarlo-script a popis scény vložte do nového .cs souboru (inspirace viz vestavěné scény z adresáře data/rtscenes/). I do skriptu je předán textový parametr

Param: z formuláře.

Detaily

Budete muset implementovat nějakou jinou, zajímavou projekci a zpřístupnit ji pro ray-tracing ve formě generátoru paprsků (interface ICamera). Budete se muset seznámit s následujícími komponentami ray-traceru:
  • ICamera - generátor primárních paprsků, obecný interface, ten musíte Vaším modulem splnit. Základem je metoda GetRay(), kterou bude volat každý, kdo potřebuje vygenerovat primární paprsek. Vlastnosti Width, Height a AspectRatio slouží k nastavování rozměrů obrazu (pokud je nastaven poměr AspectRatio, předpokládá se, že se změní výška obrazu, šířka bude naopak zachována).
  • StaticCamera - jednoduchá implementace kamery pro lineární perspektivu. Střed projekce, směr pohledu, Up vektor, horizontální zorné pole ve stupních.. Při Vaší implementaci se můžete touto třídou inspirovat.
  • RayScene - datový objekt obsahující všechny potřebné informace o vykreslované scéně. Do něj musíte zanést Vaši kameru a nahradit tak implicitní StaticCamera. Pro lepší předvedení schopností Vaší kamery by asi bylo vhodné obohatit některou ze standardních scén (viz RayCastingScenes.cs). Z nich můžete vycházet, ale Váš nový kód prosím okopírujte do MonteCarloRT.cs.
Pro jednodušší ladění máte možnost zadat iniciální hodnoty prvků formuláře do funkce InitializeScenes(). Ta bude zavolána jednou při startu aplikace. Nezapomeňte zadat do parametru 'name' Vaše jméno.

Názorný přehled relevantních komponent objektového návrhu našeho ray-traceru najdete také v této prezentaci.

Náměty

Rybí oko - nelineární objektiv s velmi širokým zorným polem (pozor, zde budete asi muset využít možnosti vrátit hodnotu false z API funkce GetRay() - pro ty body v průmětně, pro které neexistuje zobrazovací paprsek..).
Válcová perspektiva - přímý výpočet širokoúhlého (panoramatického) obrázku, místo roviny se promítá do části pláště válce, v extrémním případě do celého 360° okolí kolem "fotoaparátu".
360°/180° "equirectangular" panorama - panorama obsahující kompletní pohled do 3D světa z místa pozorovatele. Pro použití v realtime/HDR počítačové grafice se používá jednoduché mapování [azimut,výška].
Všesměrová fotografie - existuje mnoho specíálních objektivů a snímacích systémů, můžete se některým inspirovat..

Co odevzdat

Musíte poslat upravený zdrojový soubor MonteCarloRT.cs. Zajímavá nastavení a polohy kamery začleňte do nových definic scén přístupných přes list-box v naší aplikaci. Připojte pár komentářů popisujících Váš přístup, čím jste se inspirovali, apod.

Pokud chcete, můžete Vaši scénu odevzdat ve formě CS-scriptu (viz projekt 048rtmontecarlo-script), tento script přiložte jako druhý soubor. Formát scriptu: viz vestavěné scény z adresáře data/rtscenes/.

Termín

Odevzdat do: 15. 4. 2018

Body

Základ: 18 bodů (fungující generátor paprsků, minimálně jedna vlastní testovací scéna),
dalších až 8 bodů: bonus za zajímavost kamery nebo její implementace, parametrizace kamery
Bunusové body za zajímavost scény budu udělovat v rámci úlohy 061, musí však být scéna zadána pomocí scriptu! V průvodním mailu mne upozorněte na to, že byste chtěli přidělit bonus za scénu.

Projekt

Visual Studio projekt: 048rtmontecarlo nebo 048rtmontecarlo-script

Zdrojový soubor

Modifikujte a odevzdejte soubor: MonteCarloRT.cs
Do funkce InitializeScenes() zadejte své vlastní jméno!


Copyright (C) 2011-2018 J.Pelikán, last change: 2020-05-16 23:04:24 +0200 (Sat, 16 May 2020)