
Riley Campbell Design

Assignment
'Dream Gallery' was my project for the capstone course of my Media Design major, as part of my bachelor's degree. What we were able to do for our projects was fairly unrestricted, as long as we pitched, documented and presented our work to a high standard. Our finished products also had to be shared in some way, in my case I chose to use Itch as a platform to make Dream Gallery publicly available.​​

Pitch
My concept was a virtual gallery application in Unreal Engine, that worked on PC and virtual reality devices. I did some research into similar programs and found that they generally involved a lot of manual set up. For Dream Gallery, I wanted to make it as easy as possible for users to create their own galleries, by making them generate procedurally. My goal was to make it so that all you would need to do is select a folder and everything else would be handled.

Development
​There were three main technical challenges to solve for the project to work: loading images, categorising them, and generating the gallery.
​​​
​
Loading Images
​
I needed a system for loading files from the computer in Unreal Blueprints if possible. The rest of the project was programmed in Blueprints and I felt more comfortable with them than C++. Natively, there were no nodes for what I was trying to do. Luckily I found the 'Rama's Victory' plugin, which included nodes that could load files and turn images into textures. This allowed me to take images from folders on the user's PC and apply them to 3D canvas models that would go on the walls of the gallery. The canvas model is a small cube, that scales up to the size of the image (with a limit, so that they would always fit on the walls).
​
Another problem I ran into with loading the images, was that loading a lot of them at once used to much video memory on the GPU, causing poor performance and crashes. My solution was to store the file paths instead and only load images near the player.

Categories
​
In order for the gallery to have distinct sections, I needed to categorise the images. This was also something I wanted the user to have some control over, so there needed to be a way for them to create categories and set images to be a part of them. As it turned out, the solution was right in front of me. Since I was loading files from their file paths, I had access to strings of folder names, separated by slashes.
​
e.g. 'C:\Users\RileyCampbell\DreamGallery\Images'
​
In Blueprints I was able to break these strings into parts by taking the words between the slashes. This allowed me to use the folder names as the names of categories and group categories together based on their relationship to one another in the folder structure.
​
The elegance of this solution is that it works, without the user needing to change anything about existing folders of images they have on their PC. They can make changes by renaming folders and creating sub folders, directly in the file explorer.

​Procedural Generation
​
Procedural generation is something I have always been interested in. When it comes to games, it can offer players genuinely unique experiences and adds replay value. For this project however, it is used for generating galleries of varying sizes, to fit the user's images.
​
Given the scope of this project, I didn't want to spend too much time creating a complex system for the generation. My focus was on making it scale seamlessly and work well with the categorisation of the images. The gallery is made up of 'Room' objects, which are premade with canvases on the walls (image slots) and include an entrance and an exit. Any other details about these rooms could be changed. When the gallery generates, it iterates through the image categories and builds rooms of appropriate sizes to fit the images. Rooms are separated by connecting pieces (corridors), that allow some space for rooms to load and unload.
​
The result of all of this is quite linear, which is good for clear navigation but not aesthetically pleasing. This could be helped a lot by having larger buildings and more variations of rooms and connectors, though it would still be linear. It would be more interesting to have branching paths, however that would make the generation much quite complicated, with potential intersections to account for. This is definitely something I would like to revisit in a future project.

Other Features
​
Once all the technical parts were working I was able to move on to aesthetics, interactive elements and user interface. These are best seen in the demonstration video, or by downloading Dream Gallery from the Itch link at the top of the page, but here is a list of features:
​
-
Image captions which can be written inside the project and are saved as a text file linked to their image.
-
Viewing images in 2D by interacting with them.
-
Enlarging and rotating images.
-
Teleporting between category sections.
-
Ability to open file explorer from inside the application to select image folder.​
-
Player zoom in.
-
Dynamic atmosphere, lighting and weather system, using the 'Ultra Dynamic Sky' plugin.
-
Ability to customise wall colours and light brightness in the gallery.
-
Complete settings menu.
-
A full guide for how to use and navigate the gallery.

Further Ideas
​
This was a very demanding solo project given the time frame of just a few months, at a time when I was also working on my Game Design major's capstone project 'Stress Signal'. Given this, there are a number of things I wasn't quite able to add to the project, that would have taken it a step further.
​
The largest change from my original plan, is that Dream Gallery does not work in virtual reality. Making it available for VR was something I was excited about trying, however it was just too big a layer to add on top of an already ambitious project.
​
Another idea would be to add multiplayer, allowing users to view each others galleries. This would likely require images to be loaded from an online cloud platform. There is also some concern about needing moderation for images that are being shared.

Final Thoughts
Overall Dream Gallery is probably one of the projects I'm most proud of. I was able to use a range of skills I had been building on at university and apply them to something I have wanted to make for a long time. ​ It certainly isn't perfect however. There are a lot of things I would do differently now and it could really do with more variation in the gallery buildings. It is definitely a project I plan on coming back to in future.