Wonderland at JavaOne 2008

April 30, 2008
The next big event for the Wonderland team is the JavaOne developers conference in San Francisco on May 6-9th. We’ll be hosting an informal Wonderland Community Gathering at the Thirsty Bear pub (661 Howard Street, San Francisco) on May 7th at 7:30pm. If you’re in the Bay area, I hope you can join us for a rare opportunity to meet face-to-face. The entire Wonderland team will be attending.

I would also encourage all of you to come visit us at JavaOne itself. We’ll have two demo stations, one in the Sun booth (#194) and one in the Java Playground (#1034). If you pre-register by May 5th, a one-day Pavilion pass is only $50. If you decide to attend the full conference (students can get in for free!), there are a variety of Wonderland, Darkstar, and Java gaming events in the formal program that may be of interest. Most of the action is on Tuesday:

Tuesday, May 6th:

10:50 am Designing an MMORPG with Project Darkstar 
Jeff Kesselman – Technical Session

1:30 pm Project Wonderland: Community-built Virtual Worlds
Nicole Yankelovich & Nigel Simpson – Community Corner talk

2:00 pm Wonderland with Kids (time may change)
Gilda Garreton & Juan Carlos Herrer – Community Corner talk

3:20 pm Project Wonderland: A Toolkit for Building 3-D Virtual Worlds 
Paul Byrne & Jonathan Kaplan – Technical Session

3:20 pm Project Darkstar Hands-On Lab
Jeff Kesselman & Jana Olivova – Hands-on Lab

6:00 pm Creating Games on the Java Platform with jMonkeyEngine
Rikard Herlitz & Joshua Slack – Technical Session

It’s too bad the Wonderland talk and the Darkstar hands-on lab were scheduled opposite one another, but by the time we realized it, it was too late to change the schedule.

On Wednesday, May 7th:

6:30 pm Video Game Development on the Java Platform:
                      Past Present and Future of Java Technology Games

                        Chris Melissinos – Birds-of-a-Feather Session

7:30 pm Project Wonderland Community Gathering
Thirsty Bear – 661 Howard Street, San Francisco

Hope to see you there!


I managed to get an early prototype of Embedded Swing working in Wonderland

April 24, 2008

With the help of Igor Kushnirskiy, and also Kevin Rushforth, I’ve managed to get a prototype of Embedded Swing running inside Project Wonderland. This allows Swing lightweight components to be textured onto 3D objects.

Here is a snapshot of a working copy of part of the SwingSet2 TableDemo (with a friendly avatar nearby). But this still shot can’t adequately convey the excitement I felt when I actually was able to scroll and manipulate the app! There are still some bugs and some performance issues but it is definitely another real-life validation of the Embedded Swing project. This will mean that developers will have access to Swing’s 2D GUI power at their disposal when writing 2D and 3D share-aware apps in Wonderland.

Here is the link to the snapshot:

This work is currently planned to be productized in Release 0.5.

Updated: to add the image in-line.

dot Wonderland, Part I

April 23, 2008

I have a fascination with "dot" files. Every once in a while I look inside my home directory to see if an application I’ve run has created one of these files (or directories) and peek inside just for the fun of it. At times, it’s come in really handy to know what’s going on inside of them — there’s been plenty of times I’ve had to erase a "lock" file or clear a cache and couldn’t quite figure out how through the application itself.

So, in that spirit, I figured I would walk through how Wonderland uses its own "dot" directory — .wonderland/. The Wonderland client creates its own .wonderland/ directory in a user’s home directory. In fact, you can have it use other directories too — it’s a Java system property that controls which (wonderland.dir property, see WonderlandConfigUtil.getWonderlandDir() for more information).

Some disclaimers first: I did not author this part of the code, so my analysis below is a deconstruction of the mechanism. So if you are in the know, feel free to make corrections by posting a comment. Also, modify the .wonderland directory at your own risk!  As this is not part of any official Wonderland specification, anything posted here is subject to change without notice.

 But, here goes…

The .wonderland/ directory essentially contains two items: a database and cache of assets and avatar configuration information. In this blog post, I’ll describe the asset database and cache of assets and leave the avatar configuration information to Part II of this post.

Asset database and cache

Wonderland tracks each asset it has downloaded and cached using a DerbyDB database. The database itself is located in the AssetDB/ subdirectory (there is also a log file derby.log). To view the entries in the database, run ant run-dbtest. You should entries that look something like this:

[java] SkyBox/Back.png            IMAGE

Each entry corresponds to a file cached within the cache/ subdirectory. The third column — the file type — is either IMAGE, FILE, or MODEL. All IMAGE files are stored within the cache/textures/ subdirectory, all FILE files are stored within the cache/files/ subdirectory, and all MODEL files are stored within the cache/models/ subdirectory.

The MODEL files are the 3D geometry files, in v0.3-v0.4, these are binary, gzipped Java 3D scene graphs. IMAGE files seem to encompass textures, the sky box, and slides for in-world presentations (which I guess can be thought of as textures), while FILE files seems to contain all of the .rtg files (for the avatars and animated cells). These asset types are not arbitrary strings: they are defined by the AssetType.java enumeration.

Each database record contains four entries: the asset file name (max length 120), the base URL (max length 120), the checksum (max length 40), and the asset type (MODEL, FILE, IMAGE; max length 10). The asset file name is the primary key in the database table, so it cannot be null, and it must be unique — it is the relative path within the resource repository (and listed in the 2nd column above). The base URL (3rd column above) gives the URL of the asset repository from which the asset was loaded. In the listing above, I’m using a remote repository; using a local repository is also possible (set wonderland.useLocalArt = true).

The asset database is represented by the AssetDB.java class. Every time the client starts (or rather when an instance of the AssetDB.java class is created, that happens in AssetManager.initialize()), it checks to see whether this database exists. If so, it opens a connection to the database, if not, it creates the database. (To check whether the database exists, it only checks whether the AssetDB/ directory exists.)

Asset Manager Use of the Asset Database and Cache

Within the Wonerland client, it is only the asset manager (AssetManager.java) that makes use of the asset database. As one might expect, before fetching a resource from a repository, Wonderland first checks whether it is in its cache by querying the database for an entry matching the resource file name. If it does not find it in its local cache, it downloads the asset (either from a remote or local repository) and writes the new file to the cache and updates the database properly. When fetching the asset from the local cache, the Wonderland client makes use of the checksum for only certain types of assets: models and files, but not for images. (Also, it seems that it is only for models that Wonderland pays attention to the "ignore_checksum" flag.)

Mucking with the Asset Database and Cache

It probably goes without saying: proceed at your own risk! But it’s probably worth it to talk about ways you can clear the cache in case something goes wrong. Certainly, deleting the entire .wonderland directory will clean out the cache, but that may also clean out other local state, such as your Avatar configuration, so it’s probably not the best way to go. Deleting the AssetDB/ directory will likely clean out the cache, since the asset manager consults it first to find cached entries. It may be in good order to also clean out the cache/ directory as well — but if an asset is not in the database, then the Wonderland client will assume it is not cache and rewrite over any existing file in the cache/ directory anyhow.

Simply deleting an entry in the cache/ subdirectory may cause problems — based upon my reading of the code, if a model fails to load from the cache/ subdirectory, then the Wonderland client re-fetches it from the repository, however, for files and images, it just seems to give up and throw an exception (but I welcome corrections here).

 To be continued in Part II…

What’s up with Wonderland 0.5?

April 17, 2008

One of the great things about last week’s Sun Labs Open House was getting to see most of the Wonderland team in person (also some good press). Yes we see each other in the virtual world all the time, but it’s still not quite the same as face-to-face.

The question I was asking everybody was “what’s up with Wonderland 0.5?” While we are in the process of stabilizing, documenting and releasing Wonderland 0.4, much of the team has moved on to the new code. Here are some of the things I learned:

We are all getting up to speed with JMonkey Engine. I’ve tried out some of the tutorials and built a cool racing game. Paul and Justin have teamed up to try out the Wonderland artwork in JME, imported via Collada. As the screenshot below shows, it worked. Yes it’s a little dark, but I was getting over 200fps!

Meanwhile, Doug and Shawn have done a deep dive into JME. Doug told us about some of the ideas they have for the updated avatar and animation system. Like all of us, they are thinking about scalability, designing the system to render hundreds of avatars in a single space. I heard from Deron that he has been working on a number of infrastructure pieces, including an updated framework for including 2D apps in the world, the all-important picker and embedding swing components in the world. And Jordan has recently ported the WFS code to the new codebase, factored out as a module so it will be easy to use in tools like the World Builder.

As for Paul and I, we spend most of our time looking at output like this:

That is our cell bounds viewer, which we are using to debug and test the new cell and communications APIs. We are currently finalizing the APIs and working with the Darkstar team to improve the scalability of the underlying implementation. These APIs will be the first to be reviewed in the community. Look out for some more reviews (hopefully including some in-world meetings) in the near future.

With all this activity, it should be a fun summer in Wonderland!

Open House Talk on MiRTLE

April 10, 2008

I gave a talk today at the Sun Labs Open House on the project to develop a Mixed Reality Teaching & Learning Environment (MiRTLE). During the talk I presented the movie that we created last week when conducted an experimental installation in the International Academy at the University of Essex.

We’re now recovering from all the great attention we’ve received during the past two days and taking a well-earned rest tomorrow…

Video Panorama Postcard from the Sun Labs Open House

April 9, 2008

Greetings from the Sun Labs Open House in Menlo Park, CA. We had a great day of demos.

Video Panorama Postcard

This postcard is for Nigel who couldn’t be with us here at the last minute. It shows an image of the 9-pane video panorama application that Nigel wrote. User’s in the Wonderland world can reposition the live video frame, shown in the thin green rectangle, by clicking elsewhere on the panorama. When the camera pans to the new location, it leaves behind a still snapshot of the previous scene.

Wonderland Demo at the Sun Labs Open House

April 8, 2008

The Sun Wonderland team, normally distributed between Massachusetts, California, Washington State, and the UK, will be gathering in Menlo Park, CA this week for our annual Sun Labs Open House. This event is mainly for employees, but we will have some customers and press attending as well. We’ll be demoing a preview of the 0.4 Wonderland release. The demo includes four virtual spaces linked together with placemarks:

  • MPK20 World – in addition to showing the core features of high-fidelity audio, shared applications, and recorded demos, the new 0.4 features we’ll be demoing in this space include telephone integration with the ability to carry phone users around the world, the 9-pane video panorama that works with an Axis pan-tilt-zoom camera, the audio recorder, the video recorder, and the cone-of-silence for private audio chats.

  • Wonderland Lecture Hall – a virtual space created using the Wonderland World Builder, this space has recorded video playing at the front of the room along with a multi-user PDF Viewer that allows viewers to synchronize and unsynchronize with the presenter. In addition, the lecture hall includes two virtual microphones which amplify a speaker’s voice to fill the entire room when a person steps on the white microphone pad.

  • Music in Wonderland – this collaborative music exploration space is our first Wonderland mash-up. Album covers and music are streamed over the internet from Magnatunes.com.

  • World Builder Playground – area where people can experiment with modifying the space using the World Builder (see Jonathan’s post on March 27th for an image of the World Builder). The manager UI, which is currently needed to reload the world, runs inside the World Builder Playground space so you can rebuild the world from inside the world.

So wish us luck with the demos and accept our apologies in advance for not being too responsive on the forum for the rest of this week.

%d bloggers like this: