Skip to content

amp-3d/amp-sdk-go

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

95 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AMP / Arc Media Platform

A turn-key solution for creating high-fidelity, multi-platform 3D experiences

What is AMP?

This repo contains Go interfaces and basic tools for the Arc Media Platform ("AMP"), a SDK for building multi-platform 3D and media-centric apps with pluggable infrastructure. The AMP client is a Unity based app driven by an embedded Go runtime. This means AMP is a "turn-key" 3D-based user interface solution allowing you rapidly publish a native app on Windows, macOS, Linux, Android, iOS, and most XR headsets while also delivering the benefits of Go.

This is interesting to:

  • Storage and content providers can deploy visually stunning user experiences using AMP, delivering an immersive media experience while attracting users. This is otherwise only available in AAA games and profoudly more painful through a pure web-based solution -- e.g. IPFS, Amazon's S3.
  • Library and app developers regard AMP as a flexible UI framework that allows them to focus on their core value proposition. Easily add your own 2D or 3D custom UI components while you get multi-platform build support out of the box. E.g. data visualization, geographical and spatial linking.
  • Geo/Spatial workspaces are common in geo/spatial centric applications, such as GIS, CAD, and BIM, where integrated 3D visualization is a core part of the user experience. AMP's Unity client natively integrates Cesium mapping, allowing you to unify location-based datasets, spatially precise environments, high-fidelity 3D rendering, and extensible linking.

This repo is lightweight and dependency-free so that it can be added to your project without consequence. At a high level, the development workflow is:

  1. Import amp-sdk-go in your Go project and expose your functionally as an amp.App.
  2. Clone amp-host-go and embed and expose your Go packages within it.
  3. make build libarchost (with your packages embedded within it).
  4. Rapidly build a native Unity app using one of the AMP "app" templates, embedding libarchost within it.
  5. At runtime, the Unity client any root amp.Cell of your app is "pinned" via amp://{yourAppNameID}/{yourSchema...} while the AMP UX runtime manages the user's perceptual experience of all actively pinned URIs.

Points of Interest

In suggested order of review for newcomers:

api.task.go A wrapper for goroutines inspired by a conventional parent-child process model and is used throughout this SDK.
api.app.go Interfaces for developers looking to implement an amp.App, defining how state is requested, pushed, and merged.
api.host.go Defines amp.Host and its related types, what amp-host-go implements, and the abstraction that an amp.App plugs into.

What is amp.App?

amp.App is the plugin interface for AMP.

Like a traditional OS service, an amp.App responds to queries it recognizes and operates on user data and system state. The stock AMP runtime offers essential apps, such as file system access, and user account services. The less obvious power of AMP its extensibility. This is done by implementing the amp.App interface and registering it with the Go-based AMP runtime. The AMP runtime then manages the user's perceptual experience of all actively pinned cells on an AMP-compatible client.