Game Programmer

with an interest in  gameplay programming, QA, AI programming and shaders.


BSc in Software Development

Master in Game Technology


See my code projects on github

PROGRAMMING AND MARK-UP LANGUAGES

  • C++
  • Python
  • C#
  • Java
  • JavaScript
  • C
  • Kotlin
  • F#
  • SQL
  • HTML
  • XML
  • CSS

ABOUT

Graduate Master in IT, Games Technology with experience in programming in large and small teams of varying disciplines. Organized and analytical with a desire to improve technological as well as interpersonal skills.

 

In my master thesis, we developed a creative AI tool for creature generation to assist in a game designer’s creative process.


My favorite projects

CREAC

My thesis project wherein we developed an AI tool to assist game designers in their ideation process of creatures.

A RAINY DAY

An individual project wherein I programmed realistic looking environment using C++ and OpenGL.

THE MENDER

In a world, two deities are going through the worst divorce in existence with the population in the middle of it - and now you are too.

2023

CREAC


The aim of this thesis was to develop a mixed-initiative co-creativity tool called CREAC
(CREAture Creator) that could assist designers in their creative process when working on
creature designs


The tool utilises Stable Diffusion, which is a latent diffusion model capable of generating images from a text prompt provided by the user. The text prompt describes the image of interest. In addition, CREAC utilises interactive evolutionary computation, such that the text prompts are the creative product of both the designer and AI. A final study was conducted with 20 participants. The majority 80% participants in the final user study preferred CREAC over the control versions, and 95% would use CREAC again to create
creatures.


LANGUAGE: Python


MODEL: Stable diffusion


TIME: 6 months


TEAM: Pair project


THE USER TEST PRIZES

We tested our thesis with two user tests each time we had prized the users could win. They consisted of bespoke creatures, where the images were generated from Stable diffusion, and we would embroider or crochet them. I would crochet the creatures.


Creature generated by Stable diffusion with the prompt “Cute little blob creature in a forest”

My crochet bespoke creature made from the image from stable diffusion. I made the pattern myself.

THE PROCESS

THE FIRST USER TESTING


Two versions were created for the prototype testing, version A and version B. The graphical user interfaces (GUIs) can be seen in fgures. Version A was using Stable Diffusion with no interactive evolutionary computation (IEC) and was used as the control version. The participant could input anything they wanted in the text prompt but with a similar GUI to version B. Version B would use IEC. Both version A and version B uses Stable Diffusion to generate images. It takes approximately 30 seconds for each version to generate four pictures.



THE FIRST USER TESTING RESULTS

In summary, the majority of participants preferred version A. They preferred the freedom of this
version, which was refected in both the survey responses as well as in the telemetry with some
prompts being unrelated to creatures.


The following changes were implemented in the next iteration 

  • In an attempt to increase the participant’s sense of control, they will be able to input a base
    prompt which CREAC will then add attributes to for IEC
  • The participant will be able edit the prompt during IEC
  • Increase the population to contain nine individuals
  • Increase performance such that nine creatures could be generated in under 30 seconds
  • The images should all have the same seed to ensure the children look like the parents
  • The GUI will be redesigned to be more intuitive/informative such that the participant
    knows they can select and evolve a creature

Screenshot showing four creatures with four different random seeds and the prompt "happy dragon", generated with version A

Screenshot showing four creatures with four different random seeds and the prompt "painting of a blue creature with big teeth surprised by studio ghibli", generated with version B. The prompt was generated by the use of the randomise button.

THE PROCESS

THE RAIN

2022

A RAINY DAY


The objective of this project was to use Physically based rendering (PBR) to simulate a rainy day in an urban enviroment using OpenGL and C++.


To mimic a rainy day some effects were chosen: Rain,
wet surfaces, water splashes and rain occlusion.


LANGUAGE: C++


SOFTWARE: OpenGL


TIME: 2 months


TEAM: Individual project


COURSE: Graphics programming


First, I developed the rain box which follows the camera. At the same time I implemented the rain occlusion, to have the rain not fall through the roof of the house. I created a depth map of the scene from the rain’s direction and test if the particles depth was larger than the depth map, and set the alpha to zero in order to make the particle transparent.


The box has been up scaled from a 1x1x1 cm cube to surround the camera. This had been done so I could work in a space from 0 to 1.

The box contains a fixed number of raindrops. When the rain falls out of the box they get reset starting to fall from the top again.

WET SURFACES

Next, I implemented the wet surfaces. Left is before I implemented the wet surfaces and right is after the implementation was done.

How wet a surface becomes also depends on the type of material. Rough materials tend to have a darker albedeo and higher specular when when wet than metals. To simulate that I used the materials roughness and metal textures.


The roughness texture is then used in the Trowbridge-Reitz GGX distribution and Schlick-GGX. The metal texture is used to mix between the dry and wet albedeo in order not to make the car more dark
since it is made of metal.


 WATER SPLASHES

The final step was to implement the water splashes. I generate a splash when the rain particle collides with the surface. To do this I calculate where the rain particle is coming from and from that point of view, I project it onto the surfaces in the scene.


I utilize the same depth map for the rain occlusion again to test if the particle has collided with a surface. If it has done so I can create the splash. All of this is done in the vertex shader. The geometry shader for the rain splashes makes a particle into a quad, to map the texture of the splash on.

 2022

THE MENDER

ROLES: PROJECT MANAGER, PROGRAMMER AND ASSISTENT ARTIST


I, together with the other programmer, was responsible for all the programming in the project: dialog system, interaction with the world, questline and so on. As one of the assistant artists I was responsible for the details on the plant side of the world such as all of the animals and water details.


In a world, two deities are going through the worst divorce in existence with the population in the middle of it - and now you are too.


The game takes place in a world split inthree realms - the technology realm in which the technology deity, Bitinax, resides, the middle island with a temple, and the nature realm in which the nature deity, Magnaphyte, resides.

When the game starts, the player learns that they have been given the role of ’Messenger’ who is responsible for delivering messages between the two deities.


The mender
The mender 1
The mender 3
The mender 4png
The mender 5
The mender 6
The mender 7

THE PROCESS

2 WEEKS IN 


In start of the process of creating The Mender we settled on the world, the core all game play, themes and style we were to aim for. These are some of the slides we presented for the class after the first couple of weeks of working on the project.

Præsention 25_2
Præsention 25_2(1)

LANGUAGE: C#


SOFTWARE: Unity, Aseprite


TIME: 3 months


TEAM: 4 people


COURSE: Game World design

20220501_184004
20220501_184058
20220602_153407

Self-made crochet Mender

One of my hobbies is crocheting. I created my own pattern for the main character of the game and made key chains for all the group members

2 MONTHS IN 

We had the pallets of the two sides of the world completed and started creating assets. During this time, we started developing the starting point of the dialog system, and the delivery system of the letters. We had to build the dialog from scratch since there was not a free dialog system available in Unity at the time. We implemented the dialog system to read ink files, meaning the designers could just change the files to change the dialog.

1_4(1)
1_4
1_4(2)