Together with some very talented programmers, I designed a virtual / procedural camera system called Cinebot. It was in development for about 5 years and it’s been added to the amazing game engine, Frostbite. The goal was simple, but the execution was deliciously challenging: Make video games feel more like a movie. Make video games feel cinematic.
What’s a virtual camera system? A virtual camera system is like a robot director of photography. In film, everything is directed and crafted. Stand over there, walk in that direction, we will put the camera here and use this lens and transport mechanism and compose it like this. Boom. Respectfully, it’s relatively easy because you have control over everything. Also, if something goes wrong, you usually get to try it again. With video games, the situation is very different. You want to make the game look as cinematic as possible but there’s this additional extra dimension: The user has control! They can run and jump and drive and effectively do an infinite amount of things. How the heck do you shoot that? Especially when you’re not there to do it, you need to program something to shoot it real-time while they’re playing!
What I did, was design a cinematography robot which lives inside the video game and can be instructed to do certain things, but it also figures out a lot of things for itself. Cine-bot.
There were numerous fascinating challenges. How do you make a robot compose pleasing shots? How does a computer ‘see’? How do you emulate the mass of a real camera? How does a lens alter what’s being shot and how do you make a computer render approximate that? Probably the biggest challenge was how to make the game feel cinematic yet not get in the way of good gameplay.
Here’s a debug image showing how the ‘freelook’ cameras can move around a character by user control. Limits can be set which make sense for gameplay while still having decent composition. All camera parameters can be crafted by the game DOP, including how the math blends, camera ‘mass’, overshoot, rotation acceleration, etc. All the user should feel is “Hey, this is a really cool freelook camera, it feels… right.”