„Számítógépes grafika házi feladat tutorial” változatai közötti eltérés
Hozzáadtam a tökéletes tükör részt |
|||
| 1 093. sor: | 1 093. sor: | ||
* A [http://pastebin.com/0iLMiBJL spekuláris megcsillanások] nagyon sokat tudnak dobni egy kép hihetőségén: | * A [http://pastebin.com/0iLMiBJL spekuláris megcsillanások] nagyon sokat tudnak dobni egy kép hihetőségén: | ||
http://i.imgur.com/me1hGMY.png | http://i.imgur.com/me1hGMY.png | ||
=== A tökéletes tükör === | |||
* A mikroszkopikus tükrök figyelembevételével a fényforrások fénye tükröződni tud. De mi van a valódi tükrökkel? Amikben más objektumok képeit is látjuk, nem csak a fényforrások hatását? | |||
* Sugárkövetéssel ilyen tükröket renderelni meglepően egyszerű. Az egyetlen dolog amit a tükör tulajdonságú anyag csinál a modellünkbe az az, hogy a tükröződés irányába továbblövi a sugarat. | |||
* Implementálni ezt nagyon egyszerű, pl.: | |||
<br/> <syntaxhighlight lang="c"> | |||
Color getColor(Intersection inter, const Light* lgts, size_t lgt_num) { | |||
Ray reflected_ray; | |||
reflected_ray.direction = reflect(inter.ray.direction, inter.normal); | |||
reflected_ray.origin = inter.pos + 1e-3*reflected_ray.direction; | |||
return scene.shootRay(reflected_ray); | |||
} | |||
</syntaxhighlight> <br/> | |||
* Az egyetlen kényelmetlenséget az okozhatja, hogy ha az eddig használt adatstruktúránk nem tárolta, hogy milyen irányból érkezett a sugár, mert az nyilván kell ahhoz, hogy tudjuk, hogy melyik irányba verődik vissza. | |||
* Pl ha padló anyagát lecserélem egy tükörre, akkor az eredmény így néz ki: | |||
http://i.imgur.com/jDLtIv8.png | |||
* Ez valóban egy tükör, de elég valószerűtlennek tűnik. Tényleg így nézne ki egy tökéletes tükör? | |||
* A probléma az, hogy a tükrön semmi nyoma nem látszódik annak, hogy bármiféle fényforrás is lenne a közelbe, a kockán viszont igen. | |||
* Egy korábbi képen a diffúz padlóról spekuláris hatás következtében a padló megcsillant, a fényforrást a mikrotükrökön keresztül láttuk. De egy tényleges tükrön keresztül már nem? Hogy is van ez? | |||
* A probléma az, hogy egy pontszerű - nem létező - fényforrás hatását nézzük egy tökéletesen sima - szintén nem létező - anyagon egy nem túl valóságos modellel. | |||
** A pontszerű fényforrást, ahogy a lebegőben lebeg, eddig se láttuk, mert túl kicsi a terjedése. Csak azt látjuk, ahogy hatással van más anyagokra. Ha tökéletes tükrön keresztül nézzük a fényforrást, akkor pont ugyanazt látjuk, mint ha direktbe ránéznénk: semmit. | |||
** Ennek a problémának a megoldása nem tartozik a tárgy anyagába, de nagyon érdekes, ezért én mondanék róla pár szót. | |||
** Annak ellenére, hogy a fényforrás túl pici, hogy egy egész pixel színét meg tudja változtatni, a szemünkben lejátszódó folyamatok miatt mégis látnunk kéne azt. Például ha Napba nézünk akkor annak az alkotott kép sokkal nagyobb részére van hatása, mint amekkora térszög alatt ténylegesen látjuk a Napot, ugyanis az "elvakít minket", a keletkező képen a Nap közelében lévő rész is sokkal világosabb lesz. | |||
*** Ezt viszont nehéz korrekten implementálni. Ha direktbe nézünk a fényforrásra, akkor még viszonylag könnyű dolgunk van, egyszerűen ki tudjuk számolni, hogy az ernyő mely részén látszódna a pont fényforrás, és a környezetének a fényességét is megnöveljük egy kicsit. Viszont amikor egy tükrön keresztül nézzük a fényforrást, ott már nagyon trükköznünk kell. Ha meg a fényforrás fénye három tükröző és két törő anyagon keresztül jut el a szemünkbe, akkor semmi esélyünk sincs ezt a hatást implementálni. | |||
*** A fényforrás direkt láthatóságára egy megoldás lehet még, hogy egy apró, nagyon világos gömböt rajzolunk köré. Ez tükrön keresztül is látszódik, de muszáj implementálni azt, hogy a környezete is világosabb lesz a képnek, mert enélkül hülyén fog kinézni. És arra is érdemes gondolni, hogy ez alapjaiba borítja fel az árnyékszámító algoritmusunk működését. | |||
*** Esetleg megoldás lehet, hogy nem teljesen tökéletes tükröt feltételezünk. Persze ha a feladat kiköti, hogy tökéletesen tükröző anyagokkal dolgozz, akkor ez nem opció. Ilyenkor ugyanis fellép a spekuláris hatás, ami orvosolja a problémánkat. Viszont ilyenkor direktbe nem lesz látható a fény, ami zavaró tud lenni. A direkt láthatóságot viszont csak valamilyen más módszerrel tudjuk elérni, de ilyenkor gondot szokott okozni, hogy a két módszer konzisztens legyen, vagyis hogy direktbe és tükörből nézve is ugyan akkora és ugyan olyan fényes fényforrást lássunk. | |||
* Egy apró probléma még akad ezzel... Mi van, ha két tükröt rakunk egymással szembe? A sugár a végtelenségig fog pattogni a kettő között? Nem egészen. Ugyanis ez egy rekurzív algoritmus, ahol a függvényhívásoknak a stackbe is lesz nyoma, ahol viszont a hely előbb utóbb elfogy, és ilyenkor a programunk megáll. | |||
** A sugárkövető függvényünkbe követnünk kell, hogy ez hanyadik függvényhívás volt, és ha ez a szám, meghalad valamilyen értéket, pl. 8-at, akkor a sugarat már ne lőjük tovább. | |||
* [http://pastebin.com/28U44wt6 Két szembelévő tükör] hatása: | |||
http://i.imgur.com/5EcYwj6.png | |||
----- | ----- | ||
[https://wiki.sch.bme.hu/Szerkeszt%C5%91:Rohamcsiga RohamCsiga] - 2014.01. | [https://wiki.sch.bme.hu/Szerkeszt%C5%91:Rohamcsiga RohamCsiga] - 2014.01. | ||