Form Factors, View Factors, Configuration factors

I was curious if anyone has tryed calculating the form factor or view factor (same thing) of a surface to another surface using opengl implementations? The idea for those who don’t know what a form factor is, is to express how much one surface “sees” another surface in your system taking into account surfaces that are blocking their view of each other. I actually want to calculate this blocking between two surfaces. I anyone has seen any of this done please let me know.


Excuse my English !

It’s a good question. I work on global illumination and I tried some things about this.
I just want to calculate point-surface form-factor using OpenGL with this technique :

Set a Specific colour for the surface of interest
Set an other colour for the other surfaces
Draw an Image of the scene, the point of view is defined by the position of the receiver.
Get the frame buffer
Calculate the FF using elementary FF associated to each pixel, each time the pixel of the image as the specified colour.

You can also calculate the illuminance :
Set a unique colour for each radiosity patch
Draw several views with the camera located in a receiver sample point (to get a hemicube)
The elementary point-surface form-factor can be pre-calculated for each pixel
L(pixel) is given by the colour of the visible patch (=pointer to a radiosity mesh)
The illuminance can be computed with a simple summation : E=Sum (FF(pixel)xL(pixel))

The problem is :
You have to get the Frame buffer and make some ( a lot of) calculations with the processor.
PC’s cards are very slow because of the PCI or AGP port so you can just get 10 images (512x512) per second.
A SGI NT 320 or 540 is better because you get 75 images per second.

Thanks for the reply,
I had been thinking of doing a modified hemi-cube algorithm like you stated so you can calculate the formfactor. Like you said the computation is quite demanding. Say you have 100 surfaces: you need to render the seen 100(surfaces)*5(sides of the hemi-cube)NM(N by M points on surface for hemi-cube approximation). Thats a lot of computation. Have you actually put this into code?


The computation of the illuminance of a receiver (radiosity patch) just needs 5 “pictures” openGL. It gives the Form factor between this patch and the other patches (a unique colour per patch).
Of course, you have to do this for all the patches!
I don’t put this into code because it is too slow: I need to get the frame-buffer and make a lot of computations with the processor (some additions and multiplication per pixel).

I think a adaptive solution with raytracing is better!
I hope that some extended functions on board can help us (a day).