3D Space Racer
A fast-paced racer with six degrees of freedom. The player enters an underground racing competition in order to pay back a debt. In order to win, the player must finish three dangerous tracks.
This was our first project in the second year and in our new groups. We started from almost nothing and built our engine and game together. Therefore, I have worked in most parts of the engine and the game, but more in some than others. We wanted to build a codebase with a unified vision so we often coded in pairs. Here follows my primary contributions to the project, but keep in mind that some features had shared responsibility.
Player Movement & Controls
- Rotate the character in 3 axes from mouse movement.
- Move the player forward with a speed dependent on input.
- Acceleration/Deacceleration over time
- Gamepad Controls
Created a generic “Move Object Along Path” component that was used all throughout the game.
- Implemented a state stack that updates the current state.
- Easy to go between states without them knowing of each other.
- Can render states behind the newest. Used for the pause menu when the game renders in the background.
These two use the same options menu but the state stack makes back navigation automatically possible.
Component-Based UI System
- General UI Focus Component that handles mouse hover and controller movement.
- Button Component that handles input (mouse & controller buttons) . Implements virtual functions OnClick and OnRelease
- Other widgets like checkboxes and sliders inherit from button component and extend it.
- Widgets can send UI events like for example “Start Game” and “Change Volume”. A centralized UI event handler receives these events and make changes to the game state.
- All of this is loaded from JSON files exported from Unity.
Level & UI Loading
- Loading from JSON.
Level & UI Exporter in cooperation with Technical Artists
- Exports objects from Unity to JSON.
Physically Based Rendering (Group Effort)
- Wrote HLSL Shaders and modified the rendering pipeline
DirectX Foundation of the Engine (Group Effort)
- Interfaces and Connection Between Engine and the Game Code.
- Implementation of Rendering Pipeline Stages.
Deferred Rendering (Group Effort)
- Implemented a rendering pipeline that renders the data into separate render targets (G-Buffer)
- ARM (Ambient Occlusion, Roughness, Metalness) packed into 1 texture to optimize
- When all objects have been rendered to the G-Buffer, run a screen space lighting pass on them and output a combined texture to show on screen.
Window Handling (Group Effort)
- Wrote connection between windows message loop and the engine.
- Windows Size
- All settings are saved and loaded from a file.
Below is a list of links to the students with whom I developed all the projects in the second grade with. They are amazing to work with and I recommend them all!