Sign in to follow this  
Punika

From Radiosity to Normal Mapping Radiosity

Recommended Posts

Hey Everyone

Excuse me if I nerve. But I have not found any thread that discusses this. I have a halfway working Radiosity Solver. I think I understand the Valve Papers. My problem is not the rendering part but how I can integrate Normal Mapping into my Radiosity Solver. I am doing all Radiosity through Ray tracing.

My form factor looks like this:

Fij = cosTheta_i * cosTheta_j / (pi * distanceSquared) * Hij * dAj

Now when I am doing Normal Mapping Radiosity than Radiosity, what should I do??

- cosTheta_i and cosTheta_j calculation using the Basis Vectors for our Collector?
(e.g. not cosTheta_j = collector.Normal * emitterDir -> cosTheta_j = collector.BasisNormal[i] * emitterDir
- what about cosTheta_i -> using emitter normal or emitter basis normals?
- Do I have to transport the Basis Vectors into Tangent Space?? with a TBN matrix? my radiosity solver is working in world space
- emitterDir and collector Dir in Tangent Space?

- Another method? using Fij
- and taking the basis Vectors into account
- e.g. emittterDir in Tangent Space dot Basis Vector in Tangent space multiplied Fij is the incoming energy?
- collector.incident[i] = Fij * (emitterDir * collector.BasisNormal[i]) * emitter.excident ????
- emitterDir in tangent space?


As you can see, I have a big understanding problem :)

Sorry for my bad english... :)

Thanks for the answers

punika

[Edited by - Punika on October 16, 2010 6:32:36 AM]

Share this post


Link to post
Share on other sites
It's actually quite simple. Any method using multiple basis vectors (Valves' method is only one of several) essentially integrates the incoming light over more than a single direction. Basically, your receiving differential area patch gets more than just one irradiance hemisphere. Conceptually, think of a mini-cubemap storing irradiance from more than just one hemisphere.

So you just do n calculations per patch, where n is the number of basis vectors. For each vector, adjust the cosTheta of the receiving patch accordingly. Everything else stays the same (emitter, Hij, d, etc). The result will be n different solutions to the irradiance integral, one per basis vector.

Depending on how you sample your rays (gathering vs. shooting, stochastic vs. regular), you may have to check your cosine distribution, which must be aligned to the respective basis vector (especially with Monte Carlo sampling).

Share this post


Link to post
Share on other sites
Thanks for your answer

I have two questions though.

When using the Basis Vectors for calulating cosTheta -> I do not have to use the raw Basis Vectors or? I think I have to alter them. But I don't know how? The raw Basis Vectors seems to right for a 0,0,1 Vector but what should I do when I have a 1,0,0 Normal or -1,0,0 Normal????

I think I can ignore the last past with the cosine distrubtion, because I am shooting from one patch to another or???

Thanks

punika

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this