Week 1 - Assignment 0

An interest in how things work, how they are put together, and how they're made led me to pursue an undergraduate degree in Industrial Design. While I enjoyed all the aspects of the discipline, namely sketching, fabrication, prototyping etc., it was a fascination with, and passion for, CAD modeling, more than anything, that developed over those years. For those that aren't familiar with the practice, constructing something in a virtual three-dimensional space using a CAD package, such as Solidworks (the software with which I am most proficient) has revolutionized our ability to design and build physical objects. In addition to these advancements in manufacturability, something else caught my eye, so to speak; rendering software and its ability to produce photorealistic images.

Before coming to ITP, using a GUI to apply materials, textures and lighting to a three-dimensional CAD model was the closest I'd ever come to any form of graphics programming. In the same way that my first experience with Solidworks opened up my eyes to a world of new design possibilities, my introduction to programming, albeit through Processing, introduced me to an entire universe of seemingly infinite potential. I very quickly developed a fascination with the aesthetics afforded by programming. Although it is still a valuable tool, I found myself limited by the things that can be done using Processsing. I couldn't quite understand why my processing sketch was struggling to draw a few thousand particles to the screen, when modern video games can display lifelike graphics in what feels like realtime. I wanted to go deeper. I wanted to understand "the how" and "the why".

This led me to begin experimenting with C++ and the Cinder creative coding framework. This foray into lower level programming was informative, but also somewhat frustrating. For the first time, I was presented with a clear picture of just how much I didn't know. This was also my first encounter with GLSL and openGL. It became clear that the secret to improving both my applications' performance and visual qualities was utilizing the GPU. I want to learn to utilize the power of the GPU to create interactive experiences with stunning visuals, all the while focusing on optimization and performance. Better yet, I want to be able to do all of this within a web browser, not just in a native application.

What I'd like to get out of the course is a comprehensive understanding of the graphics pipeline, how it works, and how to best make use of it. I want to master the art of writing shaders, and learn GLSL best practices. I'd also like to explore utilizing the GPU for more than just graphics, for example performing additional physics calculations or simply crunching data. The nuances of getting data onto, and out of, the GPU is still a bit of a mystery to me, I'd like it to become second-nature. Ultimately I'd like to be able to apply my knowledge of GLSL to both native and web applications, while understanding both the differences and similarities of the different platforms. I feel that developing an understanding of the underlying maths and physics principles, especially with respect to lighting, will be key to this understanding.