9. Fotorealisztikus képszintézis¶
Inkrementális képszintézis
Képminőség vs. számítási idő
A fizikai modellhez közelebbi számítási mód
Toy Story
\(\rhd\) Melyek azok az optikai hatások, amelyeket a korábbi, inkrementális képszintézissel körülményes megoldani?
Sugárkövetés¶
raytracing
1980-as évek, Andrew S. Glassner
Képpontonként számol azonos módszerrel
A fénysugarak útját a kamerától a fényforrásig követi
\(\rhd\) Miért előnyösebb a kamerából indítani a fénysugarakat, nem pedig fordítva?
direkt megvilágítás: A fényforrásból induló fénysugár a felületi pontról visszaverődik, és közvetlenül (direkt módon) a kamerába jut.
indirekt megvilágítás: A felületi pontról visszaverődő fény egy másik felületi pontot talál el.
A fény visszaverődését figyelembe véve egy rekurzív számításról van szó.
Meg kell határozni a fénysugár metszéspontját a felületi ponttal.
Ki kell számítani a felületi normál vektort és a visszaverődési irányt.
A visszaverődési pontokban lokális megvilágítási modellel számolhatunk.
Megjegyzés
A felületi pontról a visszaverődés jellemzően nem ideális. Eloszlással kellene számolnunk, de a sugárkövető módszer itt egyszerűsíthet.
Megjegyzés
A rekurzió mélységét megadhatjuk paraméterként.
Fény modell¶
A fénysugár felületi pontról való visszaverődésének pontos leírásához ismernünk kellene a felületet, amelyet azonban csak ideális esetben szoktunk tudni leírni. A fény visszaverődési modelljét emiatt itt is célszerű
ambiens,
diffúz
spekuláris
tagokra bontani (Phong modell).
\(\rhd\) Vizsgáljuk meg 3 különböző irányból érkező fénysugárra a visszaverődő sugarak irányát, eloszlását!
A felületi pontra adódó intenzitást a következőképpen számolhatjuk:
ahol
\(M\): a fényforrások (indexeinek) halmaza,
\(\textbf{n}\): a felületi normálvektor,
\(\textbf{l}_m\): az \(m\)-edik fényforrásba mutató vektor,
\(\textbf{v}\): a nézőpontba mutató vektor,
\(\textbf{r}_m\): az \(m\)-edik fényforrásról való visszaverődés irányának vektora,
\(k_a, k_d, k_s\): a felületi pont ambiens, diffúz és spekuláris konstansa,
\(i_a, i_{m,d}, i_{m,s}\): a fényforrások ambiens, diffúz és spekuláris intenzitása,
\(\alpha\): az anyag csillogósságát leíró konstans (shininess).
A visszeverődési szög az \(m\)-edik fényforrás esetén a következőképpen számítható:
Fénysugarak indítása¶
A képünk általában téglalap alakú. Kézenfekvő módon a sugarakat egy négyzetrács felbontás szerint indítjuk.
Metszéspontok számítása¶
A fénysugár leírásához használjuk a következő paraméteres egyenletet:
ahol
\(\textbf{s}\): a sugár kiindulópontja,
\(\textbf{d}\): a fénysugár iránya,
\(t\): szabad paraméter, \(t \in \mathbb{R}, t \geq 0\).
Háromszög metszése¶
A számítást két fő lépésben végezhetjük:
Először megvizsgáljuk, hogy a sugár hol metszi a háromszög síkját, majd
ellenőrízzük, hogy a metszéspont a háromszögön belül van-e.
Legyenek a háromszög csúcspontjai \(\textbf{a}, \textbf{b}, \textbf{c} \in \mathbb{R}^3\)! Ekkor a háromszög normálvektora:
helyvektora pedig (például) \(\textbf{a}\).
A metszéspont számításához az \(\textbf{n} \cdot (\textbf{p} - \textbf{a}) = 0\) egyenletet kell megoldani, ahol a \(\textbf{p}\) pont helyére a sugár paraméteres egyenletét írjuk.
Hogy ha \(t < 0\), akkor a háromszög a sugár mögött van, így nem metszi,
egyébként az alábbi egyenlőtlenségeket ellenőrízzük:
Megjegyzés
A számítás közben a felületi pont normálvektorát is megkaptuk.
Gömb metszése¶
Jelöljük a gömb középpontját \(\textbf{c} \in \mathbb{R}^3\) vektorral, a sugarát pedig \(R \in \mathbb{R}\) betűvel. A gömb egyenlete a következőképpen írható fel:
Ezt megoldva az alábbi egyenletet kapjuk:
Akkor lesz metszéspontunk, hogy ha \(t \geq 0\), és
két metszéspont esetén a kisebb \(t\) értékhez tartozót választjuk.
Jelöljük a metszéspontot \(\textbf{p}\)-vel! Az egység hosszúságú normálvektort a következőképpen számíthatjuk ki:
Általános felületek metszése¶
Egy \(F(x, y, z) = 0\) implicit felület esetén az
egyenlet megoldására van szükség. A felülettől függően ez általában egy nemlineáris egyenlet megoldását teszi szükségessé.
Tekintsünk egy \(\textbf{f}(u, v) \in \mathbb{R}^3\) felületet! A sugárral való metszéshez az
egyenlet megoldására van szükség, amelyből a \(t, u, v\) paramétereket kapjuk meg. Ebben az esetben is csak akkor beszélhetünk metszéspontról, hogy ha \(t \geq 0\), továbbá, hogy ha az \((u, v)\) paraméterek a megengedett tartományon vannak.
Gyorsítási lehetőségek¶
Segédstruktúrák és előszámítások használatával gyorsíthatjuk a metszéspontok meghatározását.
Háromszögek esetében élhetünk a triviális lapeldobás lehetőségével (amelyet itt az aktuális sugár irányára kell elvégeznünk).
Az objektumainkat befoglaló testekbe (bounding box) tehetjük, melyekre a metszésszámítás gyorsan elvégezhető. (Ez lehet például téglatest vagy gömb.)
Rekurzívan feloszthatjuk a teret kisebb részekre, és így hierarchikusan végezhetjük a metszés számítást (oktális fa, octal tree).
\(\rhd\) Egy program optimalizálása során milyen lépéseket érdemes követni?
Élsimítás¶
A mintavételezésből adódóan a kapott képen csipkésedést tapasztalhatunk, a kapott kép pixeles lesz (aliasing). A javításához élsimító módszereket (Anti-aliasing) használhatunk.
Néhány lehetséges megoldás például az alábbi.
Növelhetjük a sugarak indításához használt rács felbontását, majd a kapott, nagyobb felbontású képet visszaátlagolhatjuk az eredeti felbontásra.
A képpontokon belül véletlenszerűen mintavételezhetünk.
Globális illumináció¶
A korábbi, egyszerűbb modellek esetében az alábbi feltételezésekkel éltünk.
A fénysugár egy adott irányba verődik vissza.
A fényforrásaink pontszerűek.
A fénysugár a felületből kifelé verődik vissza.
A fény RGB összetevőkből áll össze (tehát nem vettük figyelembe a teljes hullámhossztartományt).
Ezek egyszerűsítették a számításainkat, viszont a természetben a fény nem így működik. A globális illuminációs modell egy, a fény fizikai természetéhez közelebbi modellt igyekszik adni.
\(\rhd\) Tegyük fel, hogy elindítunk egyetlen sugarat, és 5 rekurziós szinten, minden lépésben 8 felé szóródik a fénysugarunk! Az utolsó rekurziós szinten mennyi lesz a sugarak száma?
A fény mennyiségének eloszlását gömbi koordinátarendszerben, egy gömb felületén tekintjük.
Megjegyzés
A teljes gömb önmagában alkalmas lenne a felületen belüli fényvisszaverődés kezelésére, de egyszerűbb azt az esetet külön kezelni.
Jelöljük a gömbi koordinátarendszer két szögét \(\varphi\) (azimuth) és \(\vartheta\) (elevation) betűkkel!
Az egyes irányokhoz tartozó ponthalmazok méretét számszerűsíteni szeretnénk. Ehhez bevezethetjük a térszög (solid angle) fogalmát, amely az adott irányhoz tartozó területet adja meg az egységsugarú gömb felületén. Jelölése: \(\Omega\), mértékegysége sr (szteradián).
A globális illuminációs modellek azt vizsgálják, hogy a felületen milyen a fény eloszlása.
Mivel folytonos tér közelítéséről van szó, ezért az összefüggések alapvetően integrálos alakban adhatók meg.
Jellemzően véges számú fotonnal való szimulációról van szó, amelyhez így mintavételezni kell.
Szoftverek¶
POV-Ray¶
Persistence of Vision Raytracer
LuxCoreRender¶
Physically Based Renderer
Blender¶
Modellező szoftver, de renderelésre is alkalmas