Mechamania

Exoleap

I did my graduation internship at this company. Mechamania offered me a position after I graduated which I accepted. Because of the small amount of technical developers on the team I took on many roles. I could fill all those roles because I have a broad knowledge base and I can quickly learn and adapt to new challenges.


Mechamania develops an experience that combines a VR game with a motion simulator. The motion simulator is designed and made by the company, it features movement along all six degrees of freedom. The simulator is designed to give a high level of immersion by having a wide range of movement and precision. In the VR game which is named “Exoleap”, players are transported to a distant planet to investigate a colony of which contact has been lost. On the planet the players fly over canyons, explore caves and come in contact with hostile aliens.

  • Team Size: 6-10
  • Platforms: PC, In-house simulator
  • Engine: Motor(in-house Engine), Unreal Engine 4
  • Roles:
    • AI programmer
    • Gameplay programmer
    • Engine programmer
    • Hardware specialist
    • System administrator
    • Intern supervisor


Featured Work

The Forcefield

Players fly in a world full of obstacles and get shot at. The ship needed a forcefield to stop such objects from colliding into the ship. This forcefield would need a visual effect when it is triggered and a physics reaction on the ship. In the design this shield should behave like a balloon: when you press it on one side, it visually caves in and lights up. The ship gets a force away from the pressed side. This force should increase as the penetration gets deeper.


This problem had many challenges to solve. To name a few: How to detect collisions? how would those collisions translate to the force applied to the ship? how do this (large)force translate to the simulator? How do the collisions be visible in the visual mesh of the forcefield? I designed a first prototype and implemented this.

The first prototype was functional. But it had some minor issues. The visuals of the forcefield would sometimes clip though uneven obstacles due to the low samplesize of collisions points. Another issue was that the ship would go though walls on high speed due the low force applied to the ship which was not enough to stop momentum of the ship. If I solved this by increasing the force applied to the ship, the bounce caused the ship to be fired away and the shield was barely visible on low speed bumps.


In the second prototype I solved both problems. For the visualization I calculated the possible error in between collision points and added an offset to the vertices of the forcefield. This caused a little distance between the collision and the visualization but this was not visible from the player’s perspective. The problem with the force I solved by changing the force to an impulse. This impulse is split in two parts(A&B) and added.

A - The force that linearly increases with the penetration together with a small constant force. This should move the ship outside of the collision when the ship is not moving.
B - The force that exponentially increases with the speed towards that collision. This should stop any momentum the ship has towards the collisions

This prototype proved to be very effective. The visuals in combination with the amount of force the forcefield applies felt very believable for the player. Whenever a player flies into a wall, the forcefield will stop the momentum towards the wall and pushes the ship out of collision.


Collision Avoidance System (CAS)

The forcefield helps to soften the blow of a collision but does not prevent it. This experience is targeted for a broad public of which not many have flown before and may bump into walls a lot during their flight in Exoleap. For this reason a system had to be designed which would help the player flying but the player should not get the feeling that it is losing control to this system. Best case scenario would be that the player does not sense this system at all. The system should nudge the ship in the right direction but should not fully prevent collisions, after all we still want the player to bump into walls or crash into them if the players want that. I was tasked to design and implement this system which took a lot of research in which I came up with a concept for this problem.

I theorized a concept where the player always has a certain goal in mind to move towards. We can use that to detect any possible collisions and save routes towards that goal. So this design consist of two parts:

A - A system which detects the intentions of the player
B - A system which uses the intention of the player and detect any collisions in the direct path towards that goal. If there are any it nudges the ship in a safe direction.


After the concept was accepted I implemented both systems. The intention of the player is calculated by reading the input of the steering wheel, which gives a UV coordinate of the screen, this is the approximation of the goal of the player. The second system divides the screen into areas in which the player can go, for example if the player is flying in a tunnel which is splitting into two in front of the player then there would be two areas. An area is chosen by using the intent of the player. In that area it searches for the safest path by looking at the depth buffer and finding the deepest point which is the closest to the player’s intent which results in another UV coordinate. The difference between intent UV and the safest UV is then used to nudge the ship in the right direction.


Drones

The world in Exoleap is beautiful but can get boring after a while without any moving objects. Drones solve this and it also gives the player something to shoot at. These drones should move around and behave differently depending on the situation. I designed and implemented the behaviour system of the drones. It consists of 2 layers, high-level and low level.

High level:
The high level behavior is defined inside a behavior tree of UE4. The behavior decides what the drone should do on a high level. Like chasing the player, shooting, patrolling or moving to a specific point. The high level behavior generates a goal direction and rotation for the drone to move towards

Low-Level
This takes in the direction and rotation given by the high level and uses context steering to handle low level behaviour. Context steering is explained in the book: Game AI pro 2; chapter 18. The main challenge was to design a context steering system which works in 3d since the orginal design is 2d. Which I solved together with an intern which allowed the drones to move around obstacles.

The result was a drone which was able to make high level decisions and move around obstacles fluently.


SVN

We had to switch version control to svn. I set up an on-site server, installed SVN Server on it and arranged security and automated backups. I was responsible for maintaining this server.

Hardware specialist

I was responsible for computer Hardware. Whenever a computer part needed replacement or upgrading I gave advice about the part and installed the parts. Whenever a machine misbehaved, I would investigate and solve the problem.

Intern supervisor

Mechamania had an intern for gameplay programming which I supervised. We would have regular meetings about his tasks and helped him with any problems he encountered