Experienced mobile developer Jeremy Alessi writes about how a simple side project turned into a surprisingly successful app -- covering both the original idea, the technical implementation, and business model.
I think it's safe to say that every game developer has had a pet project at some point in his or her career. It's nigh impossible to be creative and not want to act on more than one project at a time. Such is the case with c.AR, an app with some game-like traits that combines augmented automobiles with photography.
One of the inspirations for this app is the "photo mode" feature of many big-name racing titles. In Gran Turismo, Forza, and now even Real Racing, players can snap dramatic pictures of their favorite cars and even enhance the virtual photos with a variety of filters and effects. Of course that's not to mention that automobile photography has a dedicated niche outside of the gaming world.
With c.AR, I wanted to bring these two worlds together and then add a bit of social "look at me" flavor. After all, many auto enthusiasts love to snap pictures of their cars but how many get to snap pictures of an exotic, let alone in their own driveway or garage?
With the concept firmly planted I began prototyping c.AR in earnest last year. A variety of technical issues delayed the app. However, things eventually came together and c.AR has since received a warm welcome on the iOS App Store.
As with any pet project, I thought c.AR would be easy. I didn't have big ambitions for it -- I basically just wanted to quickly drop 3D car models onto a camera feed. I had always been interested in augmented reality, and I had a bunch of car models, so it seemed like the perfect quick fit.
After a single night's work I actually did manage to get something up and running but it wasn't pretty.
Of course I was pretty giddy at the prospects. If there's an equivalent to beer goggles for game developers, I certainly had them on that night. The shot above has so many things wrong with it that I cannot begin to count them. To name a few, though, there's no shadow, the real camera and 3D camera's field of views don't match, and the car's paint looks more like Campbell's tomato soup than the high-end gloss you'd expect on an exotic. Clearly, I wasn't going to be making my friends do a double take on Facebook anytime soon.
Of course, like I said, I had my game developer beer goggles on. As such, I went around taking pictures for the next week or so, trying to test the flexibility of the concept. Since this was a pet project, I kept it pretty close to the chest and only shared it with a close friend and my brother. Every now and then I'd email or text them a picture to critique. It was a lot of fun seeing if I could get something believable captured.
By "practicing" with the basic abilities of the prototype (transform and light intensity only) I was able to get better shots. However, the new feeling of getting something up and running eventually wore off and reality finally hit me. These shots, as much fun as they were to try and get, weren't good enough for anything besides my own amusement as a developer. I knew that with the limited resources I had for this project that the shots would never look totally real so I settled on "real enough to be entertaining."
To meet even that expectation, though, would still require a few tricks. I began by adding a shadow, which was the most obvious element missing from the earlier shots. Of course, the shadow made a monumental difference -- such is life at the shallow end of the Uncanny Valley, I suppose.
From there I simply began running down the list of obvious enhancements. The next element was a spherical reflection map for the paint. Next came transparent windows. With each 3D graphics feature, things got better and better. I just kept picking from the smorgasbord until I hit a wall.
Things were moving along, but there was something I just couldn't shake with all the shots. I began searching the web for any shots with similar angles to those in my growing library.
That's when it hit me! Never mind the ugly textures or jagged geometry. In the bumper shot I was standing roughly 2 to 4 feet (0.6 to 1.2 meters) from the front of the car and slightly to the passenger side, trying to get one of those dramatic shots. The proportions, of course, are completely out of control. My 3D game camera was not synchronized with the iPhone's camera.
All the shadows, reflection maps, and transparent windows in the world could not have made up for the false field of view problem. The iPhone camera has a field of view of 37.5 degrees. By setting the 3D renderer's camera to the same amount things started looking rather decent.
With a ground shadow, reflection mapping, some glass transparency, and the proper 3D camera field of view, things were fast approaching "real enough to be entertaining". The biggest problem at that point was aliasing. The jagged lines at the edges of the 3D model were just jumping off the screen.