|
|
| 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: |