Ray Tracing
The ray tracer I implemented could handle sphere, lens, ellipsoid, box and polygon based objects. To speed up the rendering the program scales to the amount of processors in the computer running it. The ray tracing is recursive to add global illumination and has soft shadow.
Spatial Partitioning
I have implemented 3 types of spatial partitioning. The First one implimented was a BSP (Binary Space Partitioning) Tree that was then used to render a scene back to front so that no depth buffer was required. The second technique implimented was a KD-Tree which was then used to accelerate ray tracing. Using the KD-tree on a 800x800 resolution image the ray vs. triangle test count was brought down by over 60% from 24,560,000 tests to 9,213,096. The final partitioning scheme was a bounding hiearchy that was used to speed up view frustum culling.
Occlusion Culling
To test for object occlusion I used the Hierarchical Occlusion Map and Depth Estimation Buffer as described in Effective Occlusion Culling for the Interactive Display of Arbitrary Models(Hansong Zhang). The basis of this method is to find the objects in the scene that have a good chance of occluding objects and rendering them to two maps, the HOM which acts as a boolean map of where on the screen occluders are present and the DEB which marks the maximum depth of the occluders screen space bounding box. Then to test each object a check is run checking if the object shares the same area of the screen as an occluder and if it does whether it would be behind the occluder.
Software Rasterizer
I wrote the software rasterizer during my sophomore year. We were given a small windowing framework to start with and some binary libraries that implemented functions of the rasterizer and through the duration of the class each binary was removed and replaced by my own code.
Shadow Maps and Projective Texturing
I wrote a shadow mapping and projective texturing shader Using the standard two pass algorithm of first rendering the depth from the light into a texture and then when rendering the final lighting pass checking the depth of the fragments depth from the light to determining if it is in shadow.
Tanks!
Tanks! is a networked version of the classic Tanks game from Atari. To maintain the state of the game on multiple computers I implemented a peer to peer networking system using a custom reliable UDP protocol that guaranteed order of delivery and maintained a connection between computers.
|