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?
9.1. 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.
9.2. 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ó:
9.3. 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.

9.4. 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\).
9.4.1. 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.
9.4.2. 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:
9.4.3. Á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.
9.4.4. 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?
9.5. É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.
9.6. 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.
9.7. Szoftverek¶
9.7.1. POV-Ray¶
Persistence of Vision Raytracer
9.7.2. LuxCoreRender¶
Physically Based Renderer
9.7.3. Blender¶
Modellező szoftver, de renderelésre is alkalmas