Hello, I'm Steve, a software engineer and design hobbyist. I graduated from the University of Southern California a few months ago and recently joined the Web team at Evernote. I made this site to post a few personal projects I've done and talk little about them. If you have any questions, feel free to contact me by email at [email protected] or on LinkedIn here.
Here's a clip from a roller coaster simulator that I made with OpenGL. It takes any list of 3D points and builds a track out of a Catmull-Rom spline. The resolution of the track adapts to the curvature of the spline so there are more track segments in round areas and fewer segments in straightaways.
Download full resolution video
In the fall of 2013 I worked with a couple friends on a research project we called PennyRender. We looked at the concurrency problems that would arise in developing a web app for realtime-collaborative 3D mesh modeling. The plan was to see if we could come up with a highly usable system for handling the concurrency and consistency problems, and then design an abstraction layer on which any mesh editing tool could be built. We came up with a system that accomplished this by using optimistic selection locking, and drafted a paper describing the solution. You can read the paper and more about the project here.
We named the project PennyRender because we thought the best business strategy for such a web application would be to let anybody use it for free, and then charge small amounts in an integrated online marketplace for things such as rendering on cloud-GPUs, models built by other users, and advanced tools built by third parties on the abstraction layer. The microtransaction strategy has the advantage of lowering the barriers to entry for individual freelancers and small studios, while allowing those who are well funded to hold large accounts and buy many items.
By the time we wrote the paper, others in the 3D software industry launched impressive products that accomplished everything we were hoping to do (particularly Clara.io and Autodesk 360) so we decided to forgo implementation and instead work on things that are more cutting edge.
I wrote a small ray tracer in C++ that renders simple scenes with Blinn-Phong shading. It supports soft shadows and adaptive multisampling. It renders in three passes - the first takes a sample in the center of every pixel, finding the intersecting surface and light contributions; the second multisamples the pixels that appear to be on an edge of a surface; and the third calculates the shading from all the samples and blends them together. Here's a clip of it working.