In Anbetracht des hohen Aufwands beim bisher beschriebenen Radiosity-Algorithmus stellt sich die Frage, ob man die Ergebnisse der Beleuchtungsberechnung inkrementell approximieren kann. Die Auswertung der i -ten Zeile des Gleichungssystems liefert eine Schätzung für die Strahlung Bi des Flächenelements, die auf den Schätzungen für die Strahlungswerte der anderen Flächenelemente basiert. Jeder Term in der Summe der Gleichung beschreibt die Auswirkung des Elements j auf die Strahlung des Elements i :
BjBi = BjFijj .
Diese Methode ``sammelt'' also das Licht der restlichen Szene ein. Der Ansatz zur schrittweisen Verfeinerung verteilt dagegen die Strahlung eines Flächenelements auf die Szene. Dazu bietet sich die Anpassung obiger Gleichung zu
BiBj = BiFjij .
an. Wenn man eine Schätzung für Bi hat, kann man den Beitrag des Flächenelements i zum Rest der Szene ermitteln, indem man vorstehende Gleichung für jedes Element j auswertet. Dazu braucht man leider Fji für alle j . Jeder dieser Werte wird mit einem separaten Halbwürfel bestimmt. Dies erfordert ebensoviel Aufwand an Speicherplatz und Rechenzeit wie der ursprüngliche Ansatz. Man kann die Gleichung jedoch umschreiben, wenn man die Reziprozitätsbeziehung berücksichtigt.BiBj = BiFijj .
Zur Auswertung dieser Gleichung für alle j sind nur die Formfaktoren nötig, die mit einem einzigen Halbwürfel um das Flächenelement i berechnet wurden. Kann man die Formfaktoren des Elements i schnell berechnen (z.B. mit z -Puffer-Hardware), kann man sie wieder löschen, sobald die Strahlungen vom Flächenelement i aus berechnet sind. Man muß also immer nur einen einzigen Halbwürfel und dessen Formfaktoren gleichzeitig berechnen und speichern.
for i:= 1 to n do
{ initialisiere }
if patch i ist Lichtquelle
{ für jede Fläche }
then Bi :=
Bi := Emissionswert
{ Strahlung und Differenz }
else Bi := Bi := 0
end;
repeat
for {jede Fläche i, beginnend bei der mit der größten Ausstrahlung} do begin
Plaziere Hemicube auf Fläche i
Berechne Fij für alle
1 j n
for j := 1 to n do begin
{für jede Fläche j tue}
R : = *Bi*Fij*Fi/Fj
{ Strahlung von Fläche i }
Bj : = Bj + R
{ Differenz erhöhen }
Bj : = Bj + R
{ Strahlung erhöhen }
end;
Bi : = 0 ;
{ Überschuß ist verteilt }
end
until fertig
{ bis zur Konvergenz }
Bei jeder Ausführung der äußeren FOR-Schleife verteilt ein weiteres Flächenelement seine unverbrauchte Strahlung auf die Szene. Daher werden nach der ersten Ausführung nur die Flächen beleuchtet, die selbst Lichtquellen sind sowie solche, die beim Verteilen der Strahlung des ersten Elements direkt beleuchtet werden. Rastert man am Ende jeder Ausführung des Codes ein neues Bild, so wird das erste Bild relativ dunkel und die nachfolgenden Bilder immer heller.
Abbildung 20.4 faßt den gesamten Ablauf zusammen.