Ray Tracing: Unterschied zwischen den Versionen

Aus Das Sopra Wiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 9: Zeile 9:
== Naives Ray Tracing ==
== Naives Ray Tracing ==


'' to be continued ... ''
Die einfachste Art Ray Tracing zu implementieren wird auch als Naives Ray Tracing bezeichnet. Hierfür werden keinerlei Beschleunigungsstrukturen verwendet. Der Strahl dessen Schnittpunkt man finden will wird einfach mit allen Objekten der Spielwelt geschnitten wobei man sich jedes mal wenn ein Schnitt stattfindet das Objekt mit dem nahsten Schnittpunkt merkt. Ist man durch alle Objekte der Spielwelt durchiteriert ist das gemerkte Objekte das getroffene.
 
Dieser Ansatz funktioniert allerdings nur für sehr kleine Welten mit wenigen Objekten, sobald man eine größere Spielwelt hat dauert das Berechnen der Schnittpunkte mit allen Objekten zu lange um für ein Echtzeitspiel verwendet werden zu können. Um trotzdem mit Raytracing arbeiten zu können müssen also entsprechende Optimierungen zur Beschleunigung umgesetzt werden.
 
== Raytracing mit Beschleunigungsstrukturen ==


[[Kategorie:Begriffe]]
[[Kategorie:Begriffe]]

Version vom 1. Dezember 2010, 16:22 Uhr



Ray Tracing ist das Verfolgen eines beim Ray Casting erstellten Strahls in der Szene. Ziel der Verfolgung des Strahls ist es das erste Hindernis zu finden auf welches der Strahl auftrifft. Je nachdem für welchen Zweck der Strahl ausgesendet wurde, müssen unter Umständen nur bestimmte Objekte der Szene berücksichtigt werden oder für die Genauigkeit der Schnittprüfung können manchmal die umgebenden Bounding Volumes ausreichen während manchmal genau der getroffene Teil eines Objekts benötigt wird.

Das Finden von Schnitten eines Strahls mit Bounding Volumes kann anhand der Ray und Bounding Volume Structs sehr einfach implementiert werden. Wenn man die genauen Schnittpunkte eines Strahls mit den Triangles eines Modells berechnen möchte muss man dies manuell implementieren da dies von XNA standardmäßig nicht unterstützt wird. Der Triangle Intersection Artikel zeigt wie dies bei XNA implementiert werden kann.

Die Schwierigkeit beim Ray Tracing ist es den nahsten Schnittpunkt des Strahls effizient, also zum einen möglichst schnell und zum anderen mit einem möglichst geringen zusätzlichen Speicherplatzaufwand für Beschleunigungsstrukturen zu finden.

Naives Ray Tracing

Die einfachste Art Ray Tracing zu implementieren wird auch als Naives Ray Tracing bezeichnet. Hierfür werden keinerlei Beschleunigungsstrukturen verwendet. Der Strahl dessen Schnittpunkt man finden will wird einfach mit allen Objekten der Spielwelt geschnitten wobei man sich jedes mal wenn ein Schnitt stattfindet das Objekt mit dem nahsten Schnittpunkt merkt. Ist man durch alle Objekte der Spielwelt durchiteriert ist das gemerkte Objekte das getroffene.

Dieser Ansatz funktioniert allerdings nur für sehr kleine Welten mit wenigen Objekten, sobald man eine größere Spielwelt hat dauert das Berechnen der Schnittpunkte mit allen Objekten zu lange um für ein Echtzeitspiel verwendet werden zu können. Um trotzdem mit Raytracing arbeiten zu können müssen also entsprechende Optimierungen zur Beschleunigung umgesetzt werden.

Raytracing mit Beschleunigungsstrukturen