Developing for AR

Below is a list of resources to get started on AR development.

Last update: 3/1/2018

There are two primary methods for developing AR content; native development (for games and robust apps) and web development (short experiences, installations, etc.). However, as of early 2018, webAR is still pretty early.

Tools for Native Development

Unity 3D: multipurpose and cross-platform game engine

Develop interactive experiences. Flexible enough for games, AR, VR, and installations. Has an asset store. Importantly, many services and tools support Unity nearly as soon as native support.

Unreal: multipurpose and cross-platform game engine

Began as engine for AAA development. Inexperienced developers may be overwhelmed. That said, very powerful engine and open source!

Libraries and SDKs for AR in Unity

ARKit: Apple’s AR solution for iOS

Provides several great features for doing AR. Should be around for awhile.

ARCore: Google's AR solution for Android

Provides several great features for doing AR. Should be around for awhile.

Note: ARKit and ARCore are similar. Unity claims they will be integrating both of these SDKs internally in the coming year, allowing developers to code on an abstracted level from implementation.

Vuforia: AR platform with Unity integration

Great way to get started with many AR tools. Does not require much programming experience. Requires much less computer vision/computer graphics knowledge than a library like OpenCV.

Unity AR Multiplayer Test Project

Prototype by Unity developers. Can be useful for prototyping and looking at Unity networking. However, recent release of AR_Core causes errors, adn ARKit newer features are not support.

OpenCV for Unity

Costs money. Still worth it to save time. Full port of OpenCV for C# and Unity.

Wrld: dynamic 3D mapping tool

Dynamically generate 3D maps based off of GPS coordinates. Great for VR/AR geolocation games and using real world city data.

Mapbox: dynamic 3D mapping tools

Similar to Wrld. I have used Wrld but not Mapbox. Not sur which is better...

Google Map API for Unity

Recently announced Map API for Unity. If anyone has data, it is Google. Will add more info once tested.

Audio

Most audio progress right now is coming from virtual reality, where it plays a larger role in most experiences. However, these technologies hold promise for AR as well.

Bose AR

This one is very exciting, but a bit of an anomaly on the list. In many ways, Bose SDK is much more than just Audio tools, it is presented as Audio based AR. I am really looking forward to trying out their tech.

Resonance Audio by Google

Add some info developer of website! :)

Oculus Audio Tools

Add some info developer of website! :)

Networking

Unet: Unity networking solution

Robust multiplayer features like matchmaking, syncing data, etc. Down side, Unity ties multiplayer to their internal appID, along with other services like IAP.

Photon Networking: Cross platform multiplayer

Platform agnostic networking solution. Many features. Seems more flexible than Unet.

Personal Projects that are Open Source

Polygardens: Playful gardens anywhere

Small ARCore Demo I made with procedurally generated flowers. Open source.

buskAR: Performer and audience audio/visual experience

Prototype for a audio and visualization tools for street performers. Uses Photon networking, ARCore, and Heavy to compile Pure Data patches.

Tools for Web Development

WebAR is still early and experimental. Mozilla, Google,a nd others are very active in the WebGL, WebVR, WebAR space. I have little experience with the listed libraries however.

Three.ar.js: AR in the browser

Looks promising. Supports some ARKit and ARCore features. However, ARKit and ARCore features only work on devices that support them.

AR.js: AR in the browser

May support more devices than three.ar.js because it does not depend on ARCore/ARKit (I think).

Three.js: 3D library for the browser

Built on top of webgl. Good to be familiar with if doing webVR/webAR.

OpenCV.js: Port of OpenCV for javascript

Lacks many features (there is no marker AR support). May support more features at a later date.

OpenCV in Node: Run OpenCV on node server

Nice tutorial for OpenCV in Node doing gesture recognition

AR and other Services

There are services and tools not necessarily specific to AR but can be leveraged for interesting AR applications.

Google Cloud Vision: Computer vision services

Free tier for some features even after the free trial ends. Check out this great podcast on Voice of VR about Studio Tender Claws project using Google Vision and ARCore

IBM Watson: Natural language, image detection, text-to-speech

Voice recognition was easy to implement in Unity. Downside is--last time I checked at least--the services cost money after a free trial.

Microsoft Azure: host of computer vision and AI services

Many same services as others in list. Never used many Microsoft services, don’t know much about them. Might be forced to use them when developing for Windows Store (i.e. Hololens).

Pubnub: Chat messaging, simple networking

Easier to do simple networking than many game networking libraries like Photon and Unet. Also support more languages and devices. Downside it that it is not meant for real time games and it is expensive.

Firebase: Realtime database

Only support for Mobile right now and setting up for Mobile and Unity editor is really wonky. Nice and simple persistent database that works with Unity. Could be combined with geolocation and persistent user data in interesting ways.

What is the best way to get started for someone with little to know experience?

Do you want to develop on the web?

Yes

Three.ar.js - I have not used this yet, but seems the most promising and future proof.

No

Unity engine and ARCore/ARKit - Lot of tutorials, examples, and active developer community. There is an asset called Playmaker for those that want a visual programming language.

There are many, libraries and services out there. Above are just a few services I have used researched. If anyone has suggestions for other services, please let me know!