Presentation: The Technology Behind VastPark

Today I presented at La Cantine in Paris to both a real world audience and a virtual audience inside of VastPark.

The presentation covered the technology that powers VastPark, where to find the open source code and the specifications such as IMML, Continuum, and the recently announced OpenAvatar. I also showed some live demonstrations of VastPark in action (the selective Continuum capture I did can be downloaded from here).

See the slideshare below, there was a lot of talking during the presentation so the slides may seem a little light on content. If you have questions about the slides feel free to comment and I will answer.

VastServer Developer Edition RTW

Today marks the release to web of a new flavour of VastServer, known as VastServer Developer Edition.

As the name implies, this version of the server is targeted at developers and aims to provide more information on the framework’s behaviour, a little closer to the metal than has been possible in the past.

The user interface for the server is written with WPF and looks like this:

Click for larger view

Some of the more interesting features are covered in detail below.

Server Usage History

Many of the factors that contribute to server load such as send/receive rates, send/receive queues and client connections, are visible at a glance, with a rolling 60 second view of activity graphed:

It’s likely additional metrics will be made available in future releases, such as dynamic element counts, owned element counts, mutex holders, etc along with the ability to filter and manipulate the usage history graph.


Each world maintains it’s own log that displays IMML notifications such as those related to scene.ui:writeline, along with any world related notices, errors and warnings that the framework associates with that context.

A system log is also available via the View -> Log menu. It contains log information related to the networking infrastructure.

File Hosting Support

One nice new feature is the ability to host assets along side client IMML, meaning that IMML can be coded with relative URIs.

This supports the use case where a team wants to avoid setting up a web server or using a public storage provider such as Amazon S3 and is a convenient way to consider developing worlds.

For example, the model in this IMML:

<IMML xmlns="">
  <Model Source="models/ground_path1.model" />

Is resolved to the client folder of the hosted context via the HostingRoot:

In the above example, the HostingRoot is at My Documents\VastPark\Server\ and the hosted context is called “sanctuary” (for some live shots of sanctuary in action, see here) .

Client Metrics

The client tab displays the behaviour of all clients connected to a specific world.

Information on user alias, connection time, framework version, ping, message resends, and time since last message provide the ability to troubleshoot scenarios where certain clients are experiencing difficulty with the system.

Both v1.3 and v1.5 clients are supported by this release of the server, the network stack has remained compatible between these versions of the framework.


VastServer Developer Edition is freely available to developers for download with a limitation of 10 concurrent user connections across all hosted worlds. It’s built for windows and requires .NET Framework 4.0

License keys are available to partners and enterprise customers to remove the concurrent user limitation.


Portable IMML – Host a virtual world like a PDF

As part of the v1.3 release the Portable IMML (PIMML) format was updated to include some new features (encryption, URI impersonation, additional assets, DRM).

An update was also made to the Creator to expose this new functionality and make packaging up a PIMML file a simpler experience.

Here’s a quick step-by-step guide to create a PIMML file using the Creator (v1.3 required!)

Begin by loading your IMML up into the Creator. For this example I’ll use hello-world-hills.imml. Navigate to the Publish menu and select File.

The first step is to decide how the PIMML file will be used. If you have designed it to be a multi-user environment, choose Offline Use. The difference between Online Use and Offline Use is quite simple; online means that the PIMML can use URI Impersonation to connect to a VastServer whereas offline cannot.

For this example I’ll pretend this file will be used online – in reality the IMML for hello-world.hills hasn’t been designed for online use, so don’t expect anything multi-userish to magically happen if you are following along at home 🙂

Next, we need to instruct the PIMML file where the VastServer that will manage the multi-user data is located. In this case I’m using the fictitious as my address.

The benefit of this is that the PIMML file can be shared via email, served via Apache/IIS/VastServer/other, handed out on a USB stick, etc and still have the ability to be multi user. This is known as URI Impersonation.

By default, the Creator will only PIMML assets that are statically referenced in the original IMML.

In our example IMML the only element that really qualifies for packaging is the model called Mountain Terrain.

Often scripting will dynamically source content, so you may wish to add additional assets into the PIMML file. A good example of this is an animation resource as shown in the below example:

URI: The remote URI to map acquisition requests from
File path: The file to resolve the requests for that URI to

The final step is to check the document name is correct (it gets displayed at the bottom left of the Player UI) and choose an encryption level for the package.

I’ve choosen to encrypt in this example using a really thirst quenching password.

That’s all there is to it, hit Next and the Creator will do the rest:

The summary screen tells you where the PIMML was output to (defaults to Documents\VastPark\Creator\PortableIMML), the file can now be opened in the Player and interacted with as per usual:

Note: The title for this post was inspired by 🙂

VastPark Platform 1.3 Released

Today the Creator, Player and Publisher based off v1.3 of the framework were released to web!

Some of the more notable changes include:

  • New Drawing API
  • New physics engine
  • Support for encrypted file formats
  • Improvements to the Portable IMML format
  • Additions to VastScript related to keyboard/mouse triggers
  • Refined Player UI
  • Many bug fixes and stability improvements

Why the jump from 0.98 to 1.3?

My last post implied that v0.98 would be the final DirectX version of the framework. Instead a decision was made for a few more iterations on DirectX to tie up some loose ends, prior to spending significantly more time working on the OpenGL framework (in actual fact, over the past 6 months we’ve been working on both!).

Since the release of 0.98, the version numbers have been ticking over in line with the growing maturing of the framework, with v1.1 and v1.2 surfacing as developer snapshots. As some fairly major pieces of the framework were being swapped out over this period, the numbering became important – some plugins were needing a minor rewrite to be compatible with the newer modules.

Using the magic of Metaforik and multiple Assets linked to each Item, we were able to publish the same plugin multiple times to maintain backwards compatibility for each framework version.

Portable IMML

The PIMML format has been updated to support some exciting new features:

Combined these features mean that a securely encrypted, portable virtual world can be distributed which is capable of connecting to a live server! Your users will benefit by much faster load times (the content is local) while still maintaining the ability to be in a multi-user space.

As part of the format update, a new wizard interface was introduced in the Creator making it easier to use the new features.

Find the wizard under the Publish to File menu:

Note: The update to the PIMML format is not backwards compatible. If you have some older files which are critical to migrate, please speak up at the forums on

Drawing API

Many customers are looking towards virtual worlds as a solution to collaboratively visualise information.

Whilst this was possible previously in VastPark using Primitive and/or Model elements, the new drawing API allows developers to take this to the next level by making it easier to create graphs, overlay annotations and build more intuitive user experiences.

The drawing API provides the following base types:

Access to these types are exposed via the RenderEngine interface and for convenience within VastScript via plugin (DrawingPlugin). We are considering ways that this can integrate nicely into the IMML spec at a later point.

Here’s a basic sample that uses the DrawingPlugin to demonstrate some of the functionality (right-click, save as): drawing-api-sample.imml

Refined Player UI

We’ve made further improvements to the Player UI to tighten up the look along with a brand new vastpark:home design:

At the same time we’ve changed some of the shortcut keys:

F1 – Help
F4 – Options
F5 – Refresh
F6 – Screenshot
F9 – Chat
F10 – Library
F11 – Fullscreen
F12 – Freelook camera

Also of note is the unified default folder structure for all of the applications:

Documents\VastPark\[application name]\[folder]

New physics engine

BulletPhysics had already been chosen as the solution for future versions of the framework. It was decided that to provide a smoother transition between the v1.3 and v1.5 codebases, we would port it back.

Improvements have been observed in a number of areas such as the stability of avatars and a more realistic, robust simulation.

Alas, the port was not without some minor regressions; GenerateExplosion, SetForce, AddForce, SetImpulse and collision events were temporary casualties. All of these will return again in a future version of the framework.

Final Note

The applications are available for download at the usual place.

If you are upgrading from a version prior to v1.3 I’d strongly advise a quick visit to add/remove to uninstall the older applications prior to upgrading to the newer release. The installers are now using MSI and will only allow overwrite from v1.3 onwards.


VastPark Developer Introduction – v1.3 Framework

Update: The video was re-dubbed, you now get the pleasure of Liz’s delightful voice 🙂

I recently gave a talk to a team of developers interested in working with the platform who are planning to build some new exciting products on top of it.

One of the audience offered to record the session remotely so the audio is a little scratchy, but I think it’s come across ok.

The talk covers:

Hopefully this is a useful primer if you are interested in developing with VastPark or are curious to know a little more about the way the system functions.

Download the PDF shown in the video here: VastPark Developer Introduction - Framework v1.3

FCVW 2010

In May of 2010, VastPark again exhibited at the Federal Consortium for Virtual Worlds in Washington DC.

As with the previous year, we provided a way for people who were unable to attend in person to attend virtually:

We also were involved in the keynote by Dr. Robert Childs, following some very cool work by ImageMetrics as shown in this video:

The VastPark portion of the video begins at 5:08, prior to that you are seeing ImageMetrics in action.

VastPark Platform 0.98 Released

Along with a fresh look for, the 0.98 versions of the Player, Creator, Publisher and Server have been released. This will be the final DirectX only version of the platform as we move towards 1.0

What’s included in 0.98?

Drag and Drop

Drag and Drop allows the user to drag an Item from the Items list into the 3D space. This Item can then be interrogated via script or plugin and an action can occur based on the developer listening to the DragEnter, DragDrop, DragLeave triggers in IMML.

The benefits of this can be extensive, from dynamic presentations with multiple presenters able to drag out their presentation on demand to injecting new content into the scene.

Note: This Items list is populated by the Metaforik index. You can get content into this index using the Publisher application (you must have a publisher account!) which supports Models, Video, Audio, etc, but currently doesn’t support the type “Document”.

Simplified UI

Feedback was received that the UI for the Player was a little complex, so we’ve introduced a menu and removed much of the clutter from the tray area. All of the functionality previously accessible from the tray is now found under the menu at the top of the application.

The address bar now has back, forward and refresh buttons as well as a new icon that indicates the health of the current document and an icon that appears when content is loading in the background.

The debug dialog has been slightly tweaked and simplified also, note that debug rendering options now appear under the menu View -> Render. By default, the LoadQueue tab is now displayed which is useful in working out what is occurring while you are waiting for a document to complete loading.

More of a focus on capture

Along with the support for Continuum capture, the Player now supports capture of screenshots.

Screenshot and Continuum captures default to being stored in your Documents folder under the subfolders “Continuum” and “Screenshots”. This can be customised by visiting the Options menu (Tools -> Options) and selecting a new capture path.

In a future release video capture support is likely to make an appearance as we aim to provide a variety of ways to capture the experience within the Player.

Search Syntax

Some slightly more advanced searching ability is included in the Player’s Item list and follows this syntax:

[type:itemType] [publisher:nameOfPublisher] [tags:tag1, tag2, etc]

Some valid searches that follow this syntax are:

Crate type:Model publisher:craigomatic
– Finds all Model items published by craigomatic that have a name like “Crate”

– Finds all items that have a name like “Crate”

– Finds all items of the type Document

0.98 Platform Changelog

Download link:

VastPark Platform – Intro Video Series


We’ve recently put online an introductory video series that gives an excellent overview on VastPark and a brief intro to the concept of an Adaptive Web.

The videos were created and edited in record time by myself and our team of ninja video editors and will likely have extra polish added early in 2010.

Check out the series at:

Virtually Speaking

VastPark CEO, Bruce Joy speaks about the future of Virtual Worlds, virtually, at NUS in Singapore:

VastPark CEO Bruce Joy – NUS Presentation from VastPark on Vimeo.

You can take a look at the presentation in world using VastPark (the quality is much better) by first downloading the latest Player snapshot from here:

Then, download the PIMML (portable IMML) from here:

Army of Craig

I’ve always wondered what it would be like to have an army of clones that I could send out to do my bidding…

VastPark OpenGL “Army of Craig” Demo from VastPark on Vimeo.

Yes. It is a little strange.

Next Page →