Outside of my university studies I am working on a game called OIL which was a winner of the Abertay Dare Academy competition. As a part of this prize I went to India on University business for over a week. I also had a family event booked in Sweden for a week prior to this which was booked before even entering the Dare Academy competition let alone receiving the prize, so it was not expected that my term would be as heavily impacted as it was. In addition to this throughout the term I have had to dedicate a not inconsiderable amount of time to the development of the OIL project which has lead to my honours progress being slower than I would have liked but required stopping work on the honours altogether for this period of time. Upon returning to the country a focus was placed on my other university work so that I could complete it leaving only my honours left to work on. Which will be the focus from next week.
I spent a lot of time in the previous week thinking about and researching threading only to come to the realisation that I should avoid it all together which was a fairly big hit on morale, I was very keen to dive into research without dedicating the time to think about the problem space an whether the approach I was researching was really the best one.
I also realised that my original aims for this semester were not to have a functioning version of the simulation anyway and that establishing a performance test would be a valuable first task as it could inform the simulation implementation.
I mostly thought about my approach to the project this week whilst also working on my other university work in preparation for my mid term break which will be explained in the next post.
I created a Unity project based on the SpatialOS starter project, which has a small amount of the core SpatialOS-Unity already implemented and within this project converted the java algorithm which I found into c# scripts.
My reasoning behind jumping straight into implementation before doing any documented planning of the software architecture was that I would be more likely to identify areas which would help make a solid groundwork to include in the plan. I personally find that it can be quite difficult to make a useful plan without a good understanding of the problem space and part of the understanding can be gained by having an initial attempt at implementation.
Straight away this proved to be the case as I came across an issue I had not considered: how I would structure the parallelisation of the algorithm. Most of my work this week was based around the research of threading and parallelisation within the contexts of Unity and SpatialOS. Unity is not a threadsafe api and neither is SpatialOS and so only limited calculations can be performed using the System.Thread namespace. The simulation to be performed is not an ’embarrassingly parallel’ problem as there is a lot of shared data access which does not help with the complexity of the task. The main issue arises from the need for each body to receive data about every other body each frame. The algorithm I had researched uses a controller class which stores all of the bodies and performs all body-body communication. This would not really work within the context of SpatialOS as a virtual machine or ‘worker’ should not need to have that kind of information about all other workers… the core way in which SpatialOS is constructed is broken.
A solution really needs to be found which utilises bodies as reasonably self contained units which perform their own neighbour searching and data acquisition (as well as their calculations) without reliance on a manger. This would mean their method of neighbour acquisition could be modified in a sequence as described in my proposal.
I researched the n-body simulation to look for existing algorithms as developing the simulation algorithm from scratch is not the purpose of the project. I found a java implementation on Princeton’s physics departments website which I analysed and thought would be a good starting point for building a prototype of the simulation
The final year of my undergraduate Computer Games Technology degree at Abertay University allows me to complete an honours project and dissertation relating to technology and games. Accompanying this project will be a development blog which tracks my progress on a week to week basis allowing me to look back on the project’s timeline as well as allowing others to follow my work. I will be using this blog to document my research as well as to record any key decisions and milestones as the project is developed toward completion.
My initial aims for the project, in addition to the course requirements, are to conduct useful research into an area that I find personally interesting. I will accompany this with a polished prototype application as either a means of demonstrating the use of an interesting technology or as a means of testing various techniques to answer a research question.
This first week was primarily about exploring possible ares of research and trying to narrow down on one particular subject area, to allow me to spend time deciding on a suitable question withing the subject area. Here are a few of the preliminary ideas I had which I looked into the feasibility of:
- Using a functional programming language (e.g. Haskell) to create a game and which types of game a functional language could be used to create
- Using a functional programming language (e.g. Haskell) on a GPU for parallel computing and/or rendering
- Pathfinding / flocking algorithms for groups of agents which can walk in formations or unorganised crowds.
- Using the SpatialOS platform for persistent, scalable, interactive simulations
- Creating a plug-in for a widely available game engine (Unity / Unreal) for integrating some aspects of Microsoft’s Azure platform.
After looking into these areas I constructed a decision matrix where I could assess the total benefit of each choice with respect to scope, how interested I would be in the project, how the resultant project would affect my employability and whether the technical requirements of the project satisfied the requirements of my degree program.
The decision matrix left SpatialOS and functional programming as the best options for me, which I took to a lecturer to speak to. It was pointed out that whilst the Haskell projects could be academically interesting it would be quite hard to form a good research question that would be measurable beyond “Is it possible to use Haskell for this purpose” – not really good enough of a question. The lecturer pointed out that Abertay University was about to be involved with a project where PhD students would be working with a professor to create a ‘4D simulation of a cancer tumour’ using the SpatialOS platform. This led me to research the professor running the project (Prof James Bown) and what exactly the project would entail. I was extremely interested in the project and decided to contact the professor to see if I would be able to use my honours project to provide some good preliminary research to help the PhD students get started.