HOME | DD
Published: 2007-11-02 21:49:56 +0000 UTC; Views: 2068; Favourites: 7; Downloads: 85
Redirect to original
Description
Rendered with a multi-spectral photon mapper I'm currently working on. There is half a million photons in this scene, about 7000 final gathers, 2000 rays each. 40 photons were used in each final gather. Direct lighting uses 128 uniformly randomized shadow rays.The total rendering time was 4 hours, most of which was spent calculating the indirect term.
There is a rectangular light source at the ceiling as in this reference picture: [link]
All photons have uniform power. Russian roulette is used everywhere instead of power scaling, in order to make density estimation simple.
Photons are shot from the light source using the light's spectral emission data as the probability density function. In the end, density estimation converts the local light spectrum to CIE XYZ, changes the illuminant to D65, transforms to linear RGB and finally to sRGB for display.
Ward's irradiance caching with translational gradients is used to speed up the computation, about 30 times with the particular settings used to generate this image. A kD-Tree with Havran's TA-B-rec traversal algorithm (a modified version of Jacco Bikker's implementation) and Wald's tri-ray intersection algorithm is used at the core.
The photon mapper is written in the D programming language and uses the Tango library.
There are some errors near edges, due to the lack of secondary final gathering. Anti-aliasing and stratified shadow ray sampling is TODO as well.
Related content
Comments: 22
hck112 [2011-02-13 04:45:16 +0000 UTC]
Man, wish one day I could render something like this. The quality is so clear.
π: 0 β©: 1
codeinsane In reply to hck112 [2011-03-05 18:51:47 +0000 UTC]
Thanks! This version is really old though. Here's a (still old) nicer one: [link]
π: 0 β©: 0
DutchAngelus [2008-11-03 13:49:37 +0000 UTC]
pretty render =3
I'm sticking to old-fashioned ray-tracing for now, photon-mapping takes too long to get a noise-free picture. Jacco really does have a habit of showing up everywhere when there's ray-tracing going on... although that's makes it plenty fun to have him as a teacher
π: 0 β©: 2
lyc In reply to DutchAngelus [2009-04-04 00:00:29 +0000 UTC]
too bad he's not really so familiar with the material himself...
π: 0 β©: 1
lyc In reply to DutchAngelus [2009-04-05 09:04:25 +0000 UTC]
well, physically-based rendering is a reasonably mathematical field, and he's not so mathematical.
π: 0 β©: 1
DutchAngelus In reply to lyc [2009-04-05 18:54:07 +0000 UTC]
ah so. No, that's very true. In fact, he's been working with a faulty matrix class for a couple of years now... we found the errors while creating our last arauna-game.
π: 0 β©: 1
lyc In reply to DutchAngelus [2009-04-06 04:04:10 +0000 UTC]
yeah i heard some scary stories (not too long ago) from some people he met, actually relating to matrices (not knowing how to make an orthonormal basis, yet teaching others).
he's probably a far-above-average teacher because he has real enthusiasm and interest in his work (that's far more important for students than any technical matter), but i just had to comment on that particular issue...
π: 0 β©: 1
DutchAngelus In reply to lyc [2009-04-06 10:25:05 +0000 UTC]
yeah, we know... we lost a few days in our 14-day project because we had to fix his faulty matrices. So, if he's using our matrices now, arauna actually has proper matrices now.
His enthusiasm is really great. And he doesn't teach us maths - we got maths from a different teacher - and just the techniques for ray-tracing / software-rasterizing and expects you to do the maths yourself.
π: 0 β©: 1
lyc In reply to DutchAngelus [2009-04-06 12:08:56 +0000 UTC]
that's anyway the proper way to learn, as you no doubt know
π: 0 β©: 1
DutchAngelus In reply to lyc [2009-04-06 13:10:08 +0000 UTC]
yes, I know. It's good to let people find things out on their own. I taught myself the basics of SIMD by porting my matrix4x4 class.
π: 0 β©: 0
codeinsane In reply to DutchAngelus [2008-11-03 16:29:52 +0000 UTC]
Thanks
Well, it's not that slow any more, I've done some optimizations, including the irradiance photon caching by Christensen. This: [link] image takes about 3 minutes to render on 4 cores @ 1.6GHz. Actually the slowest part at the moment is the direct component, since I don't have any adaptive light sampling.
Also, I'm totally envious of you being at IGAD I've just played your game and it's pretty cool, haven't managed to get my way out of the roman room, but I got to the final one by exploiting a bug in your collision detection/response
Keep up the good work!
π: 0 β©: 1
DutchAngelus In reply to codeinsane [2008-11-03 17:32:02 +0000 UTC]
well, I haven't done any optimizations yet since I haven't really been bothered with speed, so mine take quite some time to render ( "this one took 2 hours on core2duo @ 2.0GHz... ) All I did was make a JobManager and split up my screen in 256 rectangles. The size of the squares changes with the resolution.
You can get out of the roman room through the inside of the roof of the big building. A pillar can be found in a sideroom which is located next to the building (look for a hole in the wall). We're currently more than busy on a new Arauna game. Hard work, but mighty fun
π: 0 β©: 1
codeinsane In reply to DutchAngelus [2008-11-03 18:10:18 +0000 UTC]
Doh! And I kept on flying around the building and could not find any door
As for the parallelization, I haven't even done the rectangle-based splitting :} That's why there are these ugly horizontal lines - the irradiance cache doesn't like my lame line-based splitting :S Will get around to it... as soon as I'm done with my renderer, netcode, lightmap generation, ...
π: 0 β©: 1
DutchAngelus In reply to codeinsane [2008-11-03 21:50:32 +0000 UTC]
meh, the cache shouldn't be whining like that...
I'll need to hand in my tracer the day after tomorrow ( queue movie music here ) and I think I'm gonna do some optimizing after that.
I could supply the source of my easy-to-use JobManager if feel need for it, just yell for it.
π: 0 β©: 1
codeinsane In reply to DutchAngelus [2008-11-04 02:35:08 +0000 UTC]
Good luck with the tracer As for the JobManager, thanks but unless it's very fancy, I guess I'll be writing my own in D. Already got something simple, but enough template raping should yield me a nice API over some complex internals ;D
π: 0 β©: 1
DutchAngelus In reply to codeinsane [2008-11-04 12:10:53 +0000 UTC]
thanks
it's not fancy at all, just simple, fast and efficient
π: 0 β©: 0
codeinsane [2007-11-10 17:23:28 +0000 UTC]
Some of you might've noticed that the image a serious bug in its direct lighting component... The rays from the light are not cosine weighted. Took me a while to figure this out
A corrected image sits e.g. at my site: [link]
π: 0 β©: 0
voras [2007-11-03 16:28:19 +0000 UTC]
pff, kaΕΌdy tak potrafi... popisz siΔ czymΕ trudniejszym moΕΌe nie tyle do wykonania co do wytΕumaczenia. a tak lakonicznego opisu to juΕΌ dawno nie widziaΕem, chyba nawet "..." oddaje wiΔcej.
π: 0 β©: 1
codeinsane In reply to voras [2007-11-03 19:10:00 +0000 UTC]
damn, sorki... nastepnym razem postaram sie dac bibliografie i pseudokody algorytmow
π: 0 β©: 0
















