ConsoleRenderer is a custom 3D graphics engine I developed in C# that renders scenes directly into a console. I engineered the project from the ground up as a software rasterizer.
The engine manually calculates 3D geometry and projects it into a grid of colored block characters using ANSI escape codes, turning the command prompt into a display screen with RGB32 color capabilities.
Most notably, I implemented a Physically Based Rendering (PBR) lighting model, the materials have metallic reflections, surface roughness, and emissive light sources entirely through console text.
Garden of life is a 3D puzzle game we made with a group of 6 in Stichting Gamelab Oost for an internship in MBO4.
I worked with a group of CMGT Saxion Students to develop a game that will aid lymphoma cancer research.
We used Unity for the game, and it is available to play on the web.
You can try it here.
Minecraft Clone is my custom built voxel sandbox engine, written from scratch in C# and OpenTK.
Chunks are generated async in the background and uploaded on the main thread.
It uses Multi Draw Indirect so that I can batch what to draw and then send to the GPU at once.
I started this project thinkiing I will use the newest OpenGL features and make something optimized. It runs 200 FPS on my laptop with an integrated GPU, so for now, great success.
I am proud of the way I managed to pack all my data into 4 bytes.
[StructLayout(LayoutKind.Sequential)]
public readonly struct Vertex
{
/// <summary>
///
/// -- 32 BITS --
/// x y z nor tex pad
/// [006][006][006][003][011][000] STRIDE
/// [026][020][014][011][000][000] OFFSET
///
/// </summary>
public readonly uint Data;
private Vertex(uint data) => Data = data;
public static Vertex Create(int x, int y, int z, NormalIndex normal, int textureIndex)
{
Debug.Assert(((x | y | z) & ~63) == 0, "X, Y, or Z of Vertex exceeded 6 bits [0,64)!");
Debug.Assert((textureIndex & ~2047) == 0, "Maximum Texture Index of Vertex exceeded 11 bits [0, 2048)!");
return new Vertex(
(((uint)x & 0x3F) << 26) |
(((uint)y & 0x3F) << 20) |
(((uint)z & 0x3F) << 14) |
(((uint)normal & 0x7) << 11) |
((uint)textureIndex & 0x7FF)
);
}
}
2D RPG Game I made when I didn't have internet at home. I had to reinvent the Math function Atan2 without any external source.
All textures (except for the player) are homemade. For the player, I opened up a game and copied the pixel art of the character.
This was my first 'big' project