Jump to content

  • Log In with Google      Sign In   
  • Create Account

We're offering banner ads on our site from just $5!

1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


Small volumetric path tracer


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
5 replies to this topic

#1 D-POWER   Members   -  Reputation: 150

Like
2Likes
Like

Posted 28 December 2012 - 09:41 AM

Hello people,

 

So I've been working for the last couple of days on a little volumetric path tracer, that is based on Kevin Beason's great smallpt. I added homogeneous media definable as a sphere surrounding the scene, and multiple scattering which enables interesting effects like volumetric caustics and volumetric shadows. I also implemented the Henyey-Greenstein phase function to test any scattering types (forward, backward, isotropic)

 

The results so far are pretty acceptable, though to me not satisfying yet. I suspect there is a bug somewhere in my code, given the fact that I implemented my code without relying too much on available papers, so I might have done something wrong...

 

The project is already hosted on github at the following url: https://github.com/D-POWER/smallvpt

 

I'm interested to see high quality images rendered with it, any volunteers?

 

Of course, any feedback is very welcome smile.png

 

Thank you



Sponsor:

#2 Bacterius   Crossbones+   -  Reputation: 9066

Like
1Likes
Like

Posted 02 January 2013 - 06:34 AM

Ugh. Sorry, I don't like when code is written like that. I would rather readability than conciseness. That said, well done, it looks really good (and correct, as well)! Works perfectly under Linux. I am actually working on a similar concept myself, though it's far from ready.

 

However, I couldn't help but notice that it takes a crapload of samples to converge properly. Have you implemented importance sampling? There is a rather elegant way to do in volume rendering so if you use the probability distribution as demonstrated in "Rendering Participating Media with Bidirectional Path Tracing" which I assume is your reference as well, it lets you let do direct light sampling just as you would in a conventional path tracer (which'll reduce variance considerably, assuming the volume is not too dense and the light source is sufficiently close, obviously). This might help improve performance a bit, if the lights are too small.

 

I've got some spare processor cycles, just ask me if you need something rendered I'll see what I can do (I can render 512 samples of the default scene in 1m40s, with 4 threads)


Edited by Bacterius, 02 January 2013 - 06:38 AM.

The slowsort algorithm is a perfect illustration of the multiply and surrender paradigm, which is perhaps the single most important paradigm in the development of reluctant algorithms. The basic multiply and surrender strategy consists in replacing the problem at hand by two or more subproblems, each slightly simpler than the original, and continue multiplying subproblems and subsubproblems recursively in this fashion as long as possible. At some point the subproblems will all become so simple that their solution can no longer be postponed, and we will have to surrender. Experience shows that, in most cases, by the time this point is reached the total work will be substantially higher than what could have been wasted by a more direct approach.

 

- Pessimal Algorithms and Simplexity Analysis


#3 D-POWER   Members   -  Reputation: 150

Like
2Likes
Like

Posted 03 January 2013 - 10:53 AM

Hello Bacterius,

 

I totally agree with you that code readability is far more important than conciseness, however my aim here is to maintain the lowest number of LOC, in the spirit of smallpt, while retaining a minimum of clarity.

 

I didn't check the paper you cited (I'll read it as soon as I'm back home), but I'm already working on adding direct light sampling. It should speed things up a bit. However, the convergence rate is really slow now and any resistance is futile :D.

 

I'm using  importance sampling quite a lot in my implementation, first to sample the vertices along the ray that are expected to have the largest contribution to a pixel; second, since I'm using path tracing, no exponential ray growth is allowed, so I'm using the contribution of multiple scattering as a hint to decide whether it is worth it to trace the "volume" ray further or just continue with normal path tracing.

 

I'm still not completely satisfied with the results that I currently have, so there is still a lot of work to be done (especially in the convergence part) before I can call this thing done. In the meantime, here is my latest test render:

foggy_cornell_box_bs_25000spp.png



#4 Bacterius   Crossbones+   -  Reputation: 9066

Like
1Likes
Like

Posted 04 January 2013 - 06:31 PM

Here, I tweaked some settings and tried to render a scene. It didn't come out quite right (way too much fog) but there's 200000 samples in 512x512, took about 14 hours.

 

1rxeo9.png


The slowsort algorithm is a perfect illustration of the multiply and surrender paradigm, which is perhaps the single most important paradigm in the development of reluctant algorithms. The basic multiply and surrender strategy consists in replacing the problem at hand by two or more subproblems, each slightly simpler than the original, and continue multiplying subproblems and subsubproblems recursively in this fashion as long as possible. At some point the subproblems will all become so simple that their solution can no longer be postponed, and we will have to surrender. Experience shows that, in most cases, by the time this point is reached the total work will be substantially higher than what could have been wasted by a more direct approach.

 

- Pessimal Algorithms and Simplexity Analysis


#5 Krypt0n   Crossbones+   -  Reputation: 2606

Like
0Likes
Like

Posted 04 January 2013 - 06:36 PM

what's the rendering time for that image? it looks amazin, I love the scattering around the light source. I think it would be probably simple to add chromatic abbreviation, kinda like a prism effect, that way it could maybe look like a rainy place :)

 

really cool work, keep us/me updated :)



#6 D-POWER   Members   -  Reputation: 150

Like
0Likes
Like

Posted 05 January 2013 - 04:47 PM

Okey, this is getting interesting. Bacterius, I'm currently working on a new version of smallvpt, with more correct scattering code. I have read "Rendering Participating Media with Bidirectional Path Tracing", and found so many good ideas that I could use to improve my code. The version currently on github doesn't work properly when the medium is too small, a fix should be commited soon, but I already like the render you posted, even though it looks a bit "weird", 200000spp is quite blink.png .

 

Cheers






Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS