Monday, 16 May 2016

2016, Jobs and the future!

If this year has taught me anything, it has taught me this : I am not very good at blogging. 

Some day I might get into the habit of actually updating here regularly with projects and other cool stuff that I'm tinkering about with, but until then here is a basic life update with a vague promise to continue updating! 

So a lot has happened since October 2015 and finishing the MSc. A new year has dawned, new technologies and games have been released, VR has become a lot bigger and I now have a job! 

Relatively recently I have started a job at Codeplay Software as a Software Engineer. Codeplay are a group of heterogeneous systems experts who develop tools, as well as other projects, targeting GPUs and other hardware. They do a lot of other things so please check out the site for more information : https://www.codeplay.com/ 

Since starting at Codeplay in April I've started working on the ComputeAorta project and had the great opportunity to visit the Silicon Milk Roundabout tech job fair in London, meeting lots of interesting potential applicants. So far I'm having a great time and look forward to learning much more as well as expanding and contributing my skills in my role.

Prior to this I worked as a Lab Associate for Disney Research in Edinburgh from the New Year up until starting at Codeplay. Whilst there I got the chance to see and work on a few interesting projects that Disney is working on. I look forward to seeing how the projects I contributed prototypes to turn out in the years to come! 

As such, 2016 has been a pretty busy but fulfilling year for me so far and I'm looking forward to having this trend continue. Lots of stuff due on the horizon and I'm hoping that once I am more settled I will be able to better divide my time up between personal projects, gaming and work. 

Here's hoping that I will finally get back into these posts with more interesting updates about some of the stuff I'm working on. Until that time, thanks for reading!


Email: markmmiller@hotmail.co.uk
Steam: 7thsanctum

Youtube: 7thsanctum
Github: 7thsanctum

Tuesday, 13 October 2015

Completing the MSc : The thesis

It took me a while to get back in to writing this up but I'm here doing it at last!

I've now finished the MSc in Pervasive Parallelism that I was working on over the past year. During this time I've met some good and some crazy people and had opportunities to participate in and learn about cool technologies and projects.

For my thesis I developed a motion retargeting system that took advantage of the GPU via OpenCL. The thesis was titled "Parallel relationship descriptors for real-time motion adaptation of crowds".

Figure 1 - Project Poster! (click to view)
For this system I extended the concept of Relationship Descriptors by Al-Ashqar. This method works by mapping descriptor points to the surface of the environment that an animation is moved through. If the terrain deforms, the position of the descriptor points will be updated and then we can alter the joints of the animation. These descriptors map a relationship between the joints of the animation and the environment itself. One of the major downsides of this system however is the computational complexity especially when extending to many characters. As a result the previous system only allowed retargeting of a few characters at interactive frame rates. Alongside this, higher numbers of descriptors can drastically affect performance.

For my system I evaluated all the joints across all characters in the system simultaneously. Each character could have as many as 30 joints. As such in a crowd of 512 characters this would mean 15,360 joints to retarget. On top of this, the number of descriptors (dependent on resolution of the sampling and method) can be anywhere from 50 to 200 leading to over 1 million relationships to be evaluated. For most of the steps in the process, we can evaluate in parallel and due to the data parallel nature of the task the GPU looks to be a suitable option. By simply evaluating all the joints simultaneously and performing the IK and joint constraining steps at the end we manage to achieve 42x speed up over a sequential version of the same system allowing us to retarget and render crowds of over 500 characters in real-time.


Overall we managed to achieve the goal of the project which was to apply motion retargeting to crowd in real-time. The work I did for this project will be presented as part of a paper at SIGGRAPH conference on Motion in Games 2015 titled "Carpet Unrolling for Character Control on Uneven Terrain". The video for this can be seen above. 

For the next stage of this project, we need to combine this system with other crowd technologies and collision avoidance to make a fully featured crowd system. As well as this, there are several parts of the system that could use further optimisation to increase performance, such as evaluating on a per descriptor basis instead and improved selection of the descriptors so we don't have to filter through them.


Email: markmmiller@hotmail.co.uk
Xbox Live: Dr Death MK 2
Steam: 7thsanctum

Origin: 7thsanctum
Youtube: 7thsanctum
Github: 7thsanctum

Wednesday, 1 April 2015

Msc, Updates and getting back to blogging

It's been a long time since I last updated this blog and lots has happened in that time! Spent time working at Rockstar, making progress on my Msc thesis and much more. As such, I think it is time I start to update this page some more again, as a way of keeping track of events as they go by. I will leave this post as a declaration of intent! Hopefully I get back to posting within the next few days. :)


Email: markmmiller@hotmail.co.uk
Steam: 7thsanctum

Youtube: 7thsanctum
Github: 7thsanctum

Friday, 9 May 2014

The End of University and Thoughts on the Future

Hey there, so now University has been officially completed! My honours project and viva voce have been completed, all exams are done and now it's just a matter of deciding what to do for the future. My marks and grades should come in the beginning of June and my graduation will be in July. In the meantime however I need to decide between two courses of action for the immediate future and that is either getting a job or post-graduate education. Currently I have received an offer for a funded PhD in Pervasive Parallelism at Edinburgh University which stands as a good contender, however on the opposing side getting a job in industry is an attractive option. Money and experience is always a good thing. As such these last couple of weeks have been a form of turmoil as I slingshot between the two but there's not much that can be done until I receive back all my formal offers. As such I shall post an update in the coming weeks.

However, in the meantime, now that university is over my goal is to continue honing the skills I've picked up over my time here. Alongside this I aim to finish many of the side projects that I haven't had time for over the past few weeks not to mention all the unplayed games in my steam library that need finishing. Currently I'm in the process of writing a neural network library, the goal of which is to make an optimised package that will integrate into your C++ project with ease to provide automatic fast neural networks. All you will have to deal with on your end is deciding network topologies and normalising the input data. It's nearly complete but most of the trouble is getting my head around the neural networks in the first place and making sure the classes actually work. I'll throw up a link to the github repo once I get version 1.0 working properly.

Anyways, apart from these things I'm back to writing and game design as well and will be looking into Unreal Engine 4 stuff as I'm hoping to learn that over the next few weeks. Not much else to say really other than it's been a fun few years at university but I'm looking forward to moving on to bigger and better things! 


Email: markmmiller@hotmail.co.uk
Xbox Live: Dr Death MK 2
Steam: 7thsanctum

Origin: 7thsanctum
Youtube: 7thsanctum
Github: 7thsanctum

Thursday, 8 May 2014

Let's Play - Shadowrun Returns

What is it?
Shadowrun Returns is a single player role playing game with tactical turn based combat elements made by Harebrained Schemes. It's also a Kickstarter funded game released in mid-2013 based upon the Shadowrun table-top boardgame. Whilst it include a campaign, Dead Mans Switch, there is also support for the Steam workshop and comes with custom mission tools so that users can share and play each others campaigns. 



What is it about?
The main campaign included follows the story of your character investigating the mysterious death of a friend and trying to track down the killer in 2054 Seattle. The characters motivations are a combination of honour, greed and nothing better to do. The Dead Mans Switch story lasts around 11 hours and presents a good and well polished story with many interesting characters and conversation options. Whilst this included campaign is interesting and enjoyable, giving back a semblance of old noir style detective stories, the real gem is in the use of the Steam Workshop and included mission building tools to allow sharing of stories.



Combat in the game takes place in a turn based manner, similar to X-Com. The primary skills that are used are take the form of ranged, close and magical combat and are used dependent on your characters abilities. As such, a shaman is more likely to use summoning or magical attacks to fight enemies. 


However, forming teams of diverse runners is important for victory. Shamans can often boost accuracy and provide other shield bonuses for team-mates, whilst deckers can hack into the matrix to override sentry guns and other systems. Alongside this, deckers engage in combat with AI systems and other deckers within the matrix and combat takes part in a similar manner to the physical world. 

As the player levels up, using karma, they can upgrade their stats to provide combat bonuses in different skills. These include the ability to use advanced decking equipment, improved weapon accuracy, better conversation options and more. 


Where can I get it?
Shadowrun Returns is available for PC(Mac and Windows), iOS, Android and Linux. Currently it is available on the Steam and Humble store pages. There is also a sequel out called Dragonfall which is available as DLC. Extra campaigns and stories are available via the steam workshop. I am currently playing through Shadowrun Unlimited which provides a very interesting campaign so far and can be found here.


What do you think?
Overall Shadowrun Returns is a very interesting RPG game, the included campaign is good and provides enough to whet your appetite however the inclusion of steam workshop and custom content support is what makes this game worthwhile. Already campaigns such as Shadowrun Unlimited and Jacked-Up have provided extended hours of gameplay and interesting and novel additions to gameplay functionality such as safe houses. Although this is the case, it would've been nice if more official campaigns were included with the base game.


The game itself follows closely to the original Shadowrun lore and ties the campaign into the mythos aided by the fact that Jordan Weisman, creator of the original Shadowrun started this project. This merger of cyberpunk and fantasy also makes for a very interesting setting which I personally enjoy a lot. Apart from this, the in-game artwork and background environments are beautiful and further emphasise the dystopian nature of the setting. The lack of voice recordings is offset by the (for the most part) well written story and appropriate soundtrack.

Rating : 8 / 10



Email: markmmiller@hotmail.co.uk
Xbox Live: Dr Death MK 2
Steam: 7thsanctum

Origin: 7thsanctum
Youtube: 7thsanctum
Github: 7thsanctum

Monday, 14 April 2014

Honours Project - Poster Presentation, Dissertation Writing and the Final Push!

My honours project and final year of my bachelors degree are coming to a close. The final submission data is the 28th of April but my goal is to have everything finished up a tad earlier than that. Hopefully by the 21st everything shall be finished and prepared for printing, then a few exams and finally out into the big bad world of post-graduate employment or further education!

Anyways, this post is a quick update of the final submitted status of the project. I won't have time to add more in before the projects finale but will no doubt continue to tinker and improve it over summer. Firstly, the poster.

Figure 1 - Final Poster! (Click to Enlarge)
So I presented this poster last week at the poster presentation sessions and, for the most part, everyone understood the purpose and goals of the project. As for the production of the final project, a fair amount of progress was made and the results were also fair. Further improvements could have been gained from implementing sparse voxel octrees, however this is something I'll have to add in the future.

 Some of the interesting images and effects that were gathered over the project can be seen below.

Figure 2 - Simplex Noise Data
 The above blobby terrain was a simplex noise structure, rendered, in this case at 128^3 resolution.

Figure 3 - Floating Rock
One of the more interesting structures and prime inspirations for this project was the floating rock structure made by Florian Boesch in this post here
Figure 4 - Perlin Noise Landscape
Perlin noise was also implemented to generate landscapes, much like in games such as Minecraft.

Figure 5 - Cut out of Sphere
A few other interesting effects were found, included after the optimizations of certain structures such as the sphere, which created interesting geometric patterns on the inside.

The main purpose for this project was the use and implementation of geometry shaders to prove their effectiveness for a task such as this. Whilst the engine produced worked well and could render things efficiently, a more scientific method would be required to prove how effective it is in comparison to other techniques.

Anyways, the main task for just now is getting the dissertation sorted and writing up about all the findings. On an unrelated note, saw this awesome project that generates colourful triangle based backgrounds using D3. Time to get back to the grind...


Email: markmmiller@hotmail.co.uk
Xbox Live: Dr Death MK 2
Steam: 7thsanctum

Origin: 7thsanctum
Youtube: 7thsanctum
Github: 7thsanctum

Tuesday, 11 March 2014

Honours Project Update - DirectX

Hey again, it's been a while since I've written about the status of my honours project and I've added a few features over the past few weeks.

I've added in some new data to give more interesting renderings compared with the old solid rainbow block. The main ones are a perlin noise heightmap using libnoise and a simplex noise dataset. Click on the pictures to read the text!
Figure 1 - Heightmap (Perlin Noise)

In the screenshot below, approx 1.5 million cubes are being drawn at above 40fps consistantly.

Figure 2 - Simplex Noise (192^3)
I have also added multi-texturing but still need to modify my application to make better use of the type distribution. This allows the engine to currently render different block types with different textures. 


Currently, the optimisations I have in place only remove inactive and fully surrounded cubes from being rendered, because of this I get a good performance for fixed datasets that do not change. However to update it or perform naive frustum culling it would slow it down considerably as my checks do this against every cell in the system. My next step is to fix this using the power of octrees! This is why in the gif above the number of cubes being rendered does not decrease as the camera moves. All 1.5 million of these points are being sent to the GPU and drawn into cubes using the geometry shader! 

A couple of other minor things I've added to my engine, frustum culling (although I need to combine this with multi-threading and octrees before it becomes effective), back face culling in the geometry shader (which has reduced the number of vertices I need by half), text rendering and extra controls. 

Main things I need to work on now are my octree implementation and improvements to my lighting model, I also need to gather more concrete performance data from other engines to find out whether or not I'm managing to improve on anything. However, I'm confident my use of the Geometry shader should provide similar performance benefits, if not greater, to the usage of vertex buffer objects once I manage to get octrees implemented. The geometry shader is a powerful stage and has allowed me to render over 11 million cubes without optimisation. Granted this is at a measly 10fps on a GTX Titan, but it does show that with the correct optimisation in place it can render large datasets well. The task now is filtering the data before it reaches the GPU. The dataset below is a solid 224^3 cube with all cells active and all cells being drawn, no filtering is performed.

Figure 3 - Current Max number of cubes (11 Million)


Anyways check out the video below to see a slightly older version of the application with consistently updating heightmaps.



Email: markmmiller@hotmail.co.uk
Xbox Live: Dr Death MK 2
Steam: 7thsanctum

Origin: 7thsanctum
Youtube: 7thsanctum
Github: 7thsanctum

Tuesday, 11 February 2014

GTX Titan Upgrade, Dogecoin and a New Domain Name!

A couple of interesting things, firstly I have registered the markmmiller.co.uk domain name so this blog can now be found at blog.markmmiller.co.uk. As well as this my main site is still a work in progress but I have been experimenting with Linux and have set up a Raspberry Pi to act as a web server for hosting. Again the main site at www.markmmiller.co.uk but if you head over the site is being hosted from my Raspberry Pi as we speak! 

In other news I applied for the Nvidia Academic hardware donation program a few weeks back for a GPU to help with my research into parallel programming and to much surprise I managed to get approved for a GTX Titan. The Titan finally arrived today and, for once, managed to install it without too much bother.

Figure 1 - GTX Titan

Figure 2 - GTX Titan
This was a significant upgrade to my ageing GTX 460 so hopefully I will be able to levy a lot more performance in my applications and I will attempt to benchmark both give a comparison of the performance gap between the two. Although the Titan isn't a mid-range card, hopefully it is an indication of the levels of performance that will become mainstream in years to come.

Figure 3 - MSI GTX 460
The other thing I have recently embarked upon is altcoin mining, mainly Dogecoin for now. With my GTX 460 I managed to achieve a 120 K/hash rate but the Titan on the other hand doesn't work with my app so I shall update when I find out. As for the temperature, both the Hawk and Titan are running around the same temperature idle but currently the Titan is having trouble turning its fans on when it gets hot. I will look into this later. Anyways, I shall get to bench marking soon but first is a matter of installing the programs. Check out the photos below to see what it's like in the case!

Figure 4 - Case Interior

Figure 5 - Titan Closeup
Be sure to click on the above photos to see them in HD. Anyways, back to more University and Honours project work for me, I'll update you guys soon!

Email: markmmiller@hotmail.co.uk
Xbox Live: Dr Death MK 2
Steam: 7thsanctum

Origin: 7thsanctum
Youtube: 7thsanctum
Github: 7thsanctum