I've been thinking a lot about what I want to implement for my Graphics Final Project this term. I am going to do an Extended Raytracer I think, it is going to be SO fun to do and there is a lot I think I'd like to accomplish. I've talked to Matt quite a bit already, and I am going to talk to my Prof tomorrow to see if what I want to do is feasible in the amount of time I am going to have to do this.
Most importantly, I'd like to extend the supplied OBJ file importer to allow for Mesh imports from OBJ files into my Raytracer. This will allow me to take some of the cool models I sculpt in Maya, export them to OBJ files and then import them into my Raytracer as part of my final scene. I think that would be AWESOME and probably the thing I want to do the most.
The idea to import arbitrary mesh files adds a lot of other necessities by default it seems. Firstly, I am going to be doing some ridiculous stuff if I have time, like multiple wineglasses reflecting and refracting light through each other. To make this look good, Matt has suggested that Fresnel will be the best choice and not one of the easier or quicker methods. Also I will certainly have to implement Anti-Aliasing early on to make the images look decent as well.
All of this added stuff is going to add a lot of complexity to the scenes and therefore an exponential amount of Ray increases I would imagine. This will cause a truckload of havoc if I don't have a decent set of Raytracer Optimizations. I figure I will need to do OctTrees or something like this. I am also considering the possibility of Multithreading my Raytracer, or Matt suggested a better idea is a Distributed-Multithreaded Raytracer!! Insane. I have taken Networking but not Distributed Computing, so I don't know the scope of doing this. Perhaps it's not too crazy, and Matt seemed to think that there wouldn't be too many problems with Concurrency or Distributed stuff, since after initial setup, all memory should be read-only and I shouldn't need any Mutex methods necessarily. We'll have to see how that goes and if this will really be that easy to Multithread, but this is a very good possibility for making a decently large amount of Optimization for the Raytracer which will therefore enable me to do some wayyyy cooler stuff in my Final Scene. :) Hehe as the coolest guy in the world (John Lasseter, of course) has said, "The art challenges the technology, and the technology inspires the art." I hope to pay heed to John Lasseter's famous quote, and really push myself as far as I can with this Project. I know the time is going to be very limited on this - I only have about 3-4 weeks total for the Extended Raytracer Project, and it will be at the end of term, and I am taking 5 classes this term!! But even so - I plan to work on this a LOT. I reaaaaaaaaaally want to do a good job, and follow in the footsteps of my two roommates Matt and Matt who both did an AWESOME job on their Final Projects last year when they took this course.
I have been reading Matt Pharr's book "Physically Based Rendering" tonight, and it looks really good, and I think it is going to be really useful. I had considered the possibility of writing a Photon Mapper too, cause Caustics would be totally awesome. But there is likely no possible way that I can also fit that into the 3 or 4 week timeframe that I will have to do this. I have to remember as well that with a Final Scene as crazy as the one I am suggesting, I will need several Multiproc machines running 24 hours a day for several days to actually Raytrace this entire image. I will have to use the school machines since I just have 1 Laptop here and that won't nearly be enough Computational Power, even with all the Optimizations I am suggesting for myself. I am also going to talk to my Prof tomorrow about these ideas and see how they sound, and also I want to ask him about Mesh-specific Raytracing Optimizations. I am not sure if OctTrees is a good idea, or if there is something that would make more sense for our particular setup and base implementation files here. This is going to rock SO fierce. I can't wait.
Anyway so that's what I've been thinking about this evening. I started and finished my Logic assignment tonight which I had to get done, and then read and daydreamed about my Raytracer for a while instead of working on other homework. :) Good times.