simple RayTracer Part 1

5. Mai 2009 – 14:34

Nach längerer Pause hier möchte ich heute meinen Raytracer, den ich in der letzten Zeit erarbeitet habe, vorstellen und zum Download anbieten. Zunächst ersteinmal ein paar Bilder welche den aktuellen Stand aufzeigen. Eine Beschreibung und die entsprechenden Berechnungszeiten sind jeweils im Bildbeschreibungstext zu finden. Dazu muss man aber sagen das weder der RayTracer ansich optimiert wurde (z.B. über ein kd-Tree), noch der Sourcecode drumherum optimiert ist.

Ambient+Diffuse-Specular+Shadow; Athlon 64 X2 Dual 6000+; 33 Sekunden bei 1000x1000 simple GUI Ambient+Diffuse-Specular+Shadow+Perfect Reflection; Athlon 64 X2 Dual 6000+; 56 Sekunden bei 1000x1000

Der RayTracer ist komplett in C++ und die entsprechende GUI mit VC++ .Net auf WinForms Basis geschrieben. Im Moment ist das Phong-Beleuchtungsmodell implementiert und als kleinen Bonus kann man noch, zumindest für die Ebenen, Texturen laden, welche die Diffusefarbe ersetzen. Nun folgt noch eine kleine Bildergalerie welche Schritt für Schritt zeigt wie man von einfachem Ambient bis zur PerfectReflection mit Schatten kommt. Die einzelnen Schritte lassen mit frei wählbaren Einstellungen auch in der GUI simulieren.

Ambient Ambient+Diffuse (one light source) only specular Ambient+Diffuse+Shadow (three light sources) Ambient+Diffuse+Specular+Shadow (one light source) Ambient+Diffuse+Specular+Shadow (three light sources) Ambient+Diffuse+Specular+Shadow+Perfect Reflection same aas image before; 9 sphere with a closer floor same as before but with texture on floor

Hier nun der Download. Zum einen ein reiner Release-Build und weiterhin der komplette Source(VS bzw. VC++Express Solution). Das .NET 2.0 Framework wird vorrausgesetzt.

Release (.rar, 187KB)

sGUIRayTracer-Solution (.rar, 258KB)

Da mir die Arbeit an diesem Raytracer sehr viel Spass gemacht hat und man viel dabei lernen konnte werde ich wohl noch ein wenig daran weiterarbeiten. Hier mal eine Liste was man überhaupt noch in einem Raytracer implementieren kann. Was ich davon noch wählen werde steht noch nicht fest. Es hat alles seinen Reiz und im Moment tendiere ich zu Normalmapping direkt über eine Map und/oder Bumpmapping über PerlinNoise.

  • kd-Tree oder spatial subdivision zur Geschwindigkeitsoptimierung
  • depth of Field
  • isosurfaces (blobs)
  • fresnel und Transparenz (refraction)
  • Bump/Displacement mapping
  • Normalmapping
  • fog
  • Soft-Shadows
  • Photon maps (global illumination)
  • weitere Geometrieobjekte (Cylinder, Box etc.)
  • Antialiasing
  • Photo exposure
Interessante Links/Quellen

Wikieintrag zu RayTracing

Mandelbrot’s RayTracing explanations

Tutorialreihe auf Flipcode (sehr zu empfehlen!)

Tutorialreihe auf Codermind

Tutorialreihe der DGL-Wiki

Tutorialreihe von Forrest Briggs

Wie immer keine Garantie auf Richtigkeit oder Vollständigkeit!

  1. 1 Trackback(s)

  2. Jun 23, 2009: Development-Blog von Florian Oeser » Blog Archive » simple RayTracer Part 2 (Refraction+NormalMapping)

Post a Comment