Du hast es nicht verstanden oder? In D.P.´s Wolfenstein ist alles gerastert bis auf die Spiegelungen und Refraktionen selber. Und das was du in den Spiegelungen und Refraktionen siehst, ist wiederum auch nur die gerasterte Umgebung. Für ein realistisches Ergebnis, müsste D.P. nicht nur die paar Ausnahmeoberflächen durch seine Engine jagen, sondern jede einzelne Fläche die in der Szene vorkommt. Anscheinend besitzt diese Berechnungsdemo dafür aber keinen Algorithmus. Das Problem wird einfach der Wolfensteinengine überlassen. 97% des Bildes werden also nach wie vor mit der neun! Jahre alten und überfälligen Wolfensteinengine erzeugt, und das ist auf die Dauer doch ziemlich ernüchternd. Von Realismus natürlich keine Spur. Aber einfach mal die 3% Spezialfälle rauspicken und dann behaupten das sei nun ein Leuchtpfad der Zukunft weil ja Ray Trace. Und das wird dann allgemein auch noch übernommen!
Der Ansatz den D.P. fährt, wurde von Offlinerenderern bis ca. 2003 forciert. Seit dieser Zeit setzen sich Rendersysteme durch, die Szenerien als Ganzes begreifen, die jedes Objekt als „spiegelnd“ beschreibend und in die Bildkalkulation mit einbeziehen. Denn jedes Objekt das man sehen kann, spiegelt auch Licht ins Auge des Betrachters, sonst wäre es tiefst tiefst schwarz. Es steht nicht mehr zur Debatte ob, sondern nur noch wie das Objekt spiegelt, konkret: wie stark und wie "verschwommen", oder besser diffus, das Licht zurück in den Raum geworfen wird.
Allein schon die diffuse Spiegelung stellt eine große Herausforderung dar. Denn entgegen dem was man so annehmen würde, nimmt der Rechenaufwand bei einer verschwommenen Spiegelung nicht ab, sondern zu, und zwar immens! Denn ein verschwommenes Bild baut sich aus mehreren Teilspiegelungen auf, die alle einzeln erzeugt werden und aus denen dann eine Schnittmenge berechnet wird. Je mehr Teilspiegelungen, desto besser das Ergebnis!
Hinzu kommt natürlich das Licht das von Objekten auf andere Objekte fällt. In einem Innenraum etwa, macht das den Großteil der Beleuchtung aus. Ein Riesenproblem! Eine Rasterengine ignoriert diesen Umstand einfach weg und weist da mal eben jedem Objekt eine Grundfarbe zu. Das ist in etwa vergleichbar mit "Malen nach Zahlen", und dieser plumpe Ansatz lässt auch die Wolfensteindemo so armselig, so aufgesetzt, so gemalt und unecht erscheinen (Rasterengines „berechnen“ nicht, sie klatschen einfach einen einheitlichen Farbton drauf, sie „malen“). Schwer zu beschreiben, muss man sehen:
mit indirektem licht:
ohne indirektes Licht:
Ich denke, wenn das Reflektions/Refraktions-Wolfenstein/Quakewars Plugin in seiner jetzigen Form tatsächlich mit all den für eine akkurate Darstellung benötigten Berechnungen belastet würde, dann wäre die Darstellung unter Umständen langsamer als die von so manchem Offlinerenderer. Denn es findet überhaupt keine Auseinandersetzung mit der eigentlichen Problematik statt, und in Folge dessen existieren auch keine Lösungsansätze für die riesigen Herausvorderungen, sprich: keine Lösung für die 97 anderen Bildprozente, ohne die ein Spiel genauso unglaubwürdig wirken wird wie eh und je, selbst wenn D.P. seiner speziellen Spiegelungsproblematik mit einer unendlichen Rechenleistung beikommen könnte.
James Kajiya haben wir dieses elegante Formelwerk zu verdanken:
Es nennt sich die Rendergleichung, und diese übersetzt die vollständige Lichtwirkung jedes Raumobjekts einer Szene in eine 2 dimensionale Darstellung. In ihr enthalten sind darüber hinaus auch alle schon existierenden Berechnungsansätze, ob Radiosity(ursprünglich aus der Wärmelehre) oder Ray tracing via Monte Carlo oder Metropolis Light Transport. crazy stuff!
Es geht ja nicht darum das Rad neu zu erfinden, aber die Herausforderung besteht doch darin, diese Formel oder eines ihrer Derivate so geschickt herunter zu brechen und so trickreich an die Hardware anzupassen, dass schließlich eine flüssige Bewegtbilddarstellung herauskommt, oder sehe ich da was falsch?
Also dafür eine Lösung bitte! Und wenn dann noch der Fall einer 100%tigen Spiegelung dazukommt, dann sieht das erst richtig fett aus!
Ergänzung zum Cloudrendering
Was das Cloudredering betrifft, so denke ich, dass dieses für eine echte GI Berechnung umso attraktiver erscheint. Alle von D.P. aufgeführten Punkte treffen zu, auf eine vollständige Lichtberechnung sogar fast noch eher! Warum?
Theoretisch lässt sich eine einmal erzeugte Renderlösung in den Szenentexturen speichern (Texturbacking). In diesem Sinne würde man die komplexe indirekte Lichtberechnung nur einmal pro Frame durchführen, mit einer äußerst fetten Renderfarm oder auch gerne Cloud, und zwar über die komplette Szenerie. Ein Client würde sich aber nur genau die Texturen, Texturabschnitte oder Texturupdates herunterladen, die in seinem Sichtwinkel erscheinen. Das würde nicht nur einem heutigen System die Möglichkeit verschaffen, solche Bilderwelten überhaupt das erste Mal in Echtzeit zu erleben, es würde sogar eine Menge Rechenleistung sparen, da sich nur noch ein einziges System um die Lösung der Rendergleichung und zwar stellevertretend für alle angeschlossenen PC´s gleichzeitig zu kümmern braucht. Um Bandbreite zu sparen, und da sich z.B. Spiegelungen ohnehin von jedem Betrachterstandpunkt unterschiedlich darstellen, könnten solche und ähnliche Effekte wiederum lokal berechnet werden, auf den Client Systemen, die durch die Vorarbeit der Cloudrechner entlastet sind und mehr Rechenleistung für Berechnungen wie die Spiegelungen und Refraktionen von D.P. übrig haben. Gegebenenfalls baut man halt noch eine der genannten Intel-Beschleuniger-Karte ein.
Die Geometrie würde man ebenfalls lokal berechnen, denn damit würde man sich wesentlich unabhängiger von der Bandbreite machen, sprich: wenn sich nur die aktualisierten GI-Texturen um 200ms verspäten, dann ist das durchaus noch vertretbar.
Wenn ich mir nur ausmale, wie man sich in einem Spiel fühlen muss, bei dem man tatsächlich den Eindruck hat, an einem wirklichkeitsechtem Geschehen wie durch eine Videolifeschaltung teilzunehmen, etwa in Form eines vollständig getraceten Portals oder eines UTs, dann könnte ich mir sehr gut vorstellen, dass das einschlagen würde wie eine Bombe. Ich hoffe, dass ich mich einiger Maßen verständlich ausgedrückt habe.
Als Beispiel für den Stand der Dinge bei den Production Renderern, hier ein
Youtube Clip des Arion Renders. Zwischen den Bildern fallen die Wartezeiten von bis zu mehreren Sekunden auf, welche die Beschleunigerkarten(in der Regel 2-3 Stück bei solchen Produktdemos) benötigen, um das Licht nachzuführen. Genau diese Wartezeiten könnte eine entsprechend dimensionierte Claud doch auf Framelänge drücken, so das
etwas wie das hier bei raus kommt. (Den Arion Render kann man sich soviel ich weis sogar als Demo runterladen um ein bisschen damit rumzuspielen. Da wünscht man sich dann einen leisen GPU-Lüfter. Denn diese Engines werden früher oder später alle über OpenCL laufen, also auf ATI Nvidia oder auf Intel. Bin sehr gespannt wie die Intelkarte performt.)