Sad Dad Cam
One camera to rule them all
Introduction
In my previous occupation, the camera was always at the center of attention. Whether it was a multi-camera studio production or a drama series, everything on set revolved around them. I believe this has given me a unique appreciation for the possibilities a good camera affords a game. I have been in charge of creating the camera for several of our projects, and in doing so, I have picked up quite a bit about how to handle them. For this reason, I decided that my specialization would be to create a camera tool in our own engine. A tool that allows easy configuration of the player camera and enables developers to set up cinematic camera movements both during gameplay and in cutscenes
The camera has always been a fundamental part of video games. It is a technical necessity if we want to visualize the current state of the game, and it is also one of the greatest storytelling tools ever created. Early on, game developers worked around technical limitations to deliver beautiful visuals and experiences in very inventive ways, but the camera was not an active part of the action. Hideo Kojima’s “Snatcher” (1988) was very cinematic for its time, but reads more like a comic book today.
In modern AAA games, the camera flows seamlessly in and out of cutscenes, never taking you out of the action and allowing the developers to focus and pace the storytelling in a way that rivals movies.
”God of War” (2018) is essentialy a one-take, meaning that the camera never makes any cuts. It smoothly transitions from gameplay to cutscene without any visible change. The camera work in games sure have come a long way since Pacman.
Video games are still a young art form, and even though they have learned a lot about visual storytelling from movies, I believe there is much more to explore, especially in ways that make them unique. This is the main reason I chose this specialization; I wanted to make a tool that would enable me to easily experiment with this in future projects, and I think I’m well on my way.
The idea behind the tool is that there is only one camera, but there can be any number of viewfinders. The viewfinders only hold simple data, such as field of view, offset from the object they are attached to, or what object they should focus on. When the game camera activates a viewfinder, it simply adopts those settings. The camera can either cut directly to the new viewfinder or transition to it smoothly.
You can also create sequences (camera animations) from the viewfinders, and these are stored in the game camera to be activated on certain commands or triggers. Just place viewfinders at the start and end points, and you can easily make the camera move between them. You can also add keyframes if you want to change certain settings at specific points during the animation.
The Tool
Key Features
Takeaways
During our time at TGA, our educators have often told us that programming is iterative; it’s not often you get it right the first time, so you might as well just get it out of the way so that you can start improving on it. The truth of these words have really sunk in while working on this project. I feel that I have accomplished a decent first iteration of the tool that I wanted to build with almost all the features I had planned for, but due to some early hiccups in our engine which delayed the work by about a week, the time I had set aside for polishing at the end instead had to act as an emergency buffer. This also meant that some features were left on the cutting room floor, but it’s all stuff I already have a pretty solid grasp on, and after a short break from everything camera-related, I am determined to come back and fix them.
I’m really happy with how the Game Camera and the Viewfinders work together. It’s easy to try out different settings to find the right camera for any situation, and having them all easily accessible in one place is really neat. I also had a lot of fun making the different presets for first- and third-person cameras, and I already have a bunch more I want to build. When I go back to make v2.0, there isn’t much here I want to change except to move some data around that unfortunately is duplicated due to an early design mistake, but I already have a plan for that
Switching between viewfinders
I’m also looking forward to putting some more time into the sequences. It’s a decent enough start, but this is the area where I could have used the extra time I had planned for. I want to add Bezier curves to allow the user to create more interesting movement, and the event system is still decoupled from the camera. Both features are in the engine, but I haven’t had time to hook them up to the tool. Once they are integrated, however, there’s not much else I can think of adding at the moment.
A dolly zoom created using the sequence system
I've really familiarized myself with Dear ImGui during this project. It really is a wonderful framework once you get to know it, and the ease with which you can customize just about anything is truly amazing.
Since it's so easy to tweak, it enables you to make your tools as user-friendly as possible, but creating a tool in isolation is challenging, so I often involved my classmates to try it out and give me feedback. This was immensely helpful in making the tool feel intuitive and shining a light on some of my design blind spots.
As more features are implemented, the structure of the tool might have to change, but I now feel completely comfortable with ImGui and look forward to the challenges that may arise
My specialization has really deepened my interest in both how the camera can be used to elevate the gaming experience and how tools programming works as a bridge between programmers and other parts of the team. I still think that the camera is underused in many games, and I hope to be a contributing part of exploring its future