Gerard's Portfolio
About Contact
  • Links
  • About
  • Contact
  • C# Unity3D alternative master server February 2017
  • About

    Master Server: A centralised server for accepting and distributing available game servers.

    I undertook this project originally as part of a much larger and complete multiplayer architecture for the learning experience. My primary motivation to reinvigorate my knowledge and exceed the shortcomings of Archmage. Scope being as large as it was and time escaping, I reduced the scope to a solution of what I saw as a shortcoming of Unity3D itself. The shortcoming as I saw it lay within the pricing scheme for their multiplayer services. That is, this service charges for all the data sent through it, while necessitating all data for a multiplayer game to be sent through the same service. With Unity3D being, as I see it, an engine for indie developers trying to make it big, “big” would be limited to what is immediately fundable using these services. My solution to replace these services provides a master server with minimal other functionality in order to keep running costs low. Accompanying this, I have also developed a client to interface the master server as well as distribute the rich information about available game server necessary for players to make informed decisions. This project gave me a thorough understanding of Unity3D’s networking LLAPI and refined my technique for socket based servers.

    Master Server Repository
    Master Server Client Repository

    Exemplar Code

    Source: https://bitbucket.org/gerardryan/unity3d-master-server-client

    Technologies Used

    Unity3D SocketsServer C# Unity3D LLAPI

  • Bachelor of Games and Interactive Entertainment July 2016
  • About

    I completed the BGIE majoring in Software Technologies and minoring in Advanced software Technologies at QUT in Three years and one semester. Though claiming to be primarily games related it was essentially a bachelor of IT with games electives and a games related capstone project. Despite receiving the lacklustre content of the general software engineering units anyway, I would not choose the bachelor of IT given another chance. The BGIE’s capstone project was the real draw to this bachelor and proved to be an excellent experience working and communicating with team members from completely different educational backgrounds to complete a product.

    Results

    Year Semester Title Mark Grade Credit Points
    20161Microprocessors and Digital Systems100%High Distinction12
    20161High Performance and Parallel Computing93%High Distinction12
    20161Network and Systems Administration93%High Distinction12
    20161Modelling Information Systems88%High Distinction12
    20152Games Project83%Distinction24
    20152Modelling and Animation Techniques82%Distinction12
    20151Discrete Structures96%High Distinction12
    20151Game Project Design84%Distinction12
    20151Real Time Rendering Techniques80%Distinction12
    20151AI for Games96%High Distinction12
    20142Systems Programming79%Distinction12
    20142Agile Software DevelopmentN/ADistinction12
    20142Mathematical Tools for Computing86%High Distinction12
    20141Computer Technology Fundamentals88%High Distinction12
    20141Software Development81%Distinction12
    20141Data Structures and Algorithms93%High Distinction12
    20132Introduction to Games Production93%High Distinction12
    20132Networks92%High Distinction12
    20132Programming93%High Distinction12
    20131Industry Insights77%Distinction12
    20131Building IT Systems95%High Distinction12
    20131Computer Game Studies76%Distinction12
    20131Introducing Design77%Distinction12

    2015 Dean's List Award - Semester 1 - Science and Engineering

    2016 Dean's List Award - Semester 1 - Science and Engineering

    Course GPA: 6.542

  • JS gerard-ryan.com July 2016
  • About

    This project was about showing of what web-based technologies I am capable of utilizing as well as having a cool portfolio to show myself off with concrete examples. Notable tasks were repurposing this Material Framework to allow different navbar layouts for varying viewing devices, and editing/adding additional CSS like this groovy drop down box.

    Exemplar Code

    Source: https://bitbucket.org/gerardryan/gerardryan.bitbucket.org

    Technologies Used

    CSS3 HTML5 JS Apache2

  • C CAB202 - Class June 2016
  • About

    I undertook this class as an elective in my final semester. My intentions were to concrete my programming foundations with knowledge of interfacing hardware at a low level and working in minimal memory environments such as microcontrollers. While accumulating 100% of the marks for this class I obtained a new perspective on bit manipulation and a better understanding of hardware and how processes interface it. With IoT becoming quite popular and more commonly used I believe that the understanding of serial communication protocols such as USART from microcontrollers will prove to be a very beneficial learning outcome. A notable personal achievement with the first assignment was developing an extensible and typical game loop with functioning delta time and virtual joysticks, though not required by specification of the first assignment.

    Exemplar Code

    Source: https://bitbucket.org/gerardryan/cab202

    Technologies Used

    C Makefile Microcontrollers Serial Communication Bitwize

  • HLSL Parallel Fast Fourier transform June 2016
  • About

    This project was undertaken as an assignment for a parallel programming class, the objective was to optimize a selected piece of software and ideally having it running faster than the original sequential code. Unfortunately, I did not achieve a speed up due to the nature of GP-GPU computing and the data sizes of the selected software. However, I still achieved great marks due to achieving scalable parallelism (shown below) and undertaking a significantly difficult problem and coming out the other side alive with something to show. Though I must admit, only just. This project taught me not only the current extent of GP-GPU computing but also the limitations and bottlenecks that must be considered when optimizing with this technology. Another notable personal achievement with this assessment piece was implementing essentially AFR with regards to compute shaders. Specifically, as I had GPU devices available I allocated problems to each device alternatively reducing some of the memory overheads and reducing the overall runtime.

    Exemplar Code

    Technologies Used

    HLSL Directcompute SharpDX GP-GPU Parallel Programming

  • C# Array based AVL Tree May 2016
  • About

    This project was initially undertaken as a key data structure for implementing A* in a compute shader for an assignment on parallel computing. However Due to the scope of this idea and time constraints for the assignment I had to go with another idea. I consider this project notable as extensive research showed no fully functional array based AVL tree implementation was available to translate and adjust as required. I utilized this repository as a template to initially start but the tree rotations were incomplete for my needs and had to implement them myself from theory alone. In hindsight the constant and almost random additions to this data structure by an A* algorithm would almost render it useless for my intended project and would have been better off constructing my own memory allocation program within a compute shader.

    Exemplar Code

    Source: https://bitbucket.org/gerardryan/array-based-avl-tree/

    Technologies Used

    C# Data Structures Algorithms Compute Shader

  • C GPIO WebSocket Server February 2016
  • About

    This was another personal project that was the inspired by and the initial foundation for long running project to make a remote controlled dart cannon. Other motivations for this project were to have an extensible and open source piece for my portfolio. This project was my first attempt at implementing a standard protocol (The WebSocket Protocol) and consequently my first experience of bit manipulation which proved to take up the most development time. As this protocol was only a minor part of this project it was only implemented to the minimum requirements for correct functionality, optional features such as security were left unimplemented. Though considerations were made and the framework shown here would allow these to be added easily. With regards to the overall functionality of having a WebSocket communicate with general input/output pins, this project also allowed me to refine my skills with multithreaded systems, specifically, a multithreaded socket server. After completing this project, I then modified it slightly to allow hardcoded security features for working with stepper motors. Source shown here and an image of the hardware running the server below.

    Remote controlled webcam using stepper motor websocket server

    Exemplar Code

    Source: https://bitbucket.org/gerardryan/gpio-websocket-server

    Technologies Used

    C WebSockets Multithreadded Server GPIO Bitwise Protocol

  • C# Archmage October 2015
  • About

    Archmage, a mage themed, multiplayer third person shooter, with MOBA elements, was the capstone project for my Batchelor of Games and Interactive Entertainment. Archmage was completed within the academic year of 2015 and our team was awarded 6/7 for the end product. The team consisted of 7 persons for the majority of the term, their roles were a Programmer/Designer, a Designer, a character artist, an environmental artist, a texture and graphic artist, another programmer and myself, also a programmer. My roles primarily consisted with the network code, constructing production tools and some minor graphics programming, Though within these roles the Network code took up the vast majority of the time as it tended to be the most problematic.

    Download

    Archmage

    Trailer

    Technologies Used

    C# Unity Multiplayer networking Server

  • CG Global Illumination with CG May 2015
  • About

    This Unity3D project was undertaken as a piece of assessment for a real time rendering class. This class was first attempt at GPU programming and my introduction into their unforgiving nature. Despite being foretold as one of the harder classes QUT had to offer from the start, I was still able to achieve 28/30 for this project and 80% of the marks overall. Within the countless hours spent on this assessment alone I implemented common shader effects such as shadow mapping, Displacement Mapping (and the collision detection on unity’s side), Billboarding and various types light sources with normal mapping. Though this was my first experience with CG shaders I believe it was an excellent example of the quality of shaders I am capable of as well as a great foundation for GPU experimentation later to come.

    Exemplar Code

    Technologies Used

    CG Unity3D Shaders GPU

  • C# A* and Reactive Agents April 2015
  • About

    This Project was undertaken as a piece of assessment for an AI for Games class, this assessment required us to implement reactive agents using finite state machines. Using Unity3D I chose to implemented the agent receivers using C# delegates, this allowed for easily maintainable and extensible code as well as an ultimately simple implementation. This assessment piece also taught me the widely used A* path finding algorithm. My implementation of this algorithm made use of Unity3D’s ray casting classes to allow a dynamic pathfinding which allowed agents to avoid dynamically moving obstacles as well as working for changing environments. Though this implementation is processor intensive it was sufficiently suitable for the size of the level I was working with. Full marks were achieved for this piece of assessment.

    Finite State Machine Example

    Exemplar Code

    Technologies Used

    Artificial Intelligence A* Finite State Machines Delegates

  • C++ Road Network Mapping June 2014
  • About

    This project was undertaken as a piece of assessment for a data structures and algorithms class. This piece of assessment required us to implement a weighted, undirected graph where vertices were locations on a map, with this we then had to then implement algorithms to find the minimum spanning tree and shortest paths such as Dijkstra’s single source shortest path and breadth first search. This piece of assessment gave me a thorough understanding of graphs and all their benefits and applications as well as a taste of how intriguing algorithms can be. Achieving 29/30 for this assessment also makes it an excellent example of the C++ skills I acquired.

    Exemplar Code

    Technologies Used

    C++ Data Structures Algorithms Graphs Trees