Local multiplayer should be the shining point of AR games where players actually feels doing real stuffs together.
With the new power of ARKit and ARCore, the phones are now be able to interpret locations even without image processing. This leads to the possibility of allowing players to interact with each other in AR world.
For a simple example: We all have this fantasy of shooting each other in real world like in FPS games. Now we may actually can with just normal phone.
Father.io was successfully crowdfunded in April 2016 and recently announced to have went into mass production.
The project is a bit ambiguous, combining two separated game loops: a geolocation loop where player claims territory, and an AR first-person-shooter gameplay where player uses a laser-tag like accessory.
It is branded as a Massive Multiplayer Laser Tag gameincludes a phone app and an accessory to be attached to the phone. This is the trailer for the product.
The downside of this product is the player is required to have an accessory to enjoy the game. The upside is, it is supposed to be very accurate, smooth and easy to set up.
The research being proposed here aims to solve the problemwithout external accessories and allows anyone with a smartphone to enjoy AR local multiplayer.
The main problem of AR local multiplayer is for a phone to know where other phones location is in 3D world. My proposition here is setting up a transformation matrix between 2 phones and calculate the relative position based on absolute position recognized on each phone.
Let there are 2 phones named A and B, with independent 3D worlds named WA and WB.
At setup step, with AR camera ray cast:
On phone A, find the positions PA/A of phone A and PB/A of phone B in WA,
On phone B, find the positions PA/B of phone A and PB/B of phone B in WB,
While the zero point in the two worlds are different, the vector from phone A to phone B in the two worlds should fit a constant transformation. Therefore we can form the transform matrix TB→A to project a vector from WB to WA as follow: