Cinematic Camera System

Summer 2016 (8 Weeks)

CinematicCamera

For my first Directed Focus Study (DFS) course, I chose to develop a Cinematic Camera System in my own engine. This would involve playing a “cutscene” and having the camera orientation and location be controlled by the system, while also preventing the player’s input to influence the cutscene.

CinematicCamera

The final project has cutscenes loaded in via XML, with a debug mode to display the camera’s path and orientation at each keyframe. Orientation was calculated via Slerping of Quaternion angles, while the positions were calculated with a combination of Catmull-Rom (to get the entry and exit velocities of a keyframe) and Hermite Splines (to smoothly interpolate between positions based on how far we are into a keyframe). FOV can be set via XML, which the system will Lerp to for a smooth transition. Lastly, users can set a Look-At target position via XML, and can toggle this on and off at will.

One of the sample Cutscene XML files.
One of the sample Cutscene XML files.

I chose this project for my DFS because I wanted to strengthen my matrix math skill and to learn more about how Splines work. Splines seemed extremely helpful and interesting, but I knew that if I did not implement them I would not fully grasp how they work.

My biggest take away from the project was that there is no “one way” of doing Quaternions or Matrixes. Every engine’s basis is different, and +90 degrees on one axis can mean two different directions. However, if you know enough about how an mathematical algorithm works, you can reverse engineer it to make it work with the engine you are developing in. Due to the fact that my basis was so different from the sources I referred to, I gained a greater knowledge of the algorithms I implemented and now feel more confident in my ability to use them again in the future.

If I had more time, I would add a Edit Mode to my system. This would allow the user to open a cutscene and press a button to place a keyframe using the player’s current position and orientation.

Download Here
Download Here