- a turn-key UXR solution for creating high-fidelity, multi-platform 3D experiences -
art.media.platform ("amp") is an SDK for building multi-platform 3D and media-centric apps with pluggable infrastructure where artists and creators control and secure environments. The amp client exists as a Unity and Unreal app driven by an embedded Golang dynamic runtime library (output by this repo).
This means amp is a "turn-key" 3D-based user interface solution allowing you rapidly publish a native app on Windows, Mac, Linux, Android, iOS, and most XR headsets while also delivering the benefits of embedded and "headless" Go runtime instances with a footprint in single digit megabytes while also running native on SoC metal has been very encouraging.
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 Online Maps XR 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:
- Import amp-sdk-go in your Go project and expose your functionally as an
amp.App
. - Clone amp-host-go and embed and expose your Go packages within it.
make build libarthost
(with your packages embedded within it).- Rapidly build a native Unity app using one of the amp.App templates, embedding
libarthost
within it. - At runtime, your app or resources within it are "pinned" via
amp://{yourAppNameID}/{yourSchema...}
while the amp UX runtime manages the user's perceptual experience of all actively pinned URIs.
In suggested order of review for newcomers:
api.tag.go | TODO |
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. |
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 is its extensibility. This is done by implementing the amp.App
interface and registering it with the Go (or other transpile) based amp runtime. The amp runtime then manages the user's perceptual experience of all actively pinned cells on an amp compatible client.