„Számítógépes grafika házi feladat tutorial” változatai közötti eltérés

Rohamcsiga (vitalap | szerkesztései)
Rohamcsiga (vitalap | szerkesztései)
1 110. sor: 1 110. sor:
* Pl ha padló anyagát lecserélem egy tükörre, akkor az eredmény így néz ki:
* 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
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?
* Ez valóban egy tükörnek néz ki, de egy apró probléma még akad vele... 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 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.
** 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 szemben lévő tükör] hatása:
* [http://pastebin.com/28U44wt6 Két szemben lévő tükör] hatása: