Embedded Steam Video
 

by


Indoor Sunglasses


Summary

Role: Gameplay systems, bugs, optimizing, shader VFX, particle VFX, Localization, LODs

Game Engine: Unity

Level Editor: Unity


My contributions

This was a new feature that was require to display some interactable items in a completely new menu. Some interactable items would have an image and display a small preview. This feature was to implement the functionality for the player to press a button and open a whole new menu where they could see the image in a larger format. This was made especially challenging by the images needing to be viewable if they had been viewed once and the player had then moved away from the area where the object is, causing the scene to unload.

I helped with implementing LODs to certain areas. Only some areas should use it because we wanted to conserve VRAM as much as possible.

This is a more general, there are too many bugs or unexpected behavior to mention that I've solved during my time with Mind Diver. Some examples involve finding out why looking at certain objects at a certain angle caused the purple missing shader to show up. Another bug was apparently pestering the team for a couple of years, which I managed to solve within the first week of my internship. This bug caused Unity to hang upon quitting play mode.

Case files are certain documents viewable in an in-game menu. These documents are supposed to unlock at various points in the game. I coded the functionality for this and made them unlock at the correct times.

Once a publisher was behind the game, the need for localization became much more important and many languages were planned. I spent a lot of time making sure everything in the game was properly localized.

This is a special feature that was requested for the end of the game so slow down pacing. Objects start as being almost entirely "disassembled" using a disintegration shader, and then upon being viewed starts assembling. If the player stops looking at the object, the object slowly reverts back to its original state.

At one point it was required of me to assist in setting up gameplay mechanics for scenes such as linking memory holes to the correct object that needed to be placed into it. Setting up the listenable echoes.

Subgates are progress blockers that ensure the player cannot enter an area before they have fixed enough memory holes and listened to echoes. I was tasked with making a new effect for them.

Memory holes needed a bit of VFX spice, so I was tasked with making this as well. Additionally, this task also involved converting the old effect using Amplify Shader Editor to using Visual Shader Graph.

To minimize player frustration, we use portals in the game. These needed an updated VFX and I gladly obliged.

Listenable objects used an outline shader, but it was part of our "Master_Shader" which is used for all objects. Because of the outline, this caused every single object in the game to be rendered twice, costing quite a chunk of performance. It was decided that the effect needed to be replaced with something that looks good and has less of a performance impact.

I worked on this together with other team members to get to the final product which turned out quite well!

We wanted the backsides of scanned walls to use a shader that made it look like it was sort of rising out of the memory bubbles and the backside shader was a team effort of many of the team members!

Not only content with being a programmer and technical artist, I also joined as a voice actor for a minor role (Questo the Mighty)!

Deactivating certain memories or scenes, performance profiling with occlusion culling, updating certain shaders.

The game

Mind Diver started as a student project by a few Danish students and won awards early on. After a few years of hard work, it was eventually turned into a full game that's closing in on release!


Story and setting

Mind Diver is a puzzle/detective and narrative game where the player takes on the role as a Mind Diver, who uses a new revolutionary method to help people remember their old memories and assist people suffering from memory loss. Lina is one of the main characters in the game, she's the woman who seeks out the help of the Mind Divers. She suffers from memory loss for an unclear reason and is repeating that her boyfriend, Sebastian, is missing. It's up to the player to dive into her consciousness, repair her memories and find out what happened in their life, where Sebastian has gone and if he is alright.

My role and contributions

I signed on as a programming intern at Indoor Sunglasses and I got to work very independently and felt like I had a lot of say in my work, which made it very enjoyable to work with.

 

In the interview to join Mind Diver I said that I also had keen interest and some experience with making simpler particle effects, and I was very interested in voice acting, yet had only a bit of experience with small projects or friends projects.

 

Having knowledge in multiple fields can be very good in a small team, so I got to branch out and aside from programming I made quite a few visual effects, particle effects and helped other team members make their effects just like they want them to be. Due to me making an engine from scratch, that knowledge in graphics and shaders made it easy for me to assist artists if they had trouble making something work the way they wanted.

During my time with Mind Diver I have worked with localization, new features in the game, new visual effects, various bug fixes and menu changes, LODs and much more! It was working inside of a lot of systems and creating new systems within them, with puzzle games there tends to be many way to solve things in the game, which can require a lot of work behind the scenes. As this is also a very visual game, a lot of the focus became making sure the environment looked good, effects looked good and they displayed correctly. This meant working a lot with materials in the code.


Deactivating game objects to save rendering time can sometimes be viable and not noticeable for the player. Worth noting however is the fact that deactivated renderers still use VRAM! Unloading scenes is even better, which is something that was planned around a lot, splitting up things in scenes that could be loaded and unloaded dynamically.


I also worked a lot with localization, which was important seeing as the game was going to be localized to many different languages, including but not limited to Japanese, Chinese (simplified), Chinese (traditional), German, Russian, French and Spanish. Setting this up was not terribly difficult, but time consuming.


Later on we also realized that the objects that could be viewed needed to be localized too somehow. At first we figured we'd just make multiple versions of the images with translation over-layed. But due to problems with image localization which seems more like a Unity problem than anything else we had to scrap this. Later on this went through multiple revisions and we landed in a system where text objects are simply placed over the images. This solution was finicky and not easy to get to work correctly with scaling and the preview window, but eventually a solution was found.


Here's the changed Echo effect (on the woman) which is more performant than the old outline.


Localization was completely new for me. There were some challenges with getting the text atlases to include all necessary letters but I was mostly involved with implementation in the game.



A major change in the game was making the backside shader, which at first our technical artist worked with, which I then took over to make it even better!



Below is a gallery of various VFX I've made (and often coded the functionality to activate them).


Here's the portal effect, which uses vertex displacement to get a cool wobbly look.


Subgate effect, this one took quite a lot revision and effort. Especially since one requirement was manipulating the effect when it was activated by the player to increase the waves. I did this with scripts


Connected holes. A mechanic that requires the correct objects to be placed in all connected holes at once to solve them. The challenge here was making a nice looking effect that could work for just two or multiple holes.


Here's the assemble effect. This was an interesting feature, I had nothing to do with the effect itself, but manipulating materials directly in a script can be tricky to get right, then adding the highlight once the object is fully assembled. It was a lot of fun to work with.


Mind Diver had had many developers over its lifespan and the game contained quite a bit of legacy code, scrapped features and mechanics and many assumptions had been made that no longer lined up with the vision of the game now.


Joining a project in a late stage like this can probably be quite challenging, I previously had no experience with this because all projects I had worked with I had been with from the very start. Yet I was very accustomed to working with other peoples code. It can take time for developers to feel comfortable with the established codebase and start working with it.


As such, I took my time learning and reading the code, understanding the systems and connections that were in place, sometimes asking our lead developer who was my mentor some questions. It didn't take long until I had a fair few issues and bugs fixed and I was tasked with coding and implementing the new feature for Inspection++ as we called it internally. The feature was described as needing a whole new menu panel which was supposed to display inspection object in a larger format in case the player needed to see the details.


A challenging aspect to this system was the fact that all objects that can be inspected needed to be accessible in the in-game menus at any time so that the player could look at objects in the menu without being anywhere even close to them. This means that sometimes the original object that contained the image would be in a scene that was unloaded. This also had to work when the player had saved and quit the game, then continued. Below is a quick gif showcasing enlarging an "inspectable" object.