What I Accomplished
This website is the final documentation of a 3D Rendering engine written entirely in Python. The rendering engine is NOT for practical use, and was created as an exercise for the programmer. The rendering engine is capable of drawing objects of any complexity, and with nearly as many different lighting properties as any high-end video game available today. The more complicated features of a rendering engine like lighting refractions, shadows, 3D lighting effects, etc. were also far beyond the scope of this project.
The rendering engine is incredibly slow, taking minutes for a single frame. For this reason, the rendering engine will not be pursued as any open-source project, or for any other reason.
My hope is that by reading though this site, people might be inspired to tackle an interesting problem, even if it has already been solved better, for the fun of self-education.
Goals Of The Project
The idea for this project was generated while I was searching for a topic of my Olin Self Study (OSS), a required inependant study project at Olin College. This project is intended to be self-directed and technically rigorous. Thus, as I began to refine my topic, I developed a set of goals that led me to this result.
- Learn Python: I had never used python seriously before, and this seemed like a perfect opportunity.
- Keep the project exciting: Don't get so bogged down in technical details that I stop making progress.
- Make the project LOOK exciting: While the techniques used in my source code make me happy, it can be more important that others are able to see progress, even if they are not able to follow the details.
- Solve lots of difficult problems in rendering: Learn about all the problems that have made rendering a necessity in modern computing.
- Solve a problem in a new way: Python allows me to try new and unusual things, so I should take advantage of that.
The most important part of this project was the creation of visible results as I added features and capabilities to my rendering engine. Select pictures were posted on facebook as I went which allowed me to stay excited about the project and accountable to finish. I also created a list of features I wanted to implement, most of which I accomplished by the end.
- Simple flat shading
- Common Gouraud shading
- Advanced Phong shading
- Specular lighting techniques
- Phong shading
- Blinn-Phong Shading
- Ambient Cube lighting
- Texture mapping
- Procedural texture mapping
- Reflection Mapping
- Refraction Mapping
- High Dynamic Range
- Improved Phong vertex-normal calculation
- Surrealistic shader values
I recently learned about a new thing called Parallax mapping, and it sounds soooo coool. I might do this later.