Building A Virtual City

Vision

The goal of this project is build a virtual city full of scripted objects and activities. We envision a bustling city filled with buildings, street vendors, taxis on the roads, and inhabitants going about their business. The system we've built provides the basics: you can add objects to the world and add scripts to them to control their behavior and make the interact with each other and avatars. It's up to you to take these building blocks and create a compelling, interactive, and fun city for users to visit.

What might you script objects to do? Here are a few ideas:
  • An interactive art gallery that guides the viewer through the exhibit and customizes it based on the preferences of the users currently in the gallery.
  • A virtual taxi service that helps users get around the virtual city. Besides transporting avatars, it might help them find landmarks or events within the city.
  • A capture the flag game in a virtual park.
  • A marketplace that advertises its wares to nearby avatars and responds to user queries for products.
  • A mashup with external data. For example, allow users to explore trending topics on Twitter by intelligently embedding them in the 3D space as objects and varying their size based on popularity.
  • A set of bots that wander the world indexing its contents. The index can then be queried to find events, content, or services.
These are a few examples, but we want you to come up with your own ideas as well since applications we didn't think of are more likely to stress the system in new ways and raise new issues. Anything you can imagine being engaging, useful, or fun in a virtual world is probably a good application to build.

How Applications Are Built

We've developed a new virtual world system called Meru and we'll set up servers running a mostly blank world. You'll start adding objects to this blank world -- buildings, cars, and shops to set the scene. This will involve collecting meshes to store in the system and creating some static objects in the world that display those meshes.

Then we need to bring the world to life by scripting objects to make them active. In a script you can control the behavior of an object (make it move, change its mesh, or animate) and interact with other objects with messages. Each object starts "blank" and static. The creator then edits properties and adds scripts to in in-world. By telling it how to respond to events, either from the system (e.g. another object came nearby) or from other objects (e.g. an avatar sent a message to it), you can create interesting interactive experiences for visitors to the world.

We talk about writing applications because usually a collection of objects are scripted to work together. For example, in the art gallery example described earlier, each display might be a separate object and they all may be managed by a separate gallery object.

Research

Building a world using our system provides a number of benefits for our research:
  • Build experience constructing real applications in our world to gain insight into building better scripting languages and tools for doing so.
  • Allow us to evaluate new scripting language and tools features.
  • Instrument the system and collect statistics to feed back into simulations.
  • Deploy experimental implementations of services and evaluate them on real workloads.
  • Get real world use of the system. Improve its robustness through actual deployment. This makes it more practical for others to build and deploy their own worlds based on our system.
By developing content in our system you'll start to gain an understanding of how the system works and hopefully help us learn something about its behavior -- where are the bottlenecks? or what aspects of specifying object behavior are especially challenging? or what functionality turns out to be critical, but is currently missing?

More Information

For more information about the project, get in touch with Ewen Cheslack-Postava or Behram Mistree.