Reality Modeling
as a Service™

Understand spaces like never before

Sign up

A Reality Model is more powerful than a Digital Twin

We build Reality Models, 1:1 representations of physical reality, in real-time.

Developers access their Reality Models by requesting reality events through our Reality as a Service™ (RaaS) API. To use RaaS API, client devices first stream their sensor data to RaaS and then receive data for objects (detectable entities), motion (how sensors travel through the physical space), and structure (the static geometry of the physical space), all in real-time.

Commercial Buildings access their Reality Models by integrating our Spatial Fields™ system into their built space. Spatial Fields™ generates the most robust spatial data, down to the cubic foot.

save-money

Structure

any updates or changes to static environments get streamed out

hosting

Objects

detections of dynamic objects in a space are published in real-time

app

Motion

sensor position in 6DoF is updated in real-time with <2ms latency

For Buildings

It starts with lighting.

Spatial Fields™ is a construction-ready lighting controls system that can do so much more.

Once Spatial Fields™ is installed and programmed for lighting control, the property manager can unlock its premium feature of generating real-time robust spatial data, down to the cubic foot. This robust spatial data powers a suite of space performance apps on the Spatial Fields™ App Store.

Learn more

Unlock robust spatial data and the Spatial Fields™ App Store


Run "SQL-like" queries on the Reality Model data generated by Spatial Fields™ to better understand or interact with a space.

Download space utilizations apps on the Spatial Fields App Store™.

Want to build the app yourself? You can, on Unity™. Spatial Fields™ runs on Unity™, the #1 3D Development Engine.

For AR Developers

Stream sensor data to RaaS and it will return a Reality Model by way of object, motion, and structure "events" across 3 time intervals: Live Subscription, Historical Events, and Snapshots. Click below to see how it works:
public class StreamData : MonoBehaviour
{
    public string clientId;
    void Start()
    {
        //create an environment id for this session
        Guid myEnvUuid = Guid.NewGuid();
        string sessionEnvironmentId = myEnvUuid.ToString();
​
        //authenticate with your client id
        RaasAuthenticationObject authentication = new RaasAuthenticationObject(clientId, sessionEnvironmentId);
​
​
        //create a sensor id for this session
        Guid mySensorUuid = Guid.NewGuid();
        string sessionSensorId = mySensorUuid.ToString();
​
        //create a stream of data for SSP plugin to send for an environment id and providing the sensor id streaming the data
        //not defining frame rate streams at 5Hz
        //not defining which data types to send sends all available data types (rgb, d, humans)
        SSPStreamDefinitionObject datastream = new SSPStreamDefinitionObject(sessionSensorId);
​
        //begin streaming of data
        try {
            SSPStream sspStream = new SSPStream(authentication, datastream);
        }
        catch (Exception e) {
            print("error");
        } 
    }
}

SSP encodes and compresses client device sensor output (like color or depth frames), and transmits them to a remote server where they can be decoded and then subsequently processed with RaaS. Learn more

public class CreateMeshFromRecentStructureSnapshot : MonoBehaviour
{
    public string clientId;
    public string environmentId;
    void Start()
    {
        //authenticate with your client id
        RaasAuthenticationObject authentication = new RaasAuthenticationObject(clientId, environmentId);
​
        //create a no-texture-mesh structure snapshot request for a known environment id from as close to as recent as possible
        RaasSnapshotDefinition snapshot = new RaasSnapshotDefinition("structure", "mesh", "none", DateTime.UtcNow);
​
        //make a request to RaaS for a snapshot with the provided definition
        try {
            RaasSnapshot raasSnapshot = new RaasSnapshot(authentication, snapshot);
​
            //create a Unity GameObject with a Transform at the origin and mesh provided by the RaaS Structure Snapshot
            GameObject mesh = raasSnapshot.CreateMesh(new Vector3(0,0,0), new Quaternion());
        }
        catch (Exception e) {
            print("error");
        } 
    }
}

Structure snapshots are a data representation of the phyical environment at a given point in time. You can specify which data archetypes (point clouds or meshes), texture (color properties or none), groupID (only send structures from defined group), and time (structure requests on or before the provided time) you want returned. Learn More

public class LiveHumanFeed : MonoBehaviour
{
    public string clientId;
    public string environmentId;
    private RaasLiveSubscription raasLiveSubscription;
    void Start()
    {
        //authenticate with your client id
        RaasAuthenticationObject authentication = new RaasAuthenticationObject(clientId, environmentId);
​
        //create a subscription to live events for a known environment id
        RaasLiveObjectSubscriptionDefinition subscription = new RaasLiveObjectSubscriptionDefinition("object", "human", "raw");
​
        //subscribe to  RaaS to get live messages for the given subscription definition
        try {
            RaasLiveSubscription raasLiveSubscription = new RaasLiveSubscription(authentication, subscription);
        }
        catch (Exception e) {
            print("error");
        } 
    }
​
    void Update()
    {
        //RaaS plugin will automatically update Human Prefab GameObjects based on received RaaS messages
        raasLiveSubscription.UpdateObjects();
    }
} 

Request object reality events either through live subscriptions or historical events. First, define the archetype (i.e. human) and request that RaaS sends back identified human objects (HumanStruct) in real-time, or within a designated date/time period. Learn more

public class DriftCorrection : MonoBehaviour
{
    public string clientId;
    private string mySensorUuid;
    private RaasLiveSubscription raasLiveSubscription;
    void Start()
    {
        //create an environment id for this session
        Guid myEnvUuid = Guid.NewGuid();
        string sessionEnvironmentId = myEnvUuid.ToString();
​
        //authenticate with your client id
        RaasAuthenticationObject authentication = new RaasAuthenticationObject(clientId, sessionEnvironmentId);
​
​
        //create a sensor id for this session
        Guid mySensorUuid = Guid.NewGuid();
        string sessionSensorId = mySensorUuid.ToString(); 
​
        //create a stream of data for SSP plugin to send defining the id of the sensor
        //not defining which data types to send sends all available data types (rgb, d, humans)
        SSPStreamDefinitionObject datastream = new SSPStreamDefinitionObject(sessionSensorId);
​
        //begin streaming of data
        try {
            SSPStream sspStream = new SSPStream(authentication, datastream);
        }
        catch (Exception e) {
            print("error");
        } 
​
        //create a subscription to live events for the sensor id in the session environment id
        RaasLiveSubscriptionDefinition subscription = new RaasLiveSubscriptionDefinition("motion", "optimized", sessionSensorId);
​
        //subscribe to  RaaS to get live messages for the given subscription definition
        try {
            RaasLiveSubscription raasLiveSubscription = new RaasLiveSubscription(authentication, subscription);
        }
        catch (Exception e) {
            print("error");
        } 
    }
​
    void Update()
    {
        //RaaS plugin can automatically update Unity's ARPose Driver origin on each update loop
        raasLiveSubscription.UpdateMotion(mySensorUuid);
    }
}

Request motion reality events either through live subscriptions or historical events. Live subscriptions emit a stream of messages with real-time Reality data. HistoricalMotion is a dump of all motion reality messages from the given time period. Learn more

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Join our Discord 
server

Whether you have questions about the RaaS API, or about Unity's multithreaded Data-Oriented Technology Stack (DOTS), or just general questions about data-intensive pipelines for spatial computing applications, come join our Discord!

We maintain a friendly channel, and we're always quick to respond.

Join the Community

We're on standby, ready to answer your questions.

Join Discord