Úkolem je implementovat vrstevnatý model odrazu světla (interface IReflectanceModel) do prostředí našeho paprskového zobrazovače. Kromě naprogramování vlastních vzorečků na odraz světla (BRDF) je nutné navrhnout i datový objekt obsahující materiálové konstanty (IMaterial). Vše začlenit do nějaké ukázkové scény a vyzkoušet.
© A.Weidlich, A.Wilkie
Nastudujte článek Weidlich & Wilkie: Arbitrarily layered microfacet surfaces a implementujte vrstevnatý model v něm popisovaný. Autoři se soustředili na obecnou definici vícevrstvého povrchu materiálu a zavedli několik zjednodušení pro snadný praktický výpočet. Zabývají se též vzorkováním pro Monte-Carlo rendering, tuto část můžete směle přeskočit. Pro jednoduchost se dále můžete omezit na pouhou jednu povrchovou vrstvu (tj. dva modelované odrazy/lomy světla), viz ilustrační obrázek.
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šeho nového světelného modelu upravit (minimálně přidat váš nový model odrazu
a odpovídající materiály k několika tělesům).
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) 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.
Musíte implementovat novou třídu implementující interface IReflectanceModel.
Spolu s ní je třeba deklarovat materiálovou třídu implementující interface IMaterial.
Inspiraci čerpejte z vestavěných PhongModel a PhongMaterial.
Je třeba implementovat metody DefaultMaterial() a dvě varianty ColorReflection().
Měli byste respektovat předávaný parametr ReflectionComponent comp určující,
které komponenty odrazu se mají spočítat (korektní chování vyžaduje již základní
varianta ray-tracingu).
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.
Musíte poslat upravený zdrojový soubor MonteCarloRT.cs. U této úlohy navíc ocením pár spočítaných obrázků se zajímavými scénami, různými parametry materiálů, ve zdrojácích by měly být varianty scén dostupné jako samostatné varianty z list-boxu.
Nejlepší by bylo odevzdat scénu/scény ve formě CS-scriptu (viz projekt 048rtmontecarlo-script), scripty přiložte jako další soubory. Formát scriptu: viz vestavěné scény z adresáře data/rtscenes/.
Odevzdat do: 12. 5. 2019
Základ: 28 bodů (vrstevnatý světelný model fungující ve všech běžných situacích),
dalších až 8 bodů: bonus za zajímavé demonstrační scény..
Visual Studio projekt: 048rtmontecarlo-script nebo 048rtmontecarlo
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)