Úkolem je implementovat hloubku ostrosti objektivu pro Ray-tracing tak. Jde o napodobení jevu na reálných čočkách (objektivech), kdy je dokonale ostře vykeslována pouze rovina zaostření. Kvůli sbíhání paprsků z otvoru objektivu jsou ostatní partie scény neostré (implementační technika se nazývá "distribuované sledování paprsku").
extrémní hloubka ostrosti v 3D scéně
Zabudujte svůj mechanismus do již existujícího frameworku (ray-tracing s interním vzorkováním řízeným anti-aliasingem - viz globální "thread-specific" proměnné MT.rank a MT.total) tím, že přeprogramujete generátor paprsků - objekt s interface ICamera. Váš nový generátor paprsků bude schopný dle nastavení generovat pro jeden pixel celý svazek paprsků vycházejících z povrchu čočky (aperture). Můžete rovněž implementovat různé zajímavé "stopy rozostření", tzv. bokeh.
Stačí implementovat chování světla mimo fotoaparát (paprsky začínají na vnějším okraji první čočky), není potřeba simulovat vnitřek objektivu/fotoaparátu. Pár ilustračních obrázků najdete ještě na WiKi stránce DOF nebo v slideshow distributedrt.pdf. Stránka o sektorové cloně.
Jako základ poslouží projekt 048rtmontecarlo nebo 048rtmontecarlo-script z repository grcis.
Do generátoru paprsků zabudujte tzv. interní vzorkování - korektní reakci na globální hodnoty
MT.rank a MT.total. Zvolte si vhodné vzorkování na kruhu (povrch čočky),
např. nějakou podobu jitteringu nebo Mitchellova algoritmu. Detaily o interním vzorkování viz
grcis-rt.pdf (Independent stratified sampling).
Při použití můžete počítat s nastavením dostatečně velkého faktoru převzorkování MC.total
("Supersampling" - primárně řízeno anti-aliasingem).
Do zdrojového souboru MonteCarloRT.cs přidejte Vaši implementaci kamery - je vhodné se inspirovat třídou StaticCamera a změnit zejména metodu bool GetRay ( double x, double y, out Vector3d p0, out Vector3d p1 ). Váš generátor paprsků vložte do vhodné definice scény (viz class CustomScene .. nebo do CS-scriptu definujícího scénu).
Je potřeba ukázat hloubku ostrosti vhodným nastavením světelnosti simulovaného objektivu, ocením několik různých příkladů - ukázkové scény vkládejte do list-boxu (viz funkce InitializeScenes()). Za pěkné příklady scén můžete dostat bonusové body.
Musíte poslat zdrojový soubor MonteCarloRT.cs. Pokud chcete, můžete připojit několik
pěkných výsledných obrázků.
Případný script definující scénu přiložte jako další soubor.
Odevzdat do: 1. 7. 2018
Základ: 20 bodů (funkční distribuce primárních paprsků, rozumná demonstrace v ukázkové scéně),
až 8 bodů: bonus za pokročilejší efekty na cloně (zajímavý bokeh apod.)
Visual Studio projekt: 048rtmontecarlo nebo 048rtmontecarlo-script.
Modifikujte a odevzdejte soubor: MonteCarloRT.cs
Do funkce InitializeScenes() zadejte své vlastní jméno!
pokud definujete scénu scriptem, přiložte příslušný .cs soubor,
pokud spočítáte nějaké hezké obrázky, můžete je v menším rozlišení přiložit.
Copyright (C) 2016-2018 J.Pelikán, last change: 2020-05-16 23:04:24 +0200 (Sat, 16 May 2020)