BlitzTrace

Kommentare anzeigen Worklog abonnieren

Worklogs BlitzTrace

Reflektion uuuuuund....

Donnerstag, 22. Mai 2008 von StepTiger
Refraktion natürlich!

Endlich funktioniert auch die Brechung. Ich will es allerdings etwas sinnvoll physikalischer machen, das heißt, man muss die Dichte der Objekte mit einbeziehen. Wie genau ich das mache, weiß ich selbst noch nicht.

Bisher funktioniert aber schon einfache Lichtbrechung. Ein Bild davon hab ich leider noch nicht, kommt aber noch.

Ich wollte euch wenigstens wissen lassen, dass ich immer noch arbeite Wink

Naja, abgesehen davon noch etwas neues:
BlitzTrace läuft jetzt wesentlich schneller, da ich nun die ganzen anderen Berechnungen nur noch für 1 Dreieck pro Pixel durchlaufen lasse.

Als nächstes in Planung ist die Berechnung von Kugeln. Das große Problem dabei ist allerdings, dass ich die ganzen Funktionen (Reflektion, Refraktion, Alpha usw.) bisher nur auf Dreiecke bezogen habe. Jetzt müsste ich also eine komplett neue Funktion für Kugeln machen. Ich glaube, ich täusche BlitzTrace am besten vor, dass es ein Dreieck ist, berechne vorher Normale usw. Da muss ich mir noch etwas überlegen.

Also der Code ist jetzt ziemlich optimiert, sodass die Anzahl der Dreiecke nur noch minimale Auswirkungen auf die Geschwindigkeit hat. Das fällt eher bei größeren Objekten mit 10k Polys und mehr auf. (Ja, so viele unterstützt BlitzTrace Wink )

Ich geb mir mal Mühe, die Woche noch einiges daran zu verbessern.

Fehlerbehebung und Meshes

Freitag, 16. Mai 2008 von StepTiger
Es gibt 2 extrem positive Neuigkeiten!

1. Ich habe endlich den Fehler mit den Schatten behoben.
Das ganze lag eigentlich nur daran, dass die Korrektur zu weichen Schatten auch auf Stellen gemacht wurde, die eigentlich im Kernschatten lagen. -> Stufenabgleich nach Innen.
Das ganze zu beheben war recht einfach. Ich musste nur schauen, ob der mittlere Punkt auch im Schatten liegt.
Waren nur etwa 10 veränderte Zeilen, aber ich hab lange gebraucht, um auf diese Idee zu kommen Wink

2. Man kann endlich Modelle laden!!!
Das ganze zwar noch etwas umständlich, aber immerhin funktioniert es.
Was bietet die Funktion selbst?
- .ray-Dateien laden

Was bietet sie nicht?
- Texturen und derartiges

Um diese Dateien herzustellen, benötigt man den .3ds to .ray-converter.

Ich lass mir da allerdings noch was besseres zu einfallen Wink

Mir wurde von dav3d Hilfe angeboten, was ich gern hiermit würdigen würde.
Er hatte mich darauf hingewiesen, dass das .obj-Format an sich sehr einfach verständlich wäre.
Demnach werde ich mich wohl in Zukunft noch etwas mit den Dateitypen auseinandersetzen müssen.
Und letzendlich kann mein Raytracer dann auch Meshes laden.
Danke dav3d Smile

Naja, genug geredet. Ich persönlich bin ja dafür, einen Screenshot zu zeigen.
user posted image

Das Mesh besteht aus etwa 80 Triangles und glaube 22 Vertices. Es rendert bei 160x120 mit kompletter Lichtberechnung in etwa 8 Sekunden, bei 640x480 in etwa 1 1/2 Minuten.
Ohne Lichtberechnung dauert es etwa 3 Sekunden bei 640x480.

.3ds to .ray

Freitag, 16. Mai 2008 von StepTiger
Naja, da ich mich ja mit der Frage auseinandergesetzt habe, wie man Objekte einladen könnte, habe ich einfach einen .3ds->.ray Converter geschrieben.

.ray-Dateien sind extrem einfach aufgebaut. Man kann sie deshalb gezielt und schnell auslesen.

Die Schreibroutine umfasst etwa 50, die Leseroutine etwa 60 Zeilen. Mittlerweile ist der Quellcode der RAY_lib.bb bei einer Größe von etwa 30kb angekommen.

Ich werde die neueste Version, mitsamt des Converters sobald wie möglich hochladen.

Bis dahin müsst ihr euch noch durch Screenshots quälen Wink

Hier mal ein Screenshot des wirklich sehr unspektakulären Converters:
user posted image


Man sieht, er benutzt die in Blitz eingebauten Befehle, ist also wirklich sehr unspektakulär.

Alpha 0.18

Montag, 12. Mai 2008 von StepTiger
Soooo! Nachdem ich jetzt leider etwas wenig Zeit hatte, habe ich mich doch wieder ein bisschen mit meinem Raytracer befasst.

Nun ist es möglich, dass mehrere Kameras angezeigt werden. Ebenfalls musste ich einige Fehler bei der Bewegung einer Kamera beheben. Nun kann man die Kameras beliebig platzieren.

Ebenfalls habe ich normales Shading mit eingebracht. Je mehr ein Dreieck von einem Licht weggedreht ist, desto weniger wird es von ihm beleuchtet. Exakt dieses Prinzip brauche ich später noch.

Was mir aufgefallen ist, ist, dass es Fehler bei der Schattenberechnung an den Ecken und Kanten der Objekte gibt. Das liegt daran, dass ich zur richtigen Schattenberechnung den "Schattenstrahl" um 0.001 in die Richtung der Normale verschiebe. Das ist insbesondere an den Kanten ein Problem, da nun die Ecke nicht mehr im Schatten liegt (wohl nachvollziehbar).
Ebenfalls liegt das jedoch auch an der Berechnung der weichen Schatten. Jetzt wird nämlich der Raum drumherum abgetastet. Und nach oben hin ist dort eben Licht. Ich müsste also sicher gehen, dass es nur bei den Stellen eine weiche Schattenberechnung gibt, wo sowieso Licht hinkommt. Das ist allerdings wieder eine riesige Schreibarbeit, die ich mir heute nicht mehr geben werde.

Allerdings habe ich ja jetzt eine Woche überhaupt keine Schule, da werde ich wohl wieder etwas Zeit investieren.

Ein großes Problem zur Zeit ist allerdings, dass ich mich noch nicht mit 3ds oder x Dateitypen auseinandergesetzt habe. Ich muss aber irgendwie Objekte laden können, um die Engine mal wirklich zu testen.
Ich war allerdings schon am Überlegen, ob ich mir ein eigenes, leichter zu lesendes Dateiformat und einen dazugehörigen Konverter schreibe.

Aber mittlerweile kann man schon sehr schöne Bilder hinbekommen. Um euch mal ein schönes zu zeigen:
user posted image

An den Kanten der Würfelspiegelung erkennt man gut, was ich meinte.

Alpha 0.13

Donnerstag, 8. Mai 2008 von StepTiger
So, da fang ich hier einfach mal eine Worklog an. Ich finde es irgendwie sinnlos, alle Fortschritte neu zu posten. Natürlich schreibe ich Änderungen in meinen Showcase-Eintrag, dafür ist er ja da Wink

Jetzt endlich, nach langem Herumrätseln und vielen Versuchen unterstützt mein Programm Soft-Shadows.

Es basiert einfach nur auf dem Prinzip, dass die herumliegenden Punkte auf Schatten, bzw. auf Licht, abgetastet werden.
Die Anzahl der Punkte lässt sich recht einfach einstellen. Wahrscheinlich werde ich dafür noch eine eigene Funktion machen.
Man muss allerdings beachten, dass es hierdurch eine exponentielle Steigerung der Rendervorgänge gibt (Ein Licht tastet dann das nächste ab und so weiter)
Gibt jedoch auch wunderschöne Ergebnisse.

Doch ich lasse lieber Bilder sprechen:
user posted image


Um das ganze dann mal von Nahem zu sehen:
user posted image

Man sieht hier noch sehr gut die Übergänge der Schatten. Diese Punkte wurden jeweils mit den umliegenden abgeglichen.
Der Übergang lässt sich auch härter machen, ebenso lässt sich die maximale Distanz, in der abgeglichen werden soll, verändern.