Monday, March 24, 2014

Finally starting

So when I started this blog a few years ago, I was very gun-ho about making a render engine. The only problem was that I had no idea what I was doing. I quickly realized that I got in way over my head with my skill set at the time. But after taking two computer graphics courses, an algorithms course, working with several 3D packages, talking with professors and people in the industry, and doing a lot of reading on Wikipedia....I'm back.

And I know what I'm doing now. And it's gonna be good. (and I'm doing this for a class project so I have more time and motivation to do it.)

So I thought I'd give an overview of my plans for the engine. I'm open to tips and suggestions; I know for a fact that there are people who are smarter than I am.

I've got at least two phases in mind for the foreseeable future of this project.
Phase 1: A ray tracer that will fulfill the requirements of the class project but leave tons of room for building a pretty good render engine.
Phase 2: A unidirectional path tracer that simulates bounce lighting or 'Global Illumination' as some call it. I'll try and leave room for a modern shader language as well.

In order to keep myself motivated, I'll post a list of the features I'd like to implement. This will also serve to remind me what I hope to achieve. So here goes. My goals for phase 1 are as follows:

  • Recursive ray tracing
  • Shapes:
    • Sphere
    • Plane
    • Triangle (and triangle meshes)
  • Customizable shader model
    • Diffuse
    • Specular
    • Reflection
    • (Maybe) Refraction
  • Two anti-aliasing modes using super sampling:
    • uniform number of AA samples per pixel
    • Variable number of samples: more for edges and fewer for smooth areas
  • Two sample patterns:
    • Grid pattern
    • Jitter pattern
  • Box filter to average the samples (with room for other filters)
  • Point light (spot and area lights will have to wait until phase 2)
  • Camera movement controls
  • Render to OpenGL window
The project is due April 12th, so I've got some work to do. I've already created all of the header files for the classes I'll need. I might end up posting a UML diagram of the project. It never hurts to be organized.

Stay tuned!