Milo Ray Tracer is a Windows application I developed for creating photo-realistic images. The application uses advanced algorithms (code) to simulate real life effects like reflections, refractions, shadows and caustics (light behavior through transparent objects). Although C++ is the mainstream programming language for commercial and non-commercial ray tracers, Milo Ray Tracer was written and tested in several versions of Visual Basic, including the latest version, VB 2008. The pictures
on this page were all created in Milo Ray Tracer.
Setting the stage...
A few years ago, a friend of mine asked me to write a program to display 3D surfaces. A few weeks later I was showing him my Surface Generator
application. The application performed as expected, but it was far from being complete. With time, Surface Generator evolved into the 3D Graphics
application, with features like 3D curve plotting, 3D object creation, texture and bump mapping, and Gouraud and Phong shading. 3D Graphics was originally written in Quick Basic and ported to Windows with Visual Basic, which I was also using to develop the HVAC Designer
. With the advent of the .Net framework, I rewrote an improved 3D Graphics with VB 2005.
Ready to trace...
With enough graphics programming experience in hand, I decided to write a ray tracing application. I started my research on the internet and found enough information to understand the basics and start writing a simple ray tracer. My first picture of reflecting spheres showed the reflections on the wrong side of the spheres! Refusing to give up, I acquired several good books to improve my understanding of the subject and write better ray tracing code. With time and perseverance, I developed the Milo Ray Tracer application (below), with 17,000+ lines of code and many advanced features including distributed ray tracing to simulate glossy reflections, translucent transparencies, soft shadows and depth of field, and new photon mapping algorithms to simulate reflective and refractive caustics.
below are my creations. I don't mind anyone using them for their personal enjoyment, wall paper, screen saver, etc. If you intend to use them for profit, I would prefer that you contact me first.
The objects below were generated with equations. These objects render
quickly, but equations can model a limited number of real-life objects.
The objects below were created with triangular faces (polygons). These objects
take longer to render, but polygons can model all types of real-life objects.
Photon Mapping improves realism by allowing my ray tracer to render
diffuse illumination and reflective and refractive caustics.
Fresnel equations control reflections and refractions as a function of viewing angle.
This allows my ray tracer to render more realistic dielectrics like glass and water.
Global illumination simulates light interreflection and color bleeding between objects. These effects
can not be rendered with basic ray tracing alone. My ray tracer renders global illumintaion
by applying photon mapping, final gathering, irradiance caching and ray tracing.
Left pictures: basic ray tracing. Right pictures: ray tracing with golbal illumination