VladR wrote:
I am slightly worried about your example with the red texture. It kinda implies that the radiosity in Quake2 is merely hacked by Id. Reflective coefficient with different RGB values?
The reflection coefficient for a surface is derived from its texture (the average colour of the entire texture). It is not derived from any other material e.g. shaders or rich descriptions elsewhere.
The single exception to this is the FLAGS field which contains bits to indicate whether the surface is emissive or not.
So the input side to the radiosity algorithm is pretty simple. The problem I described relates to the reflectivity estimation itself, because it is not derived from the surface's literal use of texels but rather by abstract reference to the whole texture.
You must keep in mind however that we're talking about 1993 and this hadn't been done before in a game - ever. The only significant changes between 1993 and 1997 involved a transition from mono->colour lightmaps. This aside it appears to be much the same.
After this period a lot of other improvements appeared for other games (not just by Id) and I'm not referring to any of that here. Only what I find in the IdTech 1/2 rad tools.
VladR wrote:
That is an abomination and not a Radiosity. It looks as if the initial energy distribution wasn't energy-based, but RGB-based. Radiosity is supposed to simulate energy transfer between all points of the surface. Lighting is just one application and RGB values should be assigned/remapped into discreet values at the last possible stage, long after all energy of the light source has been redistributed across all patches.
If you're referring to my RGB absorbed/bounced text, I was describing the visible effect of the radiosity, not the computation of it.
Given that most of the people reading this thread I think are Atari enthusiasts and/or programmers, not necessarily 3D engine programmers (and far less radiosity specialists) I'm not sure discussions about form factors, patches, hemicubes and energy transfer are going to make interesting reading. So almost all of my descriptions so far are based on what can be perceived when you look at the result.
VladR wrote:So, how exactly does Id's radiosity solver work ? Is it Progressive Refinement?
Can it achieve Color Bleeding? Then again, it's such a subtle effect that I would not be surprised if it was not visible, given the low frequency nature of the light maps.
Yes, it is performing radiosity and does achieve colour bleeding. This can be seen from the maps themselves without looking at the algorithm - but the algorithm looks like it should, based on what I have seen in the couple of hours I spent looking at it.
VladR wrote:
Radiosity, as you noticed, is a pet peeve of mine. I spent a great deal of effort in past in creating a radiosity solver and later optimizing it into real-time solution...
I did something similar in 2002 for a commercial game title, and yes - it was a lot of effort and a steep climb to satisfactory results. Especially so given the limited power of the device and the available reference at the time was not very good. I did not, for example, have access to this code I'm looking at now (both a good and a bad thing!).
I recommend you grab Id's source and have a look yourself. If you find something you don't like, let me know and I may add it to my list of stuff to fix

I already have some notes.
Also worth looking at the HalfLife (1) version, which despite being limited to mono, has significant changes from the Id version. I haven't had nearly enough time to study it but I'd be surprised if there was not something useful in there w.r.t the Id version.