Imvi: Echoes of Harmony

Imvi: Echoes of Harmony is a colorful 3D space collectathon built in Unreal Engine and released on Steam. The project was part of a larger Guildhall capstone where students were split into smaller teams to take on a longer development cycle and experience shipping a more polished title. Our goal was simple but ambitious: make a fully playable, visually compelling game that showcased both technical and creative collaboration.

I was credited simply as Programmer, but in practice I wore many hats. I handled a majority of the UI programming, implemented save systems and translation support, and collaborated with a Level Designer on the core collection loop. Beyond systems work, I collaborated closely with artists to bring their UI concepts to life, and integrated a third-party library (AMS: A Menu System) into our project to streamline menu development.

🔹 Technologies Used: Unreal, C++, AMS

Project Overview

Key Concepts

  • Throughout the development of the Model Viewer, I focused on several core graphics programming concepts:

  • Handling Saved Data: Set up systems for reading/writing persistent game data (e.g., collectibles, settings, progress).

  • Editing UI Styles and Interfaces – Customized layouts, fonts, and styling for a more cohesive player-facing experience.

  • Creating Separate Pages – Structured unique screens (settings, gameplay menus, collectibles) with transitions and state handling.

  • UI Controls – Implemented interactive buttons, sliders, and toggles for settings and in-game features.

  • Loading Data for Settings & Gameplay – Pulled in saved preferences (sound, controls, etc.) and applied them consistently.

  • Custom UI Features – Built dynamic elements like images that remain locked until the player collects all collectibles.

Challenges & Lessons Learned

🔹 Saving/Loading Data across Multiple sessions

Challenge:

  • Saving the correct data when the player needs it. i.e. saving position separately from collectibles, checkpoints, cinematics.

  • Loading the correct data and combining it with the collection system that was primarily made by another developer

  • Loading system settings and applying them to unreal’s unique api for system settings

Solution:

  • Creating an abstraction for multiple levels of save so that the events in teh game can call which data needs to be saved, or if all data needs to be saved

  • Working closely with original developer to understand and adjust code for use with the save system

  • researched and used C++ to correctly change visual settings unique to unreal’s api as well as testing in release mode to ensure adjustments carry over and load at startup

🔹 Collaborating with Artists/Designers on UI

Challenge:

  • Struggled understanding what each person was capable of doing/how to implement something together from two different sides.

  • Needing to be available to update assets on top of adding new sections

  • Trying to realize a combined vision that all of us shared

Solution:

  • Heavy communication about what can be expected of yourself and others

  • Propper management of time, tasks, and spreading information

  • Design documentation collaboration with white boxing, mockups, and whiteboards

🔹 Designing UI Systems

Challenge:

  • Managing multiple pages and states without breaking navigation flow.

  • Offering controller support

  • Use of a specific 3rd party software being required by stakeholders during development

Solution:

  • Drawing out pages and running through usage cases on a whiteboard

  • Using a state system to understand where the player is, and what they can do

  • Read documentation as well as reach out to the developers to better understand their library

💡 This project helped me learn how to stand on my own more as a developer and get used to working with others that don’t share my same skillset

Implementation Breakdown

Implementation Breakdown (How I Solved It)

🔹 OBJ File Loading & Parsing

  • Implemented an OBJ file parser that extracts:

    • Geometric vertices (v)

    • Texture coordinates (vt)

    • Vertex normals (vn)

    • Polygon faces (f)

    • Material libraries (mtllib, usemtl)

  • Converted quad faces into triangles for compatibility.

  • Added a new function SplitAndTrim to get rid of any excess spaces and still have lines that are just the results of splitting on a token.

  • Allowed dynamic loading of .obj or .xml model files via file selection dialog.

🔹 Implementing Phong Shading in HLSL

To achieve realistic shading, I implemented Phong shading with the following lighting components:

Ambient - Constant low-level lighting (background light)

DiffuseLight - reflected evenly across the surface

SpecularShininess - or highlight effect based on camera angle

EmissiveSelf - lit surfaces, glowing effect

This also required an update to my lightConstants that i was using to achieve debug use.

Results & Showcase

Video Block
Double-click here to add a video by URL or embed code. Learn more

What I Would Improve Next

Source Code