Shutter Seeker

Unreal Engine 5.2, C++, OpenCV   May-June 2023

Shutter Seeker @ itch.io

For our third game project at Futuregames, our first made in Unreal Engine, we set out to make a chill game where you just walk around taking photos, which you then sell in order to get money to be able to upgrade your gear. Quite a simple game in idea, very complex in programming.


Photos

First thing I worked on and spent most of my time on in this game was getting the photo system to work. We needed to be able to:

  1. Take photos
  2. Store the photos
  3. Show the photos in-game
  4. Grade/Judge the photos
Taking the photos proved to be challenging. We inititally had lots of issues with performance and differing visuals as we were using render textures. Eventually we found a new undocumented API in Unreal that let you take raw screenshots, which solved most of the problems.

Then to store the photos we created some C++/OpenCV functions that would dump the screenshots to disk.

To show the photos in-game I made a function that takes in a filepath to a photo and converts it to a texture in runtime that could be shown in-game, also using OpenCV.

Then finally, to grade the photos, we went through a couple of different systems. Our first idea was to use OpenCV and have QA take "good photos" that we would then compare against using OpenCV's comparison libraries. This kind of worked but it had a lot of problems, especially since our world was constantly changing so QA didn't have time to make good photos. So in the end we "cheated" and made a much simpler system that just checks whats in frame, which we have assigned a value to, and then go from there.

We store stuff like coordinates and time of day so you cannot spam the same photo over and over (if you sell the same photo repeatedly, it goes down in value).

Functions for UI

As our primary interface in this game revolved around an in-game laptop, I made some functions that made it easier for our designer to implement the laptop. This was stuff like showing the photos in the gallery, being able to set a wallpaper (something we got applause for at the presentations), and so on.

Compass

Our designer made a compass at the top of the screen, similar to the one in Skyrim. It shows directions of where things are. I implemented it and created a system for "points of interests", that automatically get added to it when discovered.

Achievements

As our game lacked a clear "finish line", I added achievements into it so the player has something to work towards. I call these achievements "read only", as they work by only reading the save files. What achievements you have unlocked never get written/stored anywhere. I made it like this because it was a very last minute addition and I didn't want to mess with the save files.

NVIDIA DLSS and AMD FSR Support

As Unreal 5.2 was very new when we started our project, Nvidia and AMD had not updated their DLSS/FSR libraries so we had to wait for them to do that. Eventually they did though and I added the options to our game (along with all our other graphics settings). I'm a big fan of upscaling techniques so I wanted to dive into it and see how you implement it. I think most, if not all, games going forward will incorporate either DLSS or FSR so I felt this was something that was very good to learn.

Misc

  • Save Games (keep track of progress, store taken photos, etc)
  • Helped implement the tutorial
  • Loading Screen
  • Tweaked the procedural world generation (add new meshes)
  • Made the builds