Jump to content
  • Advertisement
Sign in to follow this  
ldeej

PRT questions

This topic is 4024 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

So I have read some PRT papers, and I think I understand the basic concept, yet it is unclear to me how to implement it (for educational purposes, I know that the DX SDK gives me everything I need to use/implement PRT) This is what I understand so far: - With PRT you decouple the transport from the light complexity, we use basis functions to approximate each, and at runtime we compute the final radiance by integrating the transport with the light representation - Usually both the transport (transfer) function and the light data are encoded on some bases function, the most common being SH, other bases are available: wavelets, zonal harmonics, etc - The core of PRT then is to perform some simulation to compute the transfer vector/matrix for each vertex or pixel - The complexity of what we encode in the transfer function can vary: simple visibility, interreflections, just the cosine weight, albedo, etc - Glossy surfaces use a matrix instead of a vector for transfer - PRT assumes that the environment is static, but lighting can change Some things I do not understand or need clarification on: - I read that for encoding interreflections you need more coefficients, I understand how the simulator changes here and how albedo needs to be encoded in the transfer, but I do not understand why would you need more coefficients? - Why do you need compression when using PRT, what causes the coefficients to grow so much? - What would be the point of doing PRT for glossy objects in games? Can you just use diffuse PRT and handle the glossy aspect independently with traditional methods? Implementation-wise I can write a ray tracer and use monte carlo methods to compute the SH coefficients on the vertices/pixels, I do not understand what dictates the number of coefficients that you need and how to go about that. Any inaccuracies on how I am understanding this technique, any answers to my questions above? Thanks in advance

Share this post


Link to post
Share on other sites
Advertisement
Hello,

Quote:
Original post by ldeej
Some things I do not understand or need clarification on:
- I read that for encoding interreflections you need more coefficients, I understand how the simulator changes here and how albedo needs to be encoded in the transfer, but I do not understand why would you need more coefficients?

You dont need more coefficients at runtime. You need some more memory for coefficients in the preprocessing stage.

Quote:
- Why do you need compression when using PRT, what causes the coefficients to grow so much?

With three bands of SH coefficients you need 27 values (3 bands gives 9 coefficients, each coefficient is a RGB value so 3*3*3). A usual vertex in CG consists of may 10 or 15 values. Adding another 27 values is a lot of memory and sometimes this memory is not available or fetching the values is costly.

Quote:
Implementation-wise I can write a ray tracer and use monte carlo methods to compute the SH coefficients on the vertices/pixels, I do not understand what dictates the number of coefficients that you need and how to go about that.

The more coefficients you use, the better the result is. Usually 9 coefficients is sufficient, but you might want to use more, depending on the preprocessing.

I have a more praxis orientated paper, which you might find helpful. Source code for all implementations is available.

Share this post


Link to post
Share on other sites
Thanks a lot Enrico,

The paper looks interesting, is there a single download for the whole thing? That would be very useful...

Why does the memory footprint increase if you want to take interreflections into account?

Thanks

Share this post


Link to post
Share on other sites
Quote:
Original post by ldeej
Thanks a lot Enrico,

The paper looks interesting, is there a single download for the whole thing? That would be very useful...

I can prepare a single download for you. Just send me a PM ;)


Quote:
Why does the memory footprint increase if you want to take interreflections into account?

Interreflection is computed with several bounces of light. You need to save the previous bounces for the recent bounce.

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.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!