Hi,
ich baue immernoch an einem RayTracer jetzt habe ich ein Problem. Die Strahlen der Kamera werden ja perspektivisch "ausgesendet", das heißt dann aber doch, dass sie, je weiter weg sie kommen, sich voneinander entfehrnen bis Zonen entstehen, die nicht getroffen werden weil die "Strahlen" zu weit auseinander liegen. Wie verhindert man das oder habe ich nur einen Denkfehler.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Diese Zonen sind theoretisch egal, denn dazwischen hast du keine Pixel, die das widergeben können. So ist das zumindest, solange du kein Antialias betreibst, zum Beispiel per Multisampling. Dann schickst du mehr Strahlen, als du Pixel hast und verrechnest die dann, was dann die weicheren Kanten gibt.
greetings
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Aber es fällt doch auf wenn ich zB einen Stab habe und ihn weiter weg stelle. Dann verschwindet er ihrgenwann in den Zwischenräumen, wenn ich ihn jetzt seitlich bewege fällt er ihrgendwann wieder in einen Bereich eines Strahls und ist sichbar. Das ist das Problem, das an manchen Positionen Sachen verschwinden können und es nicht mit der Tiefe sondern nur mit den X- und Y-Koordinaten zu tun hat.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Das ist wahr, aber ob und wie das zu umgehen ist ... keine Ahnung... Außer halt mehr Strahlen schicken, als du brauchst.
greetings
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Doch er ist nach der Z-Achse noch zu sehen, Aber da die Strahlen nicht paralel laufen, treffen sie je nach X- und Y- Wert nicht, was eigendlich falsch ist. Dadurch kommt es, dass wenn man sich zB nach links bewegt, der Stab abwechselnd verschwindet und wieder auftaucht. Vorallem bei niedrigen Auflösungen oder großen Sichtwinkeln dürfte das auftreten
Ich denke hier hilft wirklich nur AntiAliasing oder die Strahlen nehmen ab einem gewissen Punkt, wo eine tote Zone entstehen würde, nichts mehr an. Ist aber kacke, wenn du große Objekte in weiter Entfernung hast, die auf einmal "verschwinden"
_________________ Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut. Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’. Und du schaust mich an und fragst ob ich das kann. Und ich denk, ich werd' mich ändern irgendwann. _________________Farin Urlaub - Bewegungslos
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Man sollte aber auch bedenken, dass Raytracing eher nicht in Echtzeit läuft, also ein Objekt, welches bei leicht unterschiedlichen Blickwinkeln mal da und mal nicht da ist, kaum auffallen dürfte.
greetings
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Die einzig Lösung, die mir eingefallen ist, ist extrem Rechenintensiv, dabei werden die Strahlen nicht perspektivisch sondern immer in eine Richtung ausgeworfen. Aber der Punkt des Auswurfes verschiebt sich. Also wenn ich eine Kamera habe, die parallel zur X- und Y-Achse steht. Dann berechne ich mit Hilfe des Sichtwinkels und der Sichtweite, wo man den letzten Pixel auf der X-Achse sehen könnte, dann gehe ich alle Punkte der Linie "Äußerster sichtbarer Pixel" zu "Äußerster Pixel mit Z-Abstand 0 zu Kamera" ab, und werfe jedesmal gerade einen Strahl aus. So verhindert man diesen Effekt, leider Steigen die Strahlen enorm an also statt zB 300*400 Strahlen bei der Perspektivischen Variante, werden es bei dieser bei 45 Grad Sichtwinkel und 300 Sichtweite etwa 450*550 = 247500 Strahlen anstatt von 120.000, also fast 100.000 mehr.
Vielleicht bringt es auch was, wenn man für weit entfernte oder kleine Objekte, zusätzlich Strahlen hinzunimmt die zB aus den Mitten der Flächen oder den Eckpunkten kommen. Und die Farbwerte daraus dann mit den 4 Pixeln, zwischen denen jeder dieser Strahlen verläuft, verrechnet.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Soweit ich verstanden habe, werden die Strahlen nicht in Raumkoordinaten ausgestrahlt, sondern für jedes Pixel auf dem Bild wird durch dieses ein Strahl geschickt. Damit sollte sowas dann nicht mehr auftreten.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Das Problem ist nicht das ein Pixel keinen Inhalt hat, sondern das Lücken zwischen den Strahlen entstehen und Objekte die in diese Lücken geraten einfach "verschwinden". Oder meintest du was anderes.
Also beim Raytracer gehn die Strahlen doch quasi vom Betrachter zu den Objekten? So hatte ich mir das zumindest gedacht. Wenn man jetzt einfach mehr Strahlen in einem festen Raster aussendet, ist zwar die Chance das die Objekte getroffen werden größer, aber wenn man dann statt einem vier Strahlen pro Pixel nimmt hat man eben auch 4mal soviel Aufwand.
Ich hatte mir das eben so gedacht das für eine Fläche überprüft wird, ob sie überhaupt sichtbar ist und dann wird das normale Prozedere für den Strahl durchgeführt, der zB von der Mitte der Fläche zum Betrachter verläuft (bzw genau anders rum). Dadurch geht der Strahl nicht genau durch einen Pixel und sollte deshalb natürlich nicht einfach so mit den anderen Farbwerten kombiniert werden.
Das ganze sollte sowieso nur für kleine/weit entfernte Flächen gemacht werden, weshalb sich der Aufwand hoffentlich in Grenzen hält. Jedenfalls werden die Strahlen da ein bischen zielgerichteter ausgesendet. Aber vielleicht weicht das schon ein bischen zu sehr von der normalen Funktionsweise eines Raytracers ab.
@Schläfer: Wenn du prüfst ob ein Objekt sichtbar ist und dann einen Strahl berechnest der zum Objekt führt, dann must du von Objekt aus rechnen und das ist dann eingendlich rastern wie normales OpenGL es macht und nicht RayTracing, oder doch?
Ja, wahrscheinlich schon.
Ich denke das Verschwinden von Objekten bei Raytracern ist auch ein typisches Problem selbiger. Früher oder später passiert das immer, egal wie fein das Raster ist. Damit kann man leben oder man denkt sich etwas "untypisches" aus.
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.