Úloha 022: 360°/180° panoramatická kamera

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

Panorama example

Základ

Jako základ poslouží projekt 048rtmontecarlo-script (nebo 048rtmontecarlo) 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 panoramatickou projekci (nazývanou "equirectangular") 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).
    Pro 360°/180° panorama se doporučuje používat poměr obrazu ("image aspect ratio") 2 : 1
  • 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.

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

Upload panoramatického obrázku

Budete muset vyrobit minimálně jeden panoramatický obrázek, který Vám přijme Facebook nebo Google a půjde prohlížet na WWW v panoramatickém režimu. Přečtěte si podrobný návod, obrázek pošlete na Váš oblíbený server a odevzdejte URL na veřejnou stránku, kde půjde prohlížet.

Náměty

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].

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.

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/.

Navíc musíte minimálně jedno panorama dovést do finální podoby - odeslat ho na některý obrázkový server (např. i Google, Facebook, ..) a odevzdat veřejně přístupné URL, kde ho půjde prohlížet v panoramatickém režimu.

Termín

Odevzdat do: 21. 4. 2019

Body

Základ: 18 bodů (fungující 360°/180° generátor paprsků, libovolné volitelné rozlišení, panoramatický obrázek na FB/Google),
až 4 body: bonus za parametrizaci zorných úhlů,
dalších až 8 bodů: bonus za vlastní zajímavé demonstrační scény..

Projekt

Visual Studio projekt: 048rtmontecarlo-script nebo 048rtmontecarlo

Zdrojový soubor

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


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