ZFX
ZFX Neu
Home
Community
Neueste Posts
Chat
FAQ
IOTW
Tutorials
Bücher
zfxCON
ZFXCE
Mathlib
ASSIMP
NES
Wir über uns
Impressum
Regeln
Suchen
Mitgliederliste
Membername:
Passwort:
Besucher:
4395675
Jetzt (Chat):
21 (0)
Mitglieder:
5239
Themen:
24223
Nachrichten:
234554
Neuestes Mitglied:
-insane-
"Raytracer" von Stephan Reiter (Reita)


Hoi hoi!

Mein neuestes Projekt ist zwar auch im 3D-Grafikbereich angesiedelt, benötigt aber zur Abwechslung einmal keine Vertex- und Pixel-Shader Unterstützung: mein erster Raytracer.

Da ich ab März zur Informatik-studierenden Gesellschaft gehöre, fand ich, es sei eine gute Idee, meine Mathematik Kenntnisse wieder etwas aufzufrischen. Und da ich bisher noch nie das Vergnügen gehabt habe, einen eigenen Raytracer zu programmieren, war dies das perfekte Vorhaben für diesen Zweck.

Ein paar Hintergrundinformationen:
- Unterstützung für Ebenen, Kugeln und Dreiecke.
- Punkt-Lichtquellen stehen für die Beleuchtung zur Verfügung.
- "Global-Illumination", d.h. beim Rendern der Objekte werden neben Diffuse/Specular-Beleuchtung auch Reflexionen und Brechungen miteinbezogen.
- Reflexions- und Brechungswerte werden über den Fresnel-Term gemischt.
- Texturen- und Normalmap-Unterstützung (letztere fällt besonderes beim grünen Dreieck auf ...)
- Adaptive Supersampling(Antialiasing), d.h. jeder Pixel wird in 4 Quadranten unterteilt, welche unabhängig voneinander gesampled werden. Sind die gewonnen Farbwerte voneinander zu unterschiedlich, wird jeder Quadrant wieder unterteilt und es wird wieder gesampled. So bekommt man dort schönes Antialiasing, wo es auch gebraucht wird: an den Objekträndern.

Das Rendern des obigen Bildes (ursprünglich 1024x768) hat übrigens um die 26 Minuten gedauert.

Nun ja, ich glaube für einen ersten Versuch ist diese Applikation schon recht ordentlich geworden (Entwicklungszeit war ca. 1,5 Wochen). Einen einfachen Scene-Graph (wahrscheinlich einen Octtree) werde ich noch implementieren

Bis zum nächsten IOTW,
Stephan






Von kaiserludi am 15.02.2004, 00:08:23 Uhr
Mal ne Frage: Was fürn rosa Schweinchen? Ich kann auf dem Bild leider gar keins entdecken :(

Von Seraph am 15.02.2004, 00:12:09 Uhr
Sorry, war mein Fehler. Hab den falschen Text erwischt. :D

Von Eisflamme am 15.02.2004, 00:51:40 Uhr
Hey, sieht echt cool aus. :)

Von ChrisM am 15.02.2004, 00:52:56 Uhr
Hi,

sieht auch wie schon dein Weltraumspiel/-techdemo sehr gut aus! Benutzt du irgendwelche Hardwareunterstützung oder läuft alles über Software (auch ohne MMX & co)?

ChrisM

Von Marshal am 15.02.2004, 02:29:04 Uhr
26 Minuten... hm, reicht noch nicht ganz fürn Spiel. ;)))

Ne, im ernst: Respekt sag ich da!
Wäre so langsam auch mal an mir, mich mit Global Illumination zu beschäftigen.
Sowas ermutigt mich dann natürlich, mich auch mit sowas zu beschätigen.

Von Richard Schubert am 15.02.2004, 09:05:47 Uhr
garnicht mal so ungut, auf der PS3 wäre das der absolute knüller und sicherlich echtzeitfähig, also ran ans werk ;-)

Von joeydee am 15.02.2004, 09:46:17 Uhr
Respekt! Da ich mich schon mit Raytracern und der Technik befasst habe, weiß ich was da an Mathe-Kenntnissen und Umsetzung dahintersteckt.
Und an den Rest: hört auf mit Echtzeit zu vergleichen, die Zielsetzung beim Raytracing ist eine ganz andere.

Von sebi am 15.02.2004, 11:14:42 Uhr
Jo. Respekt ;)

Von Timm von Puttkamer am 15.02.2004, 11:53:26 Uhr
hübsch, hübsch. ;-)
Wirklich schönes Projekt.

Von Reita am 15.02.2004, 12:45:41 Uhr
*freu* Danke! :D Echtzeit ist ja sicher nicht drinnen, aber mit ein paar Optimierungen kann ich die Renderzeit vielleicht noch verkürzen - leider versteh ich von Assembler ja nicht wirklich viel und werde da bei C bleiben müssen.

Von killerhamPster [me] am 15.02.2004, 17:08:34 Uhr
Sieht cool aus. Aber ohne Dich demotivieren zu wollen: Ich studiere jetzt im 5 Semester Info und hab' in Mathe bisher nur sehr wenig gemacht, was man für einen Raytracer brauchen könnte. Oder ich hab's nicht gemerkt ;)

Von Mayhem am 16.02.2004, 10:21:44 Uhr
Sieht recht gut aus. Ich versteh' nur nicht so ganz, wie die Projektion der Erde auf den Boden vonstatten geht. Unter "global illumination" versteht man übrigens im allgemeinen eine Implementierung eines "Radiosity"-Verfahrens. Davon kann man im Bild jedoch leider nichts erkennen. Für 1,5 Wochen jedoch sehr beeindruckend.

Von MadMax am 16.02.2004, 12:05:57 Uhr
@Mayem

Global illumination is mitnichten nur Radiosity.Es ist allgemein ein Verfahren zur berechnung einer Globalen Beleuchtung. Dieses kann ein Raytracer oder ein Radiosity Renderer sein oder ein mischung aus beiden.

Von Mayhem am 16.02.2004, 16:56:43 Uhr
@MadMax :
Ja, Du hast recht und ich hab Unsinn geredet. Es ist nur so, dass ein reiner Raytracer (also ohne Bidirectional Pathtracing oder Photon-Mapping) keine GI ermöglicht.

Von MadMax am 16.02.2004, 20:26:40 Uhr
Die Begriffe werden oft in eine Topf geschmissen.GL bedeutet einfach Glboale Beleuchtung dh. ein Beleuchtungsmodell welches nicht nur das Licht berücksichtigt welches von einer Lcihtquelle zum Object geht sondern auch die Wechselwirkung der Objecte untereinander berücksichtigt.Es gibt zwei arten von Idealen Wechselwirkungen Diffuse und Specular.
Ein Raytracer berücksichtigt nur die Speculare Wechselwirkung und ein Radiosity Verfahren nur die diffuse keiner der beiden kann also die complete Rendering Gleichung erfüllen. Aber was du sagst stimmt nicht kanz mit Raytracing ist sehr wohl GL möglich einfach weil die definition besagt das GL einfach ein Verfahren zur Globalen Beleuchtung ist.Und Ein Raytracer arbeitet ja nun mal Global.

Von MadMax am 16.02.2004, 20:34:08 Uhr
Ach noch etwas du sprichst vom bidirektionalem Raytracing.Ich kan mich auch irren aber ich glaube nicht das diese verfahren eine Diffuse Diffuse Wechselwirkung gestatte sondern nur Licht Wege der Art LS*DS*E. also nur eine Diffuse Wechselwirkung so kan man zum beispiel Caustics darstellen.Echte Diffuse Wechselwirkung müsste aber auch übergänge zwischen zwei Diffusen materialien ermöglichen.

Von Mayhem am 16.02.2004, 22:26:23 Uhr
>>einfach weil die definition besagt das GL einfach ein Verfahren zur Globalen Beleuchtung ist.Und Ein Raytracer arbeitet ja nun mal Global

Na ja, GL besagt entgegen der Wortdefinition doch etwas mehr. Es geht wie Du schon richtig gesagt hast um die Wechselwirkung der Objekte, bzw. derer Beleuchtung untereinander. Ein purer Raytracer berücksichtigt das nicht. Sonst würde auch jeder Renderer unter GI laufen.

Von MadMax am 17.02.2004, 08:48:17 Uhr
Ein Raytracer berücksichtigt eben die Wechselwirkung zwischen Objecten(nähmlich die speculare). GL heißt einfach Globales Beleuchtungsmodell im gegensatz zu lokalem.

Von Vertexwahn am 17.02.2004, 14:58:31 Uhr
wie wird den das Bild ausgegeben? wird das Bild einfach in ein Datei gespeichert oder z. B. mittels DirectDraw auf den Bildschirm ausgegeben?

Ich kenn mich ja nicht so besonders gut aus mit deisem 3D Zeugs, aber mich würden alleine schon die 3D Transformatinen (damit aus der 3D-Szene ein 2D Abbild wird) und Texturmapping schon ewig lang beschäftigen – und du machst das innerhalb einundhalb Wochen – ok wenn man das wissen hat und es nur noch programmieren muss – dann ist das ja anscheinend machbar – also von meiner Seite aus muss ich sagen: eine echt starke Leistung!

Von Reita am 17.02.2004, 15:59:24 Uhr
VertexWahn: Das Bild wird einfach in eine Bitmap-Datei gerendert - die direkte Ausgabe über den Bildschirm macht ja weniger Sinn, da die Renderzeiten so lange sind.

Bezüglich der Mathematik dahinter: die ist bei Raytracern im Vergleich zu Triangle-Rasterizern um einiges simpler. Zwei gute Quellen dazu sind die PDFs unter http://www.unc.edu/courses/2003spring/comp/236/001/Lecture15.pdf und http://www.unc.edu/courses/2003spring/comp/236/001/Lecture16.pdf

Von Mayhem am 17.02.2004, 18:17:13 Uhr
>>Ein Raytracer berücksichtigt eben die Wechselwirkung zwischen Objecten(nähmlich die speculare)

Meinst Du damit Reflexionen ?

Von MadMax am 17.02.2004, 20:42:19 Uhr
Das wird langsam ein wenig viel eigentlich solle es hier ja um das IOTW gehen.Ich denke es ist besser mal ein thread darüber aufzumachen dort könne wir dan mal ausgiebig diskutieren vieleicht könne dan auch andere ihre Meinung dazu abgeben.

Von CptStone am 19.02.2004, 00:43:24 Uhr
Das Bild sieht gut aus. Bravo!

Allerdings reflektiert der Boden heller als die Objekte.

Vielleicht solltest Du noch mal schreiben, was Du in den 1,5 Wochen tatsächlich gemacht hast. Ich sehe in dem Bild deutlich mehr Arbeit.

Von Reita am 19.02.2004, 09:18:10 Uhr
Ich habe zur Zeit, als ich noch am Raytracer gearbeitet habe, eine kleine Powerpoint-Präsentation erstellt, in welcher ich die Entwicklungsschritte dokumentiere - falls es jemanden interessiert, kann er sich die Datei von http://members.aon.at/breiter5/rayt.zip saugen. :)

Von CptStone am 21.02.2004, 06:00:00 Uhr
Alles klar, ich war mir erst nicht so sicher *G*