(überflüssige) Demo



  • Das mit dem Source wird noch etwas dauern, da ich erstmal noch einen Benchmark einbauen möchte. Ohne den ist's IMHO sinnlos euch zum Optimieren drauf anzusetzen. 😉



  • Etwas Optimierung könnte wirklich nicht schaden. Ich hab mich zwar noch nie mit Raytracing beschäftigt und hab nicht wirklich eine Vorstellung, wie aufwändig das ist, aber ich denke mit einer Radeon 9700 Pro und einem Athlon XP 2200+ und 512 Mb DDR-Ram sollte es kein Problem sein zumindest mid.bat flüssig anzuschaun... Aber sieht verdammt echt aus, muss ich sagen.



  • Deine tolle Grafikkarte bringt Dir da nichts, weil Ray-Tracing vollständig im Hauptprozessor abläuft. Die Grafikkarte wird nur gebraucht, um das errechnete Bild in Form einer Textur auf den Bildschirm zu bringen.
    Ich habe aber mal was von RTRT-Hardware gelesen (RTRT: Realtime Raytracing), die mal geplant war... vielleicht könnte man sowas auch mit Pixel-Shadern machen!



  • Darf man denn überhaupt nicht angeben! 😃



  • Sieht echt recht nett aus, wenn Du die Sourcen ein bisschen überarbeitet hast würden sie mich sehr interessieren! 🙂
    (Auch weil ich das lieber unter Linux als unter Windows laufen lassen würde...)



  • Hi !

    Die Demo sieht echt fett aus, gute Arbeit TGGC 🙂

    TomasRiker :

    vielleicht könnte man sowas auch mit Pixel-Shadern machen!
    IMO geht das nicht, da du bei PS doch nur 16 Register zur Verfügung hast. Da kann man nicht viel raytracen.



  • In DirectX 9 sind es einige mehr und es werden sogar schon Loops und Ifs (Konditionale Befehle) unterstützt. Zumindest ein paar Kugeln sollten sich damit rendern lassen, das wäre mal eine interessante Aufgabe 🙂
    Vor allem mit der neuen High Level Shader Language würde das sicherlich Spaß machen. Man könnte für texturierte Objekte auch die gewöhnlichen Direct3D-Texturen verwenden, mit dem Befehl tex2D kann man bestimmte Texel aus einer Textur samplen.

    [ Dieser Beitrag wurde am 29.12.2002 um 20:25 Uhr von TomasRiker editiert. ]



  • überflüssig ?
    Also bei mir ruckelt das Teil extrem 😉

    Die Schatten sehen aber toll aus !



  • Etwas Optimierung könnte wirklich nicht schaden.

    Naja, am Speed der aktuellen Szenen wird man nicht viel drehen können. Aber bei höheren Primitivzahlen könnten man sicher was rausholen.

    Darf man denn überhaupt nicht angeben! 😃

    Dafür solltest du die Version mit dem Benchmark abwarten 😉

    Auch weil ich das lieber unter Linux als unter Windows laufen lassen würde

    Bis auf WinMain und OpenGL (De)Init sollte das eigentlich problemlos gehen.

    Sieht echt recht nett aus

    Die Demo sieht echt fett aus

    Was hattet ihr denn erwartet 😉

    P.S.: Einbau des Benchmarks ist schon angelaufen, zum Dokumentieren hab ich allerdings nicht so die Zeit.

    Bye, TGGC



  • Ich habs immer gesagt. Echte Programmierer dokumentieren ihren Code nicht 😃



  • @Gombolo
    Echte Programmierer werden auch nicht fürs dokumentieren so gut bezahlt. 😃



  • HI 🙂
    Sieht richtig richtig gut aus ^^. Beeil dich mal mitm Source .) ODer erzähl mal bissl genauer, wie man das macht. Ich versuch mich schon selbst dran. Nicht um was besseres als du zu schreiben (geht auch gar nicht .) Sondern nur einfach zum lernen, weil ich noch nie mit raytracing angefangen hab :). Der Source muss wirklich nicht dokumentiert werden (solange er schön übersichtlich ist 🙂 )
    k
    cu

    [ Dieser Beitrag wurde am 30.12.2002 um 01:56 Uhr von Squolly editiert. ]



  • Echte Programmierer werden auch nicht fürs dokumentieren so gut bezahlt.

    Doch, eigentlich schon, Dokumentieren des Quellcodes gehört ja zum Implementieren. Nur den Vorgang bei dem diese Demo entstand würd ich nicht "programmieren" nennen.

    Nicht um was besseres als du zu schreiben (geht auch gar nicht .)

    LOL

    ODer erzähl mal bissl genauer, wie man das macht.

    Weiter oben hatte ich es ja bereits beschrieben, aber das ist ja nicht das "normale" Raytracing. Das funktioniert ungefähr so:
    Du legst einen Kamerapunkt und eine Zeichenfläche (z.b. Viereck, kann aber auch gewölbt sein u.ä.) im 3D Raum fest. Dann teilst du die Zeichenfläche in entsprechend viele Pixel ein, die das Bild am Ende haben soll. Dann werden von dem Kamerapunkt zu jeden Pixel Strahlen "geschossen", entweder nur einer durch die Mitte oder auch mehrere (Supersampling?!). Dann wird jeder der Strahlen getestet ob er ein Objekt im 3D-Raum schneidet. Die Schnittpunkte mit Kugeln oder Ebenen lassen sich ja mathematisch simpel berechnen. Dann suchst du am Schnittpunkt die Normale und suchst alle Lichter die vom Schnittpunkt aus sichtbar sind. Da die Lichter i.A. nur Punktlichter sind, ist das auch simpel (schneidet die Verbindungsgerade ein anderes Objekt?). Jetzt wird aus Entfernung, Einfallswinkel und der Materialbeschaffenheit der Einfluss aller Lichter berechnet. Dabei gilt je stärker der Einfallswinkel von der Normalen abweicht, um so geringer der Einfluss des Lichts. Dann werden die Lichstärken addiert und mit der Materialfarbe multipliziert was die Farbe des Pixel bestimmt. Werden mehrere Strahlen pro Pixel gesendet, wird der Durchschnitt genommen. Die ganze Sache kann man dann noch beliebig erweitern, z.b. Oberflächen, die den Strahl reflektieren oder brechen, andere 3D-Objekte wie Zylinder, Kegel oder Hyperbolide, Lichter, die nur in bestimmte Richtungen scheinen und Materialien mit 3D-Texturen...

    Grundsätzlich ist so ein Teil besser geeignet für Realtime, da für jeden Pixel zunächst mal nur ein Strahl pro Pixel benötigt wird.

    Vielleicht findet sich ja mal jemand, der ein Frontend zu dem Teil bastelt, mit dem man Kreise und Linien platzieren kann. Wenn man dann noch Schriftzüge mit TTF machen könnte, wäre das ein cooles Tool um sich Logos zu erstellen ;).

    Bye, TGGC



  • Original erstellt von TGGC:
    Bis auf WinMain und OpenGL (De)Init sollte das eigentlich problemlos gehen.

    Wobei Du das ja wohl auch relativ einfach auf GLUT umstellen könntest, oder?

    PS: Ich hab mir die Demo noch mal auf "Ultra" angesehen, das is zwar reichlich lahm auf meinem 650er-Athlon, sieht aber echt Spitze aus - Kompliment! 🙂



  • So jetzt hab ich den Benchmark eingebaut und die Sources hochgeladen:

    http://www.fh-merseburg.de/~roesch/trash/2Dlogo_wp.jpg

    Dazu habe ich nicht nur die Auflösung erhöht, sondern auch die Strahlenzahl. Ihr könnt das nachvollziehen, wenn ihr in Render.h die NrOfSectors auf 256 und ColorShift auf 8 setzt. Die Demo läuft dann aber nicht mehr ganz so flüssig ;).

    Den Benchmark kann man per "-bench" starten (alles in der readme erklärt). Ich nehme mal an, das man evtl. schon mit einem anderen Compiler die Performance verbessern kann. Falls noch Fragen zum Code sind, nur her damit. Wer (nur zum Angeben) seine Benchmark-Werte zeigen will, wäre ich allerdings, dankbar wenn das nicht unbedingt in diesem Thread wäre, TIA!

    Bye, TGGC



  • Wow, Dein Wallpaper sieht ja extrem gut aus! 😮
    Vielleicht könnte jemand mit besonders schnellem Rechner davon ja auch eine 1600x1200 (oder zumindestens 1280x1024) Variante rendern? 🙄 *umschau*
    Dass die Sourcen auch dabei sind ist ebenfalls sehr cool!



  • Also ich verzichte erstmal, diese Version hat auf meinem P200 IIRC schon über 30min gebraucht. (also los, optimiert mal! 😉 )

    Bye, TGGC



  • Wenn ich ein bisschen Zeit habe konvertiere ich das zu Linux, dann kann ich meinen Rechner einfach ein paar Tage rendern lassen ohne Probleme mit Abstürzen etc. zu bekommen, vor allem kann ich da auch bei 99% CPU-Auslastung noch normal arbeiten. 🙂



  • Bist du jetzt schon da dran, oder was?



  • omg das ruckelt ja bös 😞
    Aber es sieht schon gut aus....
    Leider hab ich keine Ahnung von OpenGL sonst würd ich mich damit mal gerne auseinandersetzen...


Anmelden zum Antworten