The third year of the university

The first semester

Game engine programming

The game engine module was the most important module for me and it is the one that I have spent the most time on!
You can read more about it in the dedicated portfolio entry about it.

Grade: 80%
Github link.

Graphics programming

During our graphics programming module, we explored more complex concepts such as raytracing and procedural content generation.

Coursework 1 – Raytracer

The first coursework required the students to write a raytracer with C++ and to attempt to optimize it as much as possible.
Similarly to the game engine, I challenged myself to use C++20 features to better learn it. It must be mentioned, that this coursework was completed before the game engine, and thus I was still learning and I was not sure about some things in the new standard.
In the 6 weeks that I worked on this project, I managed to write a raytracer that could render planes, spheres, individual triangles and more complex 3D meshes. It also calculates both hard and soft shadows and reflections!
In terms of optimisations, there was one massive issue that I had to deal with – when using compiler optimisation (the Ox and other flags) shadows would not appear. I did not manage to find the issue and fix it so I had to compensate it with my own optimisations. I used AABB to reduce the time spent on checking if a ray is hitting a certain object. While this did not improve the FPS count with simple objects, the changes in time spent with a complex 3D mesh was reduced drastically. Additionally, I used pooled threads to use every thread within my CPU to produce the image, which gave a nice performance boost.

Grade – 82%
Github link.

Coursework 2 – procedural generation

For the second coursework, I had to use OpenGL and C++ to use procedural generation and animation to create a simple 3D environment. Like with the other projects I tried to use C++20 modules to further my skills with them, however, due to some issues with libraries I had to convert to the traditional header & source file combination.
For this project, I managed to implement a Diamond-Square algorithm for randomizing environment heights and a recursive function to generate a tree. Also, within the shader code, I managed to animate multiple things like the tree branches and clouds, also added waves to a plane to emulate the sea.

Grade – 90%

3D Modelling and animation

Coursework 1 – 3D character creation

During this coursework I had to conceptualize and model a 3D character, that will be used in later coursework.
I’ve started with drawing out sides and half of the character which was later used to shape the character. While the drawings were not very accurate they helped shaping the main parts of the character. Afterwards, I started working on separate pieces, which later will be assembled.
To optimise the mesh, I used decimate modifier multiple times and then compared different levels of decimation to see which one looked the best. Retrospectively, I might have focused on performance too much, which resulted in the mesh being too blocky.
I used Adobe Photoshop to create the model scetches and Blender to create the model.

Grade: 63%

Coursework 2 – Rigging, materials and animation

The second coursework required a short animation with PBR materials.
I rigged the character from my first coursework project as a robotic humanoid, which meant some simplifications, like using only one bone for foot. The rig also use inverse kinematics for mo realistic animations.
The materials were created from a scratch using grudge noise and various shapes to make patterns. The first iteration resulted on quite bad colour pallet, as my initial sketches did not cover that, however, after some experimenting the final result was quite good.
While animating some issues with the rig were discovered which required ad hoc fixing. For some segments animations were done using paths to make the process easier. Sadly, this approach was discovered late into the development and it was not implemented in every situation, where it could have helped.
I used Blender to rig and animate the character and used Substance painter and designer for creating PBR materials.

Grade: 67%