Saturday, August 30, 2008

New Raytracer ideas

(contd from the previous post)...

Onwards and upwards to the next thing on the list. On my bike home from work today I decided (somewhere in the Presidio amongst the eucalyptus trees) that I should start working on my Waterloo Raytracer again. This is obviously a bit of a pipe dream since I've wanted to do that for ages but never had the time (or made the time) for it. I think it would be great to do it. Who knows when this will start, but I want to add it to the things I want to revive at some point. Maybe this will wait until my sweeeeet new Desktop computer in January, or maybe sooner... depends on how much time I have for it. :) I was thinking about some specific features I'd want to add:

General Infrastructure
  • Bug tracking/reporting system - maybe linked by RSS feed to my blog or Raytracer website
  • Web Forum for comments from the public/friends/visitors
  • New revision control system

Specific feature ideas (from my bike ride home) :)
  • Port to Windows
    -This involves getting LUA and PNG libraries to compile on Windows
    -Would be cool to learn some of this porting stuff and what's required
    -Considerations: Visual Studio 2008? Eclipse with cygwin and gcc?
  • Port to Mac
    -On that note, why not?!
    -This would be a freakin' GREAT project if I get a MacBook Pro some day
    -Talk about a perfect idea for REALLY learning how to program on a Mac
    -Considerations: Re-writing Raytracer in Objective C is too much work, would just want to re-use C++ code and learn Mac architecture, get some experience using XCode
  • Windows GUI
    -Browse button to load file
    -Add time estimate/percentage bar.
    -Long shot would be to add image as it is being created and have it draw onto the screen as it is going. (Actually, that might not be that hard)
  • Mac GUI
    -Again, a perfect opportunity to learn Mac and Cocoa and XCode
  • Convert PNG Library to something else
    -Haven't thought about this much
    -Ideally would want to convert Waterloo-supplied libraries to my own code so that I can own the whole thing
    -PNG actually sortof is ideal, maybe JPG or TIFF instead?
    -Could support JPG or TIFF or RAW save formats or something, but do it as a conversion at the end using a command-line converter inside of the Raytracer
  • Convert LUA interpreted language to Python
    -This is probably a lot of work
    -This is a core part of the system
    -This is a major part of the Waterloo-supplied code that ideally I'd like to remove and re-write
    -Python is much more extensible/powerful than LUA
    -Python opens up a wealth of insanely sweet possibilities, like also importing the Maya Python standalone libraries, and building and .ma/.mb mesh/normals/UV coordinate reader into my Raytracer!!!!!!
  • Modules
    -Right now it's just about 20 .h/.cpp files in one directory. I should probably make modules instead that would turn into .dso files for Linux and .dll files for Windows, then link those together. It might be a bit small for that now, but if this gets bigger, I'll be happy that I made it organized and modular when it wasn't a total mess and insanely inter-dependant.
  • Open Source it?
    -This might be a problem with ANY Waterloo-supplied code still in there
    -I need to be careful that other people taking that class at Waterloo could download the code and cheat on assignments, so I don't want to cause that.
  • More optimizations
    -Actually I don't need a LOT of optimization, I spent ages doing this for the course
    -Maybe fix hypertreading thing to take a number of processes and generalize this rather than hard-coding it
  • Bug fixes
    -There was an error in my loop which caused the last column of pixels to overlap on the first frame of pixels, need to fix that
    -General cleanup and re-structuring might be a good idea
So most of that stuff is pretty infrastructure-y, but a few more random actual Graphics code things that might be cool... basically stuff from the Jensen and Pharr books that I never had time to write during the course:
  • Photon Mapping
  • Caustics
  • Global Illumination
  • Subsurface Scattering
  • Networked/Distributed rendering (only have 1 machine in my house, so maybe not) :)
  • More materials, better surface representation, learn more about reflection functions
All of this stuff generally is interesting and could lead me to newer ideas and interests within Computer Graphics, so I think it's totally worth a shot!! I guess this is a pretty long-term idea, and it would take a while to do even a subset of this stuff since I have so much else going on and it's also probably not healthy to program for 10 hours at work, come home, eat dinner, and program for 8 hours at home. :) So I might do some of this stuff eventually, this is sortof just an outline of general ideas, and we'll see where we go from here.

Whew, ok that's enough for now. I've been going to bed at like 3 or 4am for the past 2 weeks, there is way too much going on lately and a rediculous amount of stuff on my mind and things I want to do. Crazy! The election is awesome, watching all the speeches and lots of commentary on CNN and John Stewart and Colbert and it's all exciting.

Busy day tomorrow, I'm going to Nick's wedding so I gotta get some sleep so I have lots of energy to help Nick set up tomorrow.

No comments: