GPU-Raytracing - wie vorgehen?



  • Hallo,

    da ich den anderen Thread bezüglich Raytracing gesehen habe, wollte ich auch wieder mal etwas in Bezug auf Raytracing machen. Ich will einen GPU-basierten real-time Raytracer schreiben. Meine Frage bloss: wie vorgehen? Soll ich OpenGL nutzen und den Raytracer komplett in den Fragment Shader schreiben? Oder soll ich einfach OpenCL / Boost.Compute nutzen? Eigentlich will ich ihn komplett in C oder C++ schreiben, da ich z.B. GLSL nicht mag. Aber wenn etwas deutlich mehr Performance erzielen würde wie die Alternativen, dann sage ich sicherlich nicht nein.

    LG



  • Ich würde die Optix von NVidia empfehlen, da das extra aufs GPU-Raytracen zugeschnitten ist.

    Die zweite Wahl wäre du schreibst es in CUDA.

    Hier ist ein Beispiel für ein Pathtracer

    http://raytracey.blogspot.de/2015/10/gpu-path-tracing-tutorial-1-drawing.html


  • Mod

    ja, XMAMan laesst mich auf dauernt drueber nachdenken, ob ich nicht einen schreiben sollte.

    An sich haengt es aber auch davon ab wieviel zeit du hast und was du erreichen moechtest. fuer procedurale scenen (kugel, box, plane etc.) reicht sicherlich triviales glsl (kannst sogar webgl tracer ergooglen mit source), bzw shadertoy.

    wenn du eine nvidia GPU hast, bietet sich Cuda an, das ist mit c++ relativ gut integriert. Du schreibst fast wie gewohnt code und fuehrst teile davon auf GPU aus.

    Intel hat ein nettes OpenCL sdk, falls du eher c magst: https://software.intel.com/en-us/intel-opencl

    wenn du es selbst schreiben willst, kannst du mit SFML in ein paar zeilen code auch ein fenster oeffnen, ein sprite mit deinem raytracing shader zeichnen.



  • Hi,

    ich habe vor 3 Jahren meine Masterarbeit über einen GPU-Echtzeit-Pathtracer geschrieben (kann ich gerne schicken bei Interesse).
    Und daraufhin selber einen GPU-RT-Raytracer angefangen zu bauen, Basis ist ja weitestgehend gleich.

    Ich benutze Qt (als Grundgerüst) und OpenCL für den GPU-Teil. Die fertigen Bilddaten schreibe ich mit OpenCL direkt in eine OpenGL-Textur, welche dann gerendert wird. Klappt recht gut, aber OpenCL ist natürlich nicht ganz so schön zu handhaben. Wenn man eine AMD-Karte hat empfiehlt sich auch OpenCl, da diese darin schneller sind als etwa gleichteure Karten mit NVidia-Chip.
    Fragment-Shader würde ich nicht unbedingt empfehlen, da man mit OpenCL doch mehr Möglichkeiten hat, bspw. für Datenstrukturen und Speicher-Verwendung, außerdem kann man ab dem kommenden OpenCL 2.2 auch Klassen in C++-ähnlicher Struktur verwenden. Ist aber erstmal aufwendiger zu lernen.


  • Mod

    Was schneller ist, ist sehr Fall abhaengig.

    Du kannst ja deiner Masterarbeit verlinken, sicher nicht uninteresant die zu lesen, gerade fuer leute die auch einsteigen 😉





  • Danke Powerpaule fürs Teilen, gute Arbeit! 🙂 👍


Log in to reply