Raytracing in Spielen I: Strahlen versprechen den Fotorealismus
4/5Quake 4: Raytraced
Für meine Diplomarbeit wollte ich analysieren, wie sich ein moderner 3D-Shooter aus dem Jahre 2005 mit Raytracing verhält. Zu diesem Zweck wurde „Quake 4“ von den Firmen „Raven Software“ und „id Software“ gewählt.
Als weiterer Arbeitsbereich wurden Algorithmen erfunden, um eine Kollisionserkennung über Strahlen zu ermöglichen. Eine polygongenaue Kollisionserkennung für Schusswaffen wurde 2004 in dem Spiel „Doom 3“ implementiert und war zu dieser Zeit eine Neuheit im Gaming-Bereich. Mit Raytracing kann man dies sehr einfach implementieren. Für sogenannte Direct-Hit-Waffen kann man beispielsweise das Ziel durch einen einzigen Strahlschuss polygongenau feststellen. Dies funktioniert dabei mit genau den gleichen Mechanismen und Datenstrukturen wie die Bestimmung des Farbwerts beim Rendern des Bildes. Es ist also kein zusätzlicher Programmieraufwand nötig, um diesen Test gegen die gesamte Szene inklusiver aller darin vorkommenden dynamischen Objekte (z. B. umherfliegende Raketen) durchzuführen. Es kann also davon ausgegangen werden, dass die polygongenaue Treffererkennung in allen Spielen, die Raytracing benutzen, automatisch mit enthalten sein wird.
Für das Spielermodell wurde eine Kugel (Bounding Sphere) um den Spieler herum benutzt, die wie bei einem Radar durch viele einzelne Strahlen approximiert wurde. Dabei wird beispielsweise festgestellt, ob der Spieler zu nahe an ein Objekt (z. B. eine Wand) gelaufen ist. Das Vorgehen dabei ist, dass eine Bewegung von der alten Position des letzten Frames zu der Position des aktuellen Frames nur dann erlaubt wird, wenn jeder der Strahlen eine minimale Länge von X (in Q4RT: 32) hat. Das bedeutet also, dass sich vom Zentrum des Spielers aus mit dem Abstand X kein weiteres Kollisionsobjekt befinden darf. Nähere Details zu den Algorithmen gibt es in der GameStar/Dev (Ausgabe 04/2006).
Nun möchte ich Ihnen einen interessanten Spezialeffekt noch näher vorstellen: Wasser. Wie man es aus der Natur kennt, sollte dieses die Umgebung spiegeln und es sollte möglich sein hindurch zu sehen, wobei sich das Licht selbstverständlich brechen sollte. Bewegtes Wasser sollte nicht komplett flach aussehen. Man ist daran gewohnt, Höhenunterschiede in den Wellen zu sehen. Ich möchte hier einige Beispiele von Wasser in Spielen der letzten Jahre zeigen. Natürlich war es notwendig diese „Optimierungen“ vorzunehmen, damit das Spiel schnell genug gerendert werden konnte. Dies soll daher keine Kritik an den Spielen oder den Herstellern sein. Es soll lediglich aufzeigen, wie Wasser heutzutage in einigen Spielen aussieht, was daran fehlt und wie es in Spielen mit Raytracing aussehen könnte.
Das Wasser in „Quake 4: Raytraced“ wird folgendermaßen dargestellt: Um eine Reflexion oder eine Refraktion von Licht vorzunehmen, wird der auf den Wasser-Shader auftreffende Strahl entsprechend der Normale an dieser Auftreffposition gespiegelt bzw. gebrochen. Hat man nun eine flache Ebene für das Wasser definiert, so ist die Normale an allen Punkten dieser Ebene gleich. Um jedoch auch Welleneffekte zu bekommen, wurde ein animiertes Set an Texturen benutzt, welches in RGB-Farben kodierte Normalen enthält, die anstatt der geometrischen Normale – die überall auf dem Wasser gleich wäre – benutzt werden. Dementsprechend werden der Reflexions- und der Refraktionsstrahl an dieser neuen Normale gespiegelt bzw. durch die Wasseroberfläche hindurch gebrochen. Das Ergebnis:
Beispiele aus Q4RT gibt es in diesem Video zu sehen: