Mirror Form Factors

Started by
8 comments, last by Poons 15 years, 6 months ago
I'm trying to include mirror reflection into my radiosity solver, but I'm not quite sure how I should calculate the energy leaving a patch i which arrives after reflection at patch m (the mirror surface) at the patch j. My intuition would be L_j = F_mj * L_m L_m = F_im * L_i * phi_m_s where L_i is the energy leaving i and phi_m_s is the specular reflection coifficient of patch m. F_mj is the form factor between m and j and similar F_im the form factor between i and m. L_j would be the energy arriving at j. However, I'm not quite sure if this is correct. Looking at the hemicube method for mirror form factors it seems that the mirror surface is not considered. Only the mirrored patch i is projected onto the hemicube. Does anyone know how the calculation works and can clearify the issue for me? Thanks in advance!
you humans are such dreamers. you dream that you´re clever. You dream that you´re important. You dream that you´re special. [the wee free men, terry pratchett]
Advertisement
I`m curious as to why do you need to reflect the light from the mirrors. Are there many mirrors in your scenes ?

I would personally do the same thing - i.e. assign a rho coefficient of 0.95 (or 1.00) to the mirror surface and act is as a pure shooter - i.e. it wouldn`t gather the energy (I assume you`d handle reflections in some other way - i.e. cubemap or raytrace).

Still, an experiment would help here. Try to use a flashlight in a dark room with a mirror and grab a photo before and after you use the mirror. I really have no idea what should happen in real life.

It`s an interesting idea. I might dust off my radiosity solver and see how it behaves.
Quote:Original post by joe1024
I`m curious as to why do you need to reflect the light from the mirrors. Are there many mirrors in your scenes ?


No, I don't have many mirrors. It's just out of curiosity.

Quote:Original post by joe1024
I would personally do the same thing - i.e. assign a rho coefficient of 0.95 (or 1.00) to the mirror surface and act is as a pure shooter - i.e. it wouldn`t gather the energy (I assume you`d handle reflections in some other way - i.e. cubemap or raytrace).


Thanks for your input. I think I will implement it this way and see how it works. And yes, I have already done the flashlight experiment: the mirror reflects the light to the nearby wall. So you can see a rectangular lit area.
you humans are such dreamers. you dream that you´re clever. You dream that you´re important. You dream that you´re special. [the wee free men, terry pratchett]
It's not possible to calculate a mirror using standard radiosity. Not without some major modifications to the algorithm. Radiosity is designed for entirely diffuse surface interreflection. A mirror is entirely specular and thus your radiosity solution will be completely wrong (from a physical point of view).

Other algorithms, such as path tracing or photon mapping can be adapted to specular light much more easily (but still with considerable limitations).
Yann, how would go for mixing of Specular light and Radiosity output these days ? Do you know of some higher-quality specular methods other than the default ones ? BTW, what do you use for specular for hi-quality output of the architectural visualisations ?

VladR My 3rd person action RPG on GreenLight: http://steamcommunity.com/sharedfiles/filedetails/?id=92951596

I assume you're using a progressive-refinement approach, where you render the scene from each patch onto a hemicube? Then, how about instead of rendering blank "mirror" patches, just render at that location the patches that are visible in the mirror (perhaps times a reflectivity factor).

Since the radiosity algorithm is, implicitly, really just either a Gauss-Seidel or Jacobi solver (without making the matrix of form factors explicit), this will definitely converge if the implicit "matrix" you get from this is diagonally dominant. I'm pretty sure that this "just render the patches visible through the mirror" approach achieves this, so you should be good to go.

Basically, since the radiosity algorithm doesn't depend on how the space is connected, what I'm saying is that you should be able to treat your mirrors as magic "portals" that you can see through into other portions of your scene; i.e., mirrors change connectivity of your space.

Of course, I don't read the literature any more, so take this with a grain of salt. :-) But I really think it's that simple!

[Edited by - Emergent on September 19, 2008 12:11:03 PM]
Thanks everyone for your input. I will go with the "just render the patches visible through the mirror" approach for now.

@Yann: I know that the original radiosity method is only for diffuse surfaces, but I found some papers about including ideal specular reflections into the solver. So I thought it would be cool to include them in my own. I have already done some modifications in this sense. So if I get the form factors right, I guess the solution should be ok!

I will post some results when I have a working solution!


[Edited by - Poons on September 29, 2008 10:57:05 AM]
you humans are such dreamers. you dream that you´re clever. You dream that you´re important. You dream that you´re special. [the wee free men, terry pratchett]
Ok, for those who are interested I have a first screenshot now. Please ignore the artifacts behind the mirror.
you humans are such dreamers. you dream that you´re clever. You dream that you´re important. You dream that you´re special. [the wee free men, terry pratchett]
Quote:Original post by Poons
Ok, for those who are interested I have a first screenshot now. Please ignore the artifacts behind the mirror.


Cool. What's the cause of the artifacts? It looks almost like the mirror is casting shadows on the wall... Is the mirror flush with the wall, or some distance from it?
It should be the shadow cast by the mirror onto the wall, which is ok. But it's not rectangular as it should be. It must be some minor mistake in the depth comparison which I use to check if a certain point is visible or not. It already worked, so it can't be anything serious.
you humans are such dreamers. you dream that you´re clever. You dream that you´re important. You dream that you´re special. [the wee free men, terry pratchett]

This topic is closed to new replies.

Advertisement