Planetarium
Planetarium is a 3rd person puzzle level made in Unreal Engine 4 where the player rotates, aligns, and positions pieces of the level itself in order to activate a miniature solar system. This project is meant to showcase my technical skills in Blueprints.
Overhead Layout
Asset Packs Used
-
Monuments and Obelisks by DC Assets
-
Modular Scifi Season 2 Starter Bundle by Jonathon Frederick
-
The Teleporter by Crowsfield
-
Zero Gravity Part One by Henri Juntunen
-
Polar Sci-Fi Facility by Julio Juarez
-
Advanced Glass Material Pack by
Michal Orzelek -
First Person Puzzle Template by Divivor
-
Interactive Lights System by
Michal Orzelek
Modeled Assets
I built the prototype domes using BSP brushes and I modeled all of the finished domes and most of the hallways in Maya.
Codrex
-
last puzzle of the level
-
site of miniature solar system
Orrery Dome
Inspiration
Once the whitebox was playtested, I felt that the level could use more dynamic environments and puzzles. I was inspired by the rotating movements and positions of celestial bodies within armillary spheres and orreries.
I also wanted the level to inspire curiosity, much the same way that science centers do. My goal was to build an environment that incites wonder, with astronomy and space as its theme.
a mechanical model of the solar system, or of just the sun, earth, and moon, used to represent their relative positions and motions.
Planetarium started out as a puzzle level where the goal is to manipulate movable lights so that they cast shadows in specific patterns along the inner surfaces of domes. This idea was inspired by the light puzzles in the game Rime but also by my appreciation of outer space.
Most of the whiteboxed level took place within domes because of the ease with which they host shadows on their inner surface to support the core puzzle element. The domes reminded me of the planetariums in science museums, hence the name of the level.
Layout & Pathing
After designing the first layout, I knew I wanted a big open space in the center of the map to compensate for the enclosure of the domes, but that had to go through several iterations in order to get the right scale and feel. Since space was one of the level themes, I made an interior reminiscent of a space station.
Just domes and tunnels at first
More open paths and spaces
Just domes and tunnels at first
The Puzzles
Each puzzle in the level is a Blueprint actor. There are four main puzzles: the Orrery, the Armillary Sphere, the Sun Room, and the Codrex. Each puzzle has clue showing the pattern necessary to solve it. When the player solves a puzzle, it grants access to another part of the level.
The Orrery, Armillary Sphere, and Codrex share the same mechanic: rotating objects clockwise or counterclockwise to achieve a specific alignment.
Players control the movement of the spheres and rings using the keyboard.
Orrery
-
One ringed planet sitting in the outer orbit
-
Two non-ringed planets sitting in middle and inner orbit
Left side
The clue
-
One ringed planet in the outer and inner orbit
-
One non-ringed planet sitting in middle orbit
Right side
Armillary Sphere
The clue
-
One non-ringed planet in inner orbit
-
One non-ringed planet sitting in the outer orbit
-
One ringed planet in middle orbit
Left side
-
One ringed planet in middle orbit
Right side
Sun Room
The Sun Room is unique in that the player is part of the puzzle itself by becoming a source of light while casting shadows that must be aimed at targets.
The clue
-
Three dark spheres inside three blue rings
Codrex
The clue
-
A light in the center, where all the spheres align
Iterative Process
I wasn't just satisfied with using moving lights and shadows as puzzle elements. In the same way planets orbit the sun, I also wanted to create puzzles where the player could rotate objects around a center into specific alignments.
First, I prioritized the puzzles because this project required a good deal of technical skill to accomplish. Using Blueprints, I learned to move objects around their pivot points and around the pivot points of other objects. My design process was as follows:
-
Clearly visualize how I wanted objects to move
-
Script basic mechanical movements of objects using Blueprints
-
Test movements and positions until they felt smooth and looked right
-
Add additional objects and trajectories to increase the complexity
-
If a puzzle didn't play well or looked confusing, I'd break down what was working well and what wasn't
-
Once a puzzle showed promise, I would keep adding more moving objects until their movements resembled armillary spheres and orreries
-
Configure the Blueprints so that moving objects into specific locations would trigger events
Here are some before and after images of these puzzles
Before
Codrex (Rotating Dome Puzzle)
First iteration:
-
Player steps inside dome
-
Gains control of dome's rotation
-
Rotates the dome to cast a shadow of the moon on a target using the directional light
I departed from this idea because it would be cumbersome for the player to control two unrelated mechanics: controlling lights/shadows and the rotation of objects
After
Final iteration:
-
Player stands outside three colossal domes layered over each other
-
Gains control of domes' rotation
-
Rotates the dome along the x-axis to gain entrance to the chamber
By departing from mixing those two mechanics, I leveraged rotation alone to create a puzzle that required the player to align the entrances cut into every dome.
Before
The Sun Room
First iteration:
-
Player's light is always on
-
Player steps inside dome
-
Moves around static objects to cast shadows
-
When player steps in the right spot, they'll overlap with a trigger opening the door
The prototype level had 4 variations of this puzzle. Each dome was a UE4 BSP converted into static mesh, which weren't perfectly smooth.
After
Final iteration:
This version has more feedback built into it:
-
Player's emmisive material and light turns on only when they enter the dome
-
Moves around hovering objects to cast shadows within three rings
-
When player moves into correct position, they'll trigger an invisible BP called Proximity Actor
-
The player grows brighter/dimmer as they get closer/farther from correct position
-
An attenuated sound cue is audible as player approaches correct position
-
One of the planets turns into a sun and drops an item when player solves puzzle
Technical Challenges
Scripting in Blueprints was the single greatest challenge of this project. I had to script the following functionality into the BPs:
-
Getting objects to rotate smoothly
-
Controlling the axis and speed of the rotation
-
Switching materials on characters and objects as a form of feedback
-
Having blueprint instances react to the character's materials
-
Having blueprint instances communicate with each other and store data
I had to learn most of this by digging through Unreal Engine forums and perusing YouTube videos. Most of the time, these resources wouldn't show me how to do exactly what I wanted, which is where problem-solving came in. I'd also consult programmers to check the soundness of my code.
Here is an example of the scripting that makes the level work.
The Climax
Although the climax of the level is not a puzzle in itself, it was scripted in Blueprints and it's the part of this project I'm most proud of.
Here is how this sequence of events are executed via Blueprints.
Lighting
In the original prototype, I attached a dynamic light to the UE4 mannequin's mesh so that it casts moving shadows on the objects that surround it: this makes the mannequin a moving "sun"
In order for the shadows to be visible from a third-person perspective I took the following steps:
-
Turned off the mannequin's shadow
-
Balanced the light's attenuation radius, intensity, and shadow resolution so that the shadows would be crisp no matter where the player moved.
-
Toned down the directional light and fog so that the player could experience how their movements light up the environment.
-
Set the dome material to white so that the shadows contrast.