Introduction In this document, I will attempt to explain the details of form factor calculation. I’ll start with a physical world example; something you should easily be able to wrap your imagination around. I’ll discuss the important relationships between the working pieces and how they fit into the real world. Following that, I’ll discuss how the calculations actually work, step by step, and what everything means. And finally, I’ll tie these pieces together with the actual radiosity equation (in proper notation) so you’ll have a better chance at understanding the other radiosity references out there.

 A Physical World Example We’ll start with just two surfaces. Surface ‘I’ is emitting light and surface ‘J’ is not. These surfaces are quite large, say 8-square feet each and they’re only an inch apart, facing one another. Also, since we’re dealing with radiosity here, everything is typically considered a "perfect diffuse reflector". This means we can assume that surface ‘I’ is emitting an equal amount of light from all points on its surface (this is very important.)

 Energy Transmission Our task is to figure out how the light being emitted from surface ‘I’ will affect (be received by) surface ‘J’. Rather than speaking in terms of surfaces, let’s start by considering two points, one on each surface: Fig 1: Two points on two surfaces, each point defined by the intersection of similarly colored lines I have purposely chosen two points that are far apart. Given two surfaces of eight square feet each and only an inch between the surfaces, the relative angle between them should be quite extreme. That is, if you were to connect the two points with a piece of string, and look at the angle between the line of string and each surface’s normal, the angle should be quite large.The angle between these two points (ignoring all other points on the surfaces for now) is important because majority of the energy emitted by any point on a surface is emitted in the direction of the surface’s normal. In the case of our two example points, only a fraction of the emitted energy should reach the destination point. In short, the greater the angle, the less energy transmitted.This is also true for receiving energy. The greater the angle of the incoming energy, the less received. So we must take both angles into account when we calculate our form factor.If you only consider these two points, very little energy will be transmitted and received. The receiving point, however will still be brightly illuminated since it will receive most of its energy from the point on the transmitting surface directly across from it.Extending energy interaction between the two example points to the two example surfaces, it becomes quite clear that we’ll need to iterate through two infinite loops. The first loop for each point on the receiving surface, and the second (inner) loop for each point on the transmitting surface, a task that would challenge any computer.

 Making it Possible Fortunately, it is not necessary to iterate through the infinite set of points on the surfaces. We could subdivide each surface into a finite set of smaller surfaces (patches.) These patches would act as "sub-areas" of the entire surface, giving us the ability to calculate the interaction between large groups of points as a whole, rather than individually.This would produce some very accurate results, provided our subdivisions were able to accommodate one criterion: the area of two interacting patches must be relatively small, when compared to the distance between them. Fig 2: A random sampling of point interactions between two sets of surfacesIn the example above, the gray lines represent a small set of interactions between two points. In Figure 2, example B, it is clear that the lines are very chaotic. However, looking at Figure 2, example A, the lines are much more uniform because the relative difference in angle from line to line is reasonably small. This uniformity comes from the fact that the patches are relatively small when compared to the distance between them.By meeting this criterion we can guarantee that all points on the receiving patch will have nearly the same relative angle to all points on the transmitting patch. Given this, we can treat each patch as an area of the surface and calculate the interaction between two patches only once. Keeping the relative angle between patches low allows us to minimize error.Other than our minimal error (which we’re willing to accept in trade for the lack of two nested infinite loops) the only difference is area. Rather than a single point transmitting its energy directly to a single point on another patch, we’re transmitting the energy over an AREA. And an AREA is receiving this energy. This is where the differential areas come in...

 Differential Areas Differential areas are calculated by simply dividing the transmitting patch’s area by the receiving patch’s area. Doing this will result in a value that can be used to scale the amount of energy leaving the transmission patch and arriving at the receiving patch.Of course, that energy needs to come from somewhere. The initial source of the energy for a transmitting patch is, of course, its surface. To decide how much energy a patch is to receive from its surface, you simply divide the patch’s area by the surface’s area. This fraction can be used to scale the surface’s energy down to size for a patch.

 Doing The Work The Radiosity Equation At this point, you should have a pretty solid understanding of how to calculate how much energy to transmit from patch to patch in a scene. I’m going to attempt to solidify this knowledge by linking it to the kind of stuff you’ll see in other references and books.The standard equation looks like this: Fig 3: The standard form factor equation according to Cohen & Greenberg (subscript i refers to the transmission patch and subscript j refers to the receiving patch)Since we’ve avoided the nested infinite loops, we can simplify this quite a lot: Fig 4: Simplified form factor equation for differential area patchesIf you’re a math wizard, you can probably just skip to the next section now.If you refer back to the previous section, you should be able to follow this Greek stuff. They refer to the resulting form factor (for transmission patch ‘i' and receiving patch ‘j’) as Fi-j.The cosines perform the differential angle calculation. We’re using dot products since the dot product results in the cosine of the angle between two vectors, which is exactly what is needed.To account for distance, we have the division by pi r2 (‘r’ being the distance.) Following that, we apply the relative visibility between the two patches (Hij). And we top it all off with a heavy helping of differential area (dAj).

 Dealing with the Numbers Closing 