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. 

Reality Models are made up of: structure (the static geometry of the physical space, like walls and floors), objects (detectable entities, like people or cars), and motion (the movement of sensors in 3D space, like cameras). 

Developers access Reality Models when using the Reality as a Service™ (RaaS) API. Commercial Buildings access their Reality Models by integrating our Spatial Fields™ system into their built space.

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

For AR Developers

Stream sensor data to RaaS and it will return a Reality Model via 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 and/or depth frames), and transmits it to a remote server where it's decoded and then subsequently processed with RaaS. Have your AR application stream the client device's RGB-D data to RaaS using our SSP Unity integration. 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");
        } 
    }
}

Use the RaaS API to request a "Structure snapshot," which is a mesh of the scanned physical environment at a given point in time. You can specify the data archetype (point clouds or meshes), texture (color properties or none), groupID (only send structures from defined group), and the point in time, and you can even add more data over multiple sessions by streaming to the same environmentID. 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();
    }
} 

Use the RaaS API to request object reality events either through live subscriptions (ex: live detection of people in space) or historical events (a dump of all the detected people within a given time frame). First, define the object 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);
    }
}

Use the RaaS API to request motion reality events either through live subscriptions or historical events. Live subscriptions emit a stream of messages with real-time 6DoF positions of the requested sensor_ids. HistoricalMotion is a dump of all motion reality messages from a given time period. Use your client_id to subscribe to a motion_event from the generated environment_id using our RaaS Unity integration. Learn more

Sign up for Moetsi services.

Are you an AR Developer interested in the Reality as a Service™ (RaaS) API? Or an Architect, General Contractor, Property Manager or Lighting Designer interested in Spatial Fields™? Sign up below. We'll be in touch soon.

You are interested in...

Thank you! Your submission has been received!

Oops! Something went wrong while submitting the form.