Photon Mapping : multiple Lights / one global map

Started by
0 comments, last by Mathias_L 18 years, 4 months ago
Hi, I'm trying to add some photon-mapping to my simple Ray-Tracer that I have to develop for school. I took the photon-map data-structure of Henrik Wann Jensens "Ralistic Image Synthesis Using Photon Mapping" book, although I don't understand every part of that example code, but I'm working on that. Of course, I also considered the errata-list on his homepage as well as the topics in this forum that focus on special parts of his example code. My first experiences with only one light sources seemed to work quite well, but now, using two light sources, I'm not sure if the resulting fault in the picture is because of an error in my sourcecode or because I don't use the photon-map in the right way. Thats what I'm trying to do: I've defined a simple scene (like cornell-box) with two light sources. I'm using only one photon-map for the whole global illumination. (Later I'll include a separated caustic and shadow-map, but at the moment I'm testing the photon-tracing and -storing with only one map.) In this photon-map, I'm storing the photons every time they hit a diffuse surface (by russian roulette) and scale the photon power by the diffuse object-color of the object they hit, until a photons power is under a threshold-value. So sending out 10.000 photons results in ca. 30.000 stored photons in the map. The failure in the picture: That all worked fine until I used more than one light-sources. Using two light sources results in a picture, displaying only one light-source. The surprising thing: When I set the threshold value up to a value, that a photon is ONLY stored when it hits a diffuse the FIRST time (->no indirect illumination), all lights are displayed! And if I'm storing only the photons that bounced MORE than once (store only indirect illumination), the picture also displayes the indirect illumination of all light-sources. So the failure only occures, if I store EVERY hit of a photon, and it doesn't occure, if I store only the first hits or all hits excluding the first. The question: Is the discribed problem a normal result? I've read in a topic of this forum, that it's normal to seperate the indirect illumination from the direct, and what I'm trying to do, is doing both in one... is that my fault? If yes, I don't understand the photon-locating-algorithm in the kd-tree, because it should find the photons of my second light-source anyway, does't it? I'd be glad, if someone understands the problem and has an idea where it's comeing from. Thanks a lot for reading!
Advertisement
Hi,
I just found the bug... Something really stupid... I assumed that max_phot in the constructor of the Photon_map class would be the same number of emitted photon, what results in loosing information of one light source, if more than max_phot would be saved. That's why the error ocured only when I used indirect Lighting.
Thanks anyway for reading, I really thought it would be something more complicated.

This topic is closed to new replies.

Advertisement