Level-Editor mit Raytracer
-
So, es wurden jetzt ein paar Verbesserungen vorgenommen!
Wenn man die Shift-Taste beim Rotieren von Objekten drückt, rasten sie bei 0°, 45°, 90°,... automatisch ein (damit man exakte Winkel hinkriegen kann).Beim Raytracing wurde die Szene verändert. Der Raytracer rendert jetzt auf eine Textur der Größe 256x128, die dann leicht gestreckt wird. Den Blurring-Effekt habe ich entfernt.
Quellcode vom Raytracer liegt bei!
http://www.scherfgen-software.net/misc/missile_ii_level_editor.zip
-
TomasRiker schrieb:
Der Raytracer wird noch optimiert werden. Raytracing in Echtzeit ist eben nicht so einfach, wenn man auch noch Reflexionen etc. einbaut.
Mir schon klar. Ich wollte es ja nur anmerken.
-
So, der Raytracer benutzt jetzt Adaptive Subsampling!
Die Bildqualität nimmt dadurch zwar ab, aber die Framerate steigt enorm (bei mir zumindest). Man kann es sich so vorstellen: zuerst wird nur alle 8x8 Pixel ein Strahl abgeschossen. Wenn dann zwischen diesen Pixeln zu viel Unterschied besteht (z.B. verschiedene Objekte, die getroffen werden, oder ein Übergang zwischen Licht- und Schattenzone), dann werden die 8x8 Pixel in vier 4x4-Pixel-Quadrate aufgeteilt. Hier dann wieder dasselbe - wenn nötig bis auf 1x1.Hier ein Bild, wo man das gut sehen kann:
http://www.scherfgen-software.net/misc/missile_ii_raytracer_1.jpgUnd hier nochmal der Download:
http://www.scherfgen-software.net/misc/missile_ii_level_editor.zip
-
Jo, deutlich besser!
Aber wat dat geilste ist:
Das einzige was Du z.Z. an Deinem Projekt weiter entwickelst ist die "About..."-Box!!
-
Jo, irgendwie lächerlich
Aber es macht so viel Spaß, Raytracer zu programmieren. Vielleicht baue ich irgendwann mal eine richtige Library daraus, mit 3DNow!-Optimierung, Octrees etc.. Und dann irgendwann ein Spiel, das mit Realtime-Raytracing läuft.
-
TomasRiker schrieb:
Jo, irgendwie lächerlich
Aber es macht so viel Spaß, Raytracer zu programmieren. Vielleicht baue ich irgendwann mal eine richtige Library daraus, mit 3DNow!-Optimierung, Octrees etc.. Und dann irgendwann ein Spiel, das mit Realtime-Raytracing läuft.Et wird echt Zitt...!
-
Sieht echt gut aus.
Wie entstehen denn später aus den 2D Polygonen im Editor die 3D-Level im Spiel?TomasRiker schrieb:
Vielleicht baue ich irgendwann mal eine richtige Library daraus, mit 3DNow!-Optimierung, Octrees etc.. Und dann irgendwann ein Spiel, das mit Realtime-Raytracing läuft.
Nimm den Raytraycer doch gleich für das Spiel jetzt. Bis das fertig ist, haben wir eh alle einen Athlon 128 HT FX YZ 33GHz
Und wenn doch nicht, dann bringst Du einfach einen Beta-Leak raus und sagst, dass das Spiel leider aufgrund von Sicherheitslücken um einige Jahre verschoben werden muss (so wie es die Profis eben machen).
-
0x00000001 schrieb:
Sieht echt gut aus.
Wie entstehen denn später aus den 2D Polygonen im Editor die 3D-Level im Spiel?Durch Extrusion. Die Dicke lässt sich ja über das Kontextmenü bestimmen (von 1 bis 10). Man verschiebt das Polygon immer ein Stückchen entlang der z-Achse und "verkleinert" es. Verkleinern heißt hier nicht Skalieren, sondern das Verschieben der Eckpunkte gegen die Normalenvektoren, die sie im Polygon einnehmen.
Nimm den Raytraycer doch gleich für das Spiel jetzt. Bis das fertig ist, haben wir eh alle einen Athlon 128 HT FX YZ 33GHz
Und wenn doch nicht, dann bringst Du einfach einen Beta-Leak raus und sagst, dass das Spiel leider aufgrund von Sicherheitslücken um einige Jahre verschoben werden muss (so wie es die Profis eben machen).
Hehe, das wär' ne Idee, aber so lange will ich nicht warten ;). Was aber sehr wohl möglich wäre: Raytracing irgendwie mit Vertex- oder Pixelshadern implementieren. Dann könnte man auch die Hardware sinnvoll einsetzen und der Hauptprozessor hätte mehr Zeit für die restlichen Dinge.
-
Es gibt wieder ein Update!
Man kann nun sehr viele Parameter des Raytracers in der Benutzeroberfläche einstellen. Wer sich für Raytracing interessiert, dem dürfte das viele Dinge klarer erscheinen lassen.
Man kann nun einstellen:- Animation ein/aus
- schrittweise die Animation abspielen
- Lichter ein/aus (einzeln)
- maximale Render-Tiefe (Reflexionen, Reflektionen von Reflexionen...)
- adaptive Subsampling ein/aus
- Gittergröße (von 1x1 bis 64x64 Pixel)
- Subsampling-Unterteilungslinien ein/ausQuellcode ist natürlich auch wieder dabei!
Bild:
http://www.scherfgen-software.net/misc/missile_ii_raytracer_2.jpgDownload:
http://www.scherfgen-software.net/misc/missile_ii_level_editor.zip
-
TomasRiker schrieb:
Quellcode ist natürlich auch wieder dabei!
Top!
Da bedank' ich mich jetzt mal im Namen aller, die sich das reinpfeifen, für:
Danke, David! *imkanonträller*
P.S.: Auch, wenn ich sicher nicht dazu gehör'...
-
Das war's aber noch lange nicht!
Die neue Version zeigt auch die Statistiken an. Außerdem wurde die Auflösung erhöht, aber die Framerate ist trotzdem noch gestiegen, weil ich die Algorithmen noch entscheidend optimieren konnte.Bild:
http://www.scherfgen-software.net/misc/missile_ii_raytracer_3.jpgDownload:
http://www.scherfgen-software.net/misc/missile_ii_level_editor.zip
-
Bau doch mal noch Texturen ein!
Bye, TGGC (Der Held ist zurück)
-
Ja, das hatte ich vor. Heute habe ich erste Experimente damit gemacht, aber ganz so einfach ist es nicht. Man wird praktisch "gezwungen", die Texturen von der Grafikkarte rendern zu lassen, denn sonst würde das Adaptive Subsampling nicht mehr richtig funktionieren.
Die Texturen von der Hardware rendern zu lassen, hat Vor- und Nachteile: ein Vorteil ist, dass es schnell ist und dass man sogar schöne Filter benutzen kann, ohne auf das Subsampling zu verzichten (ich verwende ja OpenGL, um die einzelnen Quadrate zu zeichnen, und dann werden die Texturkoordinaten automatisch mit interpoliert).
Nachteil: es ist mit mehr Aufwand verbunden als einen Software-Texture-Sampler zu schreiben (der aber, wie schon gesagt, nicht gut funktionieren würde - die Texturen wären dann allesamt verwaschen), und man muss einige Limitierungen in Kauf nehmen.Ich hatte am Anfang keine Texturen mit eingeplant, darum ist es jetzt sehr schwer, sie noch einzubauen. Die werden dann integriert, wenn ich meine RTRT-Library schreibe (dann schreibe ich sowieso alles neu).
Texturen auf einer Ebene klappen schon (d.h. nur "direkt" sichtbare). Wenn sich etwas in einem Objekt spiegelt, dann hat das Gespiegelte aber noch keine Textur. Entweder mache ich das mit Multi-Pass-Alpha-Blending, oder mit Multi-Texturing.