Jump to content
  • Advertisement
Sign in to follow this  

From Radiosity to Normal Mapping Radiosity

This topic is 2809 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

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 * 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 = Fij * (emitterDir * collector.BasisNormal) * 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


[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???



Share this post

Link to post
Share on other sites
Sign in to follow this  

  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!