Quickstart with advanced real-time

The illustration below shows how the advanced real-time module (ART) interacts with REDsdk:

Overview of the ART architecture

We still have the base REDsdk SDK which is accessible from the REDsdk block in the diagram above. No changes here. Then, we have three new blocks, all accessible through the RPL namespace of the global REDsdk API:

  1. The REDsdk ART engine itself, which is built on top of REDsdk. ART has its own simple SDK, providing base world definition controls and options. For instance, you'll find the setup of stars and planets with orbital trajectories so that a sun & sky with atmosphere can be setup and be animated properly.
  2. The geometry part of the ART. This is mostly represented by the RPL::IGeometry interface. This interface is the entry point to the import of user scenes and models into ART. So for instance, architectural models, roads, standalone buildings will all be imported through the RPL::IGeometry interface. The Asset editor also uses the RPL::IGeometry interface to setup all parameters for import scenes.
  3. The outdoor part of the ART. This is mostly a combination of the asset editor generating pre-defined environments that are loaded through the RED::IAssetManager interface for an immediate display by ART.

Starting up an ART application

Basic initializations steps in ART are described below:


Task: Initializing the world

First, since this is a REDsdk application, don't forget to setup your REDsdk + ART license key. See here for details: Setting up a REDsdk software vendor license or Setting up a REDsdk per-seat license.

REDsdk advanced real-time API is packaged into the ART namespace. This namespace co-exists with the RED namespace but also delivers its own application logic which operates at a higher level than REDsdk. We use a world (ART::IWorld) that runs a simulation (ART::IWorld::Start). Then, the world is synchronized (ART::IWorld::Update) and finally shutdown (ART::IWorld::Shutdown).

This is illustrated below:

RED::Object* world = ART::Factory::CreateInstance( CID_ARTWorld );
if( !world )

ART::IWorld* iworld = world->As< ART::IWorld >();

// Setup a simple planetary system:
RC_TEST( iworld->SetupEarthSystem() );

// Start the world:
RC_TEST( iworld->Start( window, NULL, NULL ) );

// Update the world, refresh the app every frame:
while( app_is_running )
  RC_TEST( iworld->Update() );

// Terminate:
RC_TEST( iworld->Shutdown() );

Then, start with the Loading a simple landscape tutorial to start using ART and navigating into it.