Úloha 021: Vrstevnatý model odrazivosti Weidlich-Wilkie

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

Weidlich-Wilkie © A.Weidlich, A.Wilkie

Teorie

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.

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

Upřesnění

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.

Co odevzdat

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

Termín

Odevzdat do: 12. 5. 2019

Body

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

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)