C++

Honours Project

Video (Video Jittery Due to OBS Capturing from VR )


 

Details


Programming Language: C++.

Engine: Unreal 4.

Project Type: University.

Platform: PC & HTC Vive.

Technical Features


Simplex Noise

Simplex Noise is an algorithm created by Ken Perlin. Similar to Perlin noise its creates random data that is incredibly useful in procedural generation. Simplex noise has a few advantages over Perlin noise such as being faster for large amounts of data, producing less unwanted artifacts and when used in three dimensions produces better results. In this project it is used to generate the starting data set.

3D Cellular Automata

Cellular Automata (CA) has been used for many different purposes over the years, from reproducing real world patterns such as snowflakes and seashells to full games such as the Conway’s Game of Life. These examples and the majority of uses of Cellular Automata differ from this project in one key aspect: they are usually 2D. While not being used as often for 3D as it is for 2D, CA is very good at creating cave like patterns in 3D. Starting with data generated using simplex noise the algorithm is run multiple times until distinct cave formations are formed. this data can then be passed to the Marching Cubes algorithm to be transformed into a mesh

Marching Cubes

Marching Cubes is an algorithm used to convert simple data in to 3D meshes. Used initially for medical imaging it has now been used to create a plethora of other things, one of the most common being  procedural meshes for games. In my honours project it was used to procedurally generate the cave mesh from an isosurface created using Cellular Automata

Chunk System

Since you don’t want to render an infinite cave at all times a chunk system was necessary so as to allow only a set amount of chunks to be created and shown at once.This was done by defining set cube size and generating multiple of these cubes side by side. Due to the seeded nature of Simplex noise persistent caves were able to be achieved despite being generated as separate individual chunks. A big benefit to this approach is also the fact that it works extremely well with multi-threading.

Multi-Threading

Multi-threading is the process of running operations in parallel using different threads. For this project multiple chunks would be generated at the same time on different threads so as to greatly increase the performance of the real time generation of the cave.

Virtual Reality

The cave was designed to be explored in virtual reality, this meant considering its generation to be well suited to teleportation as well as giving a good sense of presence. Another big consideration was to make sure both the movement around the cave as well as the cave itself didn’t produce nausea. These considerations paid of as at the 2018 Abertay Digital Grad Show many people who who played this project commented that usually VR made them fell ill or nauseous  but they felt fine exploring this VR cave.

About


 

A defining problem upon the consumer release of virtual reality hardware was a lack of content in Virtual Reality games. One way that the content within these games could be improved is the use of Procedural Content Generation. The Aim of this honours project was to investigate whether the use of Procedural Content Generation is a viable and effective technique for improving VR games.

In order to look into the applications of procedural generation in terms of VR and test if it is a viable method for the generation of VR content, an application was created in which you can explore a procedural generated environment in VR. This environment was created through a combination of Marching Cubes, Cellular Automata and Simplex Noise to produce an interesting and immersive world. The application was then user tested to assess the effectiveness of the research project. Qualitative and quantitative data was gathered through user testing and performance testing so that the feedback and results from these tests could be used to determine how viable procedural environments are for use in VR games.

  The results of this project demonstrated that while not a perfect answer to VR’s content problems procedurally generated environments where indeed very effective at encouraging exploration, discovery and immersion as well as greatly increasing replayability. However, the results also revealed that a lot of thought and work need to be put into VR performance and gameplay in order to achieve good results using procedural environments. It was fond that using the techniques and methods explored in this project Procedural Content Generation can be achieved that works very well in VR as on top of the expected result of being able to create large interesting environments, it also creates environments that encourage natural exploration and invoke a fantastic sense of wonder and discovery.

 

Dissertation

 

Various Work in Progress Pictures from throughout development


Third Year Professional Project

Video


 

Details


Programming Language: C++ & Blueprint Visual Scripting.

Engine: Unreal 4.

Project Type: University/Client.

Platform: PC & HTC Vive.

Main Role: Lead Programmer.

Other Roles: Designer, Technical Artist.

 

Technical Features


Virtual Reality

In this VR project I worked on all the VR elements from movement to interaction as well as all the game play involving the VR player.

UI

All the user interface systems in the game were created and designed by me using the Unreal 4 widget system. The game is mostly controlled through interaction with the wrist based UI attached the left Vive controller.  One of the main features of the wrist mounted UI is a scanner screen allowing the player to see points of interest that they can interact with as well as see a path to follow if they get lost.

Lava Material

Using Unreal 4’s materials system I created the games lava using a highly modified Gerstner wave system this lava material was used for all the lava in the game and created so that the amplitudes and other elements were editable through the use of material instances so that other team members could modify the lava and use it for different types of lava in the scene.

Level Streaming

For the game to work as it was designed the player needed to go from the hub to planet surfaces and back so level streaming was implemented so parts of levels could load in in pieces for much smother transitions. This had to be designed and done well as it would have been very jarring if done wrong in VR.

About


In the 3rd year of my Computer Game Applications Development course we were given a list of briefs from real clients and were sorted into teams with the other students from game development related courses based on which brief we had chosen. We had the length of 3rd year to design and then create a prototype for our clients. this module was designed so as to simulate what it is like to work for a client on a project as part of a team. The process consisted of working alongside another programmer as well as designers, producers, artists and a sound engineer. Weekly meetings were had with the client throughout development  where they would check in on the progress, give feedback, critiques and advice.

We were tasked with creating a Virtual Reality interactive space game that could be used as a fun and interesting way to get people interested in space and scientific fields to do with space like astrophysics and astronomy. As a team we spent the first semester designing the prototype we were to make and through this process I was able to learn a lot about design and scope as well as how to work well as part of a team. During the design process me and the other programmer on the team worked on creating prototypes to test the mechanics and other design decisions to make sure they were feasible and to have a tangible representation of the design to demonstrate to the clients. We would demo these prototypes weekly for the client to show progress as well as to get feed back from them. Through second semester we worked on creating the full prototype for the project and I learnt a great deal about making a game using Virtual reality and about creating games using Unreal 4. It was a tough process and a lot went wrong but we were able to produce a prototype that showed of well our ideas in the end and I learnt a great deal about game development as part of a team with the many benefits as well as the trials and tribulations that it can entail.
Continue reading

Gerstner Wave and Buoyancy

Video


Details


Programming Language: C++

Engine: Unreal 4

Project Type: University/Personal Project.

 

Technical Features


Gerstner Waves Material

Using Unreal 4’s Material visual scripting I created  a material that used Gerstner waves to appear like an ocean when placed on a plane.

Gerstner Waves Algorithm

In C++ a Gerstner wave algorithm was implemented using the same values as the material. This was based on NVIDIA’s tutorial from the book GPU Gems.

Buoyancy

A buoyancy system was created to react to these waves by placing points around any mesh and apply force to the mesh base don what points where above or below the waves.

About


Starting out originally as a personal fun project to see how Gerstner Waves worked it evolved into being used as my Gameplay Mechanics module coursework.  By using a combination of C++ and Unreal 4’s material system I was able to create an impressive looking wave material that any object would react to with buoyancy. After working on the waves for a while I realized that if i were to create a buoyancy system this project would be a perfect fit for my Gameplay Mechanics coursework. So I continued to work on it and implement a buoyancy system and got the project into a good state to submit. I’m very glad i was able to use this personal project as course work as well as for fun, since it was a lot of fun to work on and I got an A+ for this module.

GitHub


 

Genetic Algorithm and Simulated Anealing

Details


Programming Language: C++

Environment: Visual Studio 2017 with SFML

Project Type: University.

 

Technical Features


Genetic Algorithm

Two AI techniques were used for this project, the first being a genetic algorithm, a type of AI that is used to find the optimal solution to problem by evolving a population of solutions till the best or at least a vastly improved solution is left.

Simulated Annealing

Simulated annealing is also an optimization technique that is based of off what happens to metal when it is heated and slowly cooled. This can be achieved in code by using a temperature variable that lowers over time. this technique allows for a lot of good and bad solution initially but as the temperature is lowered more good and less bad solutions remain.

Traveling Salesman Problem

The traveling salesman problem is a very common optimization problem in which a salesman must find the most efficient route around several points. the two optimization techniques were picked for their ability to tackle this problem so their performance and effectiveness could be compared..

About


An application created for my 3rd year Artificial Intelligence module that uses either a Genetic algorithm or Simulated Annealing algorithm to solve the Travailing Salesman problem. This is possibly the most fun piece of course work I’ve worked on as learning about artificial intelligence and then creating an application from what I’ve learnt was incredibly interesting. We were given free reign as to what to research into and create as long as it was artificial intelligence based and genetic algorithms really peaked my interest as I found the way in which they worked fascinating.

The task itself was to create a problem and then choose two different AI techniques and compare how they differ in approaching the problem and how successful they were. After looking into genetic algorithms it seamed that the travelling salesman problem would be a good fit. Simulated annealing was chosen as the second algorithm because while I was creating the genetic algorithm I ran into local minima problems, while I employed several techniques to over come this I wanted to compare the genetic algorithm to an algorithm that didn’t encounter local minima or local maxima problems as much. After reading several papers and articles and papers I came across simulated annealing and found it possibly even more interesting than genetic algorithms. They worked similarly however instead of being based of off biology and genomes like genetic algorithms, simulated annealing is based of off the system for cooling metal in smelting. Both of these algorithms were very interesting and fun to learn about, research and develop and I am quite happy with the result as I got an A for this coursework.