[Bf-committers] Shading System Proposals

Yves Poissant ypoissant2 at videotron.ca
Tue Jan 5 04:57:40 CET 2010

Hi Brecht,

>> Also, layering BSDFs and doing that in a physically plausible way by
>> manually linking nodes setups can become a nightmare. It would be nice to
>> have a Layering node that would take care of a lot of that sort of
>> bookkeeping. like keeping the energy balanced between the individual 
>> layers
>> even when taking the Fresnel or the Kubelka-Munk factors into account. 
>> This
>> could be turned OFF of course. Again, this sort of automatic handling of
>> things would not be a panacea.and could be overriden or done manually. 
>> But
>> having that as an example could show how to approach BSDF building in a 
>> more
>> plausible way.
> The idea would be to have presets that control some node setup, so
> we'll have to figure out good presets and nodes needed to build them.
> I don't have a overall picture of which ones would be needed yet.

I will try to sketch some node setups to illustrate how I see that.

> What
> I'm interested in for the design is, what kind of informations needs
> to flow between nodes for such energy conservation to work for
> example? Currently my thinking is that we need:
> * eval: given in/out vectors, return color
> * sample: given in vector, return out vector + pdf

It might be useful for multiple importance sampling and more generally for 
more flexibility, to have two functions: sample(...) and pdf( wi, wo ). 
Sample may set the returned pdf value but having a separate function to get 
the pdf given a wi, wo pair is also very usefull.

Also, in my experience, letting the BSDF compute the wo must be done with 
care. It is not a good idea to let the BSDF have its own independent sample 
generator. If two different BSDF sample generators are corelated for several 
consecutive paths, this can (and generally will) produce moiré or lisajou or 
caustics artifacts. A strategy that works well is to use a 
multiple-dimensional sampler per path and you need as many (times 2) 
dimensions as there are bounces in your path. Each bounce requires 2 more 
dimensions. For example you need dimension 1 and 2 to sample the light 
surface and 3, 4 to sample the direction from the light surface. Then you 
would need dimensions 5,6 to sample the bounce direction from the BSDF on 
the hit point, etc. Sobol sampler can do that by using different prime 
numbers for every dimension. This strategy can be hard coded in the BSDF but 
it would be more flexible in allowing someone to develop different path 
sampling strategies if another sample() function could take u and v 
parameters and use those with a warp function to sample the distribution.

> * intensity estimate: given in vector (or not)?, integral over
> outgoing directions

Not sure what this is for. Is this equivalent to the rho function from pbrt? 
Or is this like a final gathering function?

> But that might not be enough for all possible setups?

I've been turning that in my head for a while and I think this can be 
considered the basic toolbox. From those functions, one can build more 
sophisticated ones.

I will reply to the rest of your message later.

I brought the pbrt book with me during the holidays hoping that I would have 
time to re-read the BxDF / BSDF and their sampling related parts but I did 
not have much time to do that. I actually got stuck on some implementation 
differences between how I do that stuff and how pbrt authors do it. I think 
pbrt is a very good reference and it has the merit of being public so I 
would like to refer to it instead of to how I do that stuff. But I will have 
to delve a little deeper into the pbrt "culture".


More information about the Bf-committers mailing list