Arcade racing multiplayer (4 players split-screen, up to 8 players online) game with polished mechanics and smooth game feel, built in Unreal Engine 4 and published on Steam. Contributions to the project are:
Player Vehicle design and implementation: full implementation of vehicle movement mechanics with special emphasis on its feeling and speed.
Proper use of UE4 substepping system to achieve solid gameplay performance and framerate independent physics across computers with a wide range of specs.
OpenGL and C++ game engine I made in my final HND year at ESAT Valencia for the graphics programming subject. This project was also my first attempt at making a 3D engine. Its features are the following:
Multithreaded agnostical graphics API.
Component oriented engine.
Physically Based Rendering techniques:
Material pipeline (PBS, Metallic/Roughness workflow).
Image Based Lighting (Radiance and Irradiance environment mapping).
Atmospheric Scattering (Rayleigh and Mie Scattering).
Project that emerged from the desire to build a general purpose rendering tool that I could use to implement anything I was curious about or wanted to learn about.
As it stands now, it is a multithreaded, PBR, 3D engine written in C++ and oriented to support different rendering backends. It is currently being worked on.
Multithreaded agnostical graphics API
Command Based Rendering, allowing to build the render commands in advance to be run in a separate thread
GameObjects with the following components currently implemented (each component is controlled and updated by a specific system):
Transform: Containing the object’s transformation and position in the scene’s hierarchy.
Mesh Filter: Reference to the mesh the object will be rendered with.
Renderer: Reference to the Material Instance the object will be rendered with.
Current Materials: Standard (Lit), Unlit, Wireframe, Skybox, Screen, Planet, Add your own!
Light: Turns the object into a source of light.
Image Based Light: Light that captures the environment lighting into a diffuse irradiance map and a specular irradiance map for reflections.
Camera: Adds to an object all the functionality needed to render from its point of view with its unique parameters.
Camera Composer: Organizes all post-processing needed for any specific camera, and handles updates automatically.
Postprocessing Materials: One-Pass-Filters (Grayscale, Negative), Add your own!
Custom Component: Similar to Unity’s MonoBehaviour, allows the user to create custom reusable components with specific behaviours.
CPU Rasterizer in Raspberry Pi 3 (May 2018 - June 2018)
Project for the low level and optimization subject in my final HND year. It consisted in implementing a graphics algorithm and applying as many optimization techniques as possible.
CPU rasterization of triangle based convex meshes.