New Wonderland Community Home

July 29, 2010

In yesterday’s Wonderland Wednesday session, a group of 10 community members gathered to inaugurate one of the two new servers donated to the community. Please join me in thanking Warren Sheaffer from St. Paul College for the generous donation of the two servers.

First community meeting on new server

First community meeting on new server

The main purpose of the meeting was to test that the server would handle the basic features we use in community meetings including images, 3D models, Sticky Notes, Whiteboards, and shared applications. We ran into a few small issues, but on the whole, the server performed well. This will now be the location for all subsequent community meetings:

At some point soon we’ll test the second server. My plan is use that machine as a demo machine, so if you are interested in helping put together a demo world that showcases different Wonderland features, please let me know so we can organize a team to work on that project.

I have posted more screenshots from the Wonderland Wednesday session on our Facebook page in the Photos section.


Wonderland a twitter

July 28, 2010

Continuing with the theme of increased internet integration as outlined in my last blog post, I’m pleased to announce the addition of a Twitter Viewer module to the Wonderland Module Warehouse.

It uses Twitter4J–a Java library for the Twitter API, and relies on the existing Twitter search operators. It requires no authentication, and can be installed and used by any user logged in to Wonderland. The user is able to enter a search query and the resulting tweets are added to the virtual world in two ways: firstly in a list widget displayed in the heads up display; and secondly as animated bubbles floating up from a 3D model of a pigeon.

Here’s a brief video of the Twitter Viewer in use.

As mentioned in the video, the query is performed every 30 seconds and will continue executing even if no user is logged in to the world. All the results of the query are presented in the list widget next time a user logs in. The list widget (actually a table widget) will hold a maximum of 99 tweets, after which it discards old tweets.

The module is now in the Module Warehouse and the source code in the Positive Spaces SVN repository. If you take a look at the source, you’ll see that this module includes three features of Wonderland:

  • Animation of tweets, using the Trident animation framework
  • Connection from the Wonderland server to an external service provider, in this case Twitter, via the use of the Darkstar service layer
  • A periodic task to execute a query, retrieve the results and forward to clients.

In my last blog posting, the instructions for checking out the source code were cropped. Here they are in full: inside a terminal window, execute each of the following command as one line (when prompted, use ‘anonymous’ as the username and a blank password):

% cd ~/src/trunk
% svn checkout
UEssex/wonderland-modules +spaces-modules

This will create a directory called +spaces-modules that is a sibling to the wonderlandand wonderland-modules directories.

XLand Modules

July 26, 2010

This is part 2 of the guest blog post on Xland, the 3D blog project from Nanjing University in China. In case you missed it, you can find Part 1 – Xland 3D Blog – here.

Xland Module Highlights

By Jiang Yufei, Nanjing University

Xland provides users with colorful modules, elements, and gadgets that provide infinite ways to assemble content for showcasing a blog host’s talents. Here are some of the ways users can customize their 3D blog.


The Piano module allows you to use the computer keyboard to play mellifluous music and share it with all the friends in your room.

Piano module
Piano module

We use JFugue to implement the mapping between key and note. Using the same mechanism, we plan to develop saxophone, trumpet, cello, and others until we can form an orchestra.

Tour Rocket

The Tour Rocket is huge! This splendid module will shock visitors when it is inserted into the world.

Tour Rocket
Tour Rocket

Utilizing a model of the Saturn V, this module gives anyone who stands on the platform at the bottom of the rocket a 100-second flying experience. During the elevation, you can see the world from above for a fabulous view.

Static Decorations

To help users build rooms with different styles, we supply different kinds of pre-made, customizable objects. For example, beds, tables and lamps. These all are static objects. For each type of object, bed, for example, we  supply several styles for users to choose from.

Bed module
Bed module

Different users may use different beds and different lamps. Only in this way may users feel they are unique. We put beds, tables, lamps and other furniture or artifacts like that into modules and we call them static decorations. Once a static decoration is inserted into host’s room, the host can choose different types of room decorations through a menu. The server remembers what the host’s favorite style is and renders the correct model in the scene.

News and Weather Forecast

The Weather Forecast and Rolling News are implemented as panes on the heads-up display (HUD). We display the information after parsing the weather and news XML source.

News Feed
News Feed

Particle effect

We add the particle effect to at least four modules including the real-time weather module, the tour rocket, the piano, and the portal.

Particle effect applied to different objects
Particle effect applied to different objects

Let’s take the real-time weather module as an example. This module synchronizes the in-world weather with the real-world weather. When snowflakes waft outside your real window, it also snows outside the window of your Xland room, as you can see demonstrated in the Xland video trailer. A previous WonderBlog article about a way to implement a snow effect inspired us; Douglas Finnigan, the author of that guest blog post, developed his snowflake particles using Groovy. Since we weren’t familiar with Groovy, we studied JME’s particle system and decided to use ordinary Java to create our particle effects. It turns out that JME provides a simple and powerful way to create particle effects. We simply needed to set some parameters and JME handled creating and managing the particles for us. All related classes are located in package com.jmex.effect.particles. The essential mechanism of JME’s particle system is its ParticleMesh which plays two roles in the class hierarchy. First, it is a child of Mesh class. This means it can be attached to any Node. At the same time, it is a particle system. You simply define attributes of particle emitter and add influences to particles, then update and render them in world. This mechanism gives you any particle effect you want.

New Camera Collision

In order to solve the problem of the camera colliding with geometry when an avatar turns a corner or gets too close to a model, we modified some of the camera collision code in the Wonderland core to correct these issues. (Note that some of these bugs have now been corrected in the official Wonderland release.) If you are interested in knowing how we solve this problem in our own way, please refer the link below which gives a brief technical description on this.

Photo Album

As we know, users can drag-and-drop jpg, png and gif images directly into a Wonderland window. This meets most requirements, but for a 3D blog, we wanted visitors to be able to preview a set of pictures rapidly using a series of thumbnails and then choose the ones they want to view. Furthermore, authority control was an essential concern—we couldn’t allow a visitor to drag-and-drop pictures into someone else’s space. Only the owner of a photo album can upload, delete and modify the album. Based on that, we created an alternate mechanism for uploading photos that addresses these issues.

Photo Album
Photo Album

A key part of the Photo Album module is its uploader. We use some tricks to reuse Wonderland’s intrinsic communication mechanism between client and server. Because of the limited length of one message, we divide the photos into many pieces and deliver them with ID respectively. Then, on the server side, we reconstitute the image according to the IDs. Due to the reusability of this technology, we can apply this mechanism to modules that allow people to easily and dynamically replace textures with local pictures. For instance, we apply this technique to changing wall paper in a host’s room. According to the testing we have done, this mechanism works quite efficiently and did not require any core code changes.

Blog Editor and Viewer

The Blog Editor and Viewer uses a mechanism somewhat like the Photo Album, but since text delivery is much less costly than images, it is even easier. This service is provided via two separate modules corresponding to the editing part and reading part respectively. It is simple for a guest to figure out how to use the reading panel. They simply have to click on a title of interest from the list. The editing parts is only accessible in a host’s room. To use it, the host left clicks on “the big book” model which represents the user interface of this function. An edit panel, implemented as a HUD pane, pops up for the host to write down what’s on his or her mind.

Blog module
Blog module

Music Player

“Music is what feelings sound like.” Hosts can play a piece of music in their cute room to create atmosphere. Every entry in the playlist stored in the database contains a unique internet address of a piece of music. We implemented the buffering and sharing, at the same time, let Jlayer handle how to play them.

Music Player
Music Player

Authority Control

Authority Control is the basis for the whole of Xland, guaranteeing the normal performance of the system and keeping order in the whole virtual world—no authority control, no Xland. For any blog, the editor, reader, photo album and music sharing constitutes the skeleton and the core set of the services, all of which deeply rely on the authority control. Our basic idea is to use cell IDs as the primary basis to judge if someone has the appropriate authority to access the content.

Motion Movie Recorder

The Motion Movie Recorder is a set containing two modules—flying movie recorder and circle movie recorder, both of which are modified versions of the existing Movie Recorder module. When we created our demo, we found that having a static movie recorder in Wonderland is fine, but not sufficient. We also wanted some movement. We made two new versions of movie recorder, one that moves straight ahead and one that moves in a circle, rotating at the same time to keep the lens facing the centre of the circle.

Motion Movie Recorder diagram
Motion Movie Recorder diagram

To use it, users click on the Motion Movie Recorder and it moves following the specific pattern. We hope these movie recorders will help you make your own awesome demo videos of your Wonderland worlds, or that you will simply using them to make a 3D film.

Circle Movie Recorder
Circle Movie Recorder

Database and Modification in Wonderland Core Code

We have uploaded almost all our modules to Open Wonderland Module Warehouse. But besides that, we also open all the details of the schema of our database and offer all modified core Wonderland code and the methodical guide to instruct you on configuring your own environment. Here are the links.

Final Thoughts

We designed this set of modules with the goal of making Xland a complete solution for building a 3D blog system in Wonderland. Here I want to thank everyone who has supported us: our mentor Professor Zheng Tao, without whose instruction we couldn’t finish such a project; Nicole Yankelovich, the Executive Director of the Open Wonderland Foundation, without her encouragement this article couldn’t exist and XLand couldn’t be known by so many people; and the Wonderland team, because of  their remarkable work, Wonderland is such a extensible project with brilliant software engineering where we can release all our imagination in this virtual land.

If you are interested in more information about Xland, please contact:

Jiang Yufei

Xland 3D Blog

July 23, 2010

I hope you will agree with me that this tw0-part guest blog post describing the work of a group of students in China is remarkable in many ways. First, over the course of a single semester, these four students implemented over 15 Wonderland modules! Some of you may have noticed the large influx of new modules contributed recently to the Wonderland Module Warehouse, most of which are an outgrowth of this Xland project. In addition, they have produced THREE demo videos. In part two of this article, which will be published in several days, Jiang Yufei describes each module and provides links to not only the source code for most of the modules, but also a considerable amount of technical documentation. To me, perhaps the most astonishing thing is the quantity of English-language text the students have produced, included this lengthy, but very informative, guest blog post. Please join me in congratulating these students on their fantastic accomplishment and also thanking them, their professor, and their university for this generous contribution to the Wonderland community.

What is Xland?

By Jiang Yufei, Nanjing University

We designed the Xland project as a 3D immersive blog. Xland was part of the CHIPS (CHina Innovation Program for Students) program sponsored by Sun Microsystems and the Chinese Education Department. Xland received a CHIPS “excellent project ” award. Our team, working under the direction of our mentor Professor Zheng Tao, is from Nanjing University in China and included Jiang Yufei, Gao Ruizhi, Feng Tao and Huang yuan.

This article will briefly introduce you to the chief features of Xland. The video “Xland based on OpenWonderland trailer” is a promotional video which gives you a first impression of our work.

Parts one and two of the video “Xland based on OpenWonderland Demo”, guide you through the details of this virtual space with 16 minutes of explanation and vivid animation to show you how the system works.

Part 1

Part 2

Why a 3D Blog?

According to psychology theory, all user interface and online operation should simulate operations in everyday life, like the e-book tries to simulate the experience of reading a real book and the Macintosh desktop copies the way we put items on a desktop in the real world. You can think of a blog as our online domicile. A 2-dimensional display cannot adequately simulate the sense of house or home. A 3D space, however, has the potential to improve the users’ experience of reading text logs, viewing pictures, and appreciating music.

All social networking systems have six basic properties: identity, relationships, presence, sharing, conversation, and on-line activities. Specific social networking applications tend to concentrate on one or two features. For example, Flickr and YouTube focus on sharing, Facebook focuses on identity and relationships, and Twitter focuses on presence. We noticed that on-line activities haven’t been adequately exploited partly because of the difficulty in representing them. With the exception of on-line games, we lack ways to socialize on-line. We believe a 3D immersive blog can improve the experience of on-line activity.

The essence of a blog is to show a person’s distinct personality. It is often difficult to do this using language alone. In the real world, we can get an impression of a person by observing his or her gait, apparel, and rooms’ decor. In contract with an ordinary blog, our 3D blog provides hosts more freedom and individualization, allowing them to change almost all aspects of their 3D space.

How does this blog system work?

From the point of view of a user, here is an overview of how the system works:

  1. After the server starts for the first time, there is only a Public Zone. No 3D blogs – represented as small rooms – exist yet in this world, since there are not yet any registered users.
  2. Once a user registers, he or she logs in to the world and his or her avatar appears in the Public Zone. We created the Public Zone model from scratch, using Google Sketchup.
  3. When the user walks through a portal in the public zone, the system automatically initializes a new, empty room (but where? Don’t worry, we will explain below) and the user emerges from the portal in the center of this room.
  4. To leave this room, the user just walks through the door of room, which leads back to the public zone.
  5. Even when the user exits Xland, the system maintains the room so that when they log in again and go through the portal, they can continue their work.
  6. You can easily visit your friends’ 3D blog by clicking on the name of your friend in the Friends panel. With the help of this panel, you can add/delete friends, send/receive messages, and share music, pictures and logs with friends.
XLand Friend List

Friend List

Note that we put all rooms under the horizon of the public zone, so users cannot see where these rooms are. When a server is filled with a maximum number of rooms, we can take advantage of Wonderland’s federation capability to create a new empty world on a different server to accommodate more rooms as new users register to create 3D blogs.

Layout of XLand World

Layout of Xland World

For more information on Xland, please contact:

Jiang Yufei

Wonderland Wednesday Community Showcase

July 7, 2010

Wonderland Wednesdays are weekly, developer-focused sessions that take place in the Wonderland community virtual world. Please refer to the Events tab on the Open Wonderland Facebook page for details. This week’s Wonderland Wednesday will be on the topic of Subsnapshots. RSVPs are appreciated.

Community Showcase

By Ryan Babiuch, aka “jagwire,” University of Missouri

Since its inception in March, Wonderland Wednesdays have provided developers in the Open Wonderland community with the opportunity to meet live with other developers to both learn about Open Wonderland and get to know each other. On Wednesday, June 23rd Open Wonderland developers were given the opportunity to showcase their work to the rest of the community for the first time. Of those developing in Wonderland, Jonathan Kaplan, Morris Ford, and myself attended on Wednesday to show the community what we have been working on.

First to present was Morris with his work on integrating scripting into Open Wonderland, specifically with animating models created using Autodesk Maya. He first showed a clock with movable hands which kept real time by receiving data from an outside source. Morris then provided to the community an animated bug moving through the world while flapping its wings.

Animated clock and bug modules

Animated clock and bug modules

Next up to present was Jonathan Kaplan. Jonathan has been working on a tool  for Computer Science students. Students can experiment with writing sorting algorithms in the multi-user code editor, or instructors can insert code for different sorting algorithms in order to show students visualizations of the various algorithms. The visualization involves a grid of spheres of different shades that are sorted from darkest to lightest. The first algorithm he showed was Bubble Sort, which is a slow but easy-to-understand algorithm for students beginning computer science studies. While that demonstration was working, another instance of the same module was used to display Quicksort, a much faster algorithm than Bubble Sort. Showing the two visualizations side-by-side, one is quickly able to deduce that Quicksort is substantially faster than Bubble Sort.

Quicksort on the left, Bubble Sort on the right

Quicksort on the left, Bubble Sort on the right. Students use the control panel to run the program or step through it one instruction at a time. The line of code being executed is highlighted in the code window while cubes highlight the spheres currently being inspected or swapped.

Control window displayed for Quicksort (on left)

The Sort Settings window allows students to change the number of items being sorted, randomize the grid, and change several visual attributes.

I was the final presenter. I first showed two new tutorials I have been working on. The first tutorial acts as a supplement to Jordan Slott’s “Developing a new cell” tutorial series. My first tutorial aims to add a simple spinning animation to the previously created cell. The second tutorial continues where the first leaves off and describes how to add security to the cell. With the two tutorials, I also presented a custom ContentImporter implementation for PDFs. The content importer acts as a way to submit files to the content repository running on Wonderland servers without creating anything to be shown in-world. plus new cell creation tutorials

From left to right:, Creating a new cell (part 5): Animating a cell, and Creating a new cell (part 6): Adding custom security to a cell

Next, I showed an Inventory module which allows Wonderland users to add  in-world objects to a virtual inventory. Users add objects to the inventory by clicking on objects which have an Inventory Component attached and choosing “take it” or “leave it for now” from a menu that pops up.

Clicking on the red sculpture presents the Inventory menu

Clicking on the red sculpture presents the Inventory menu

Sculpture disappears after being taken

After clicking "Take It", the red sculpture disappears from the world and reappears inside the inventory window. Clicking the remove button will make the red sculpture leave the inventory and reappear in-world.

After presenting the virtual inventory, I show the “spatial affordances” that I developed for the iSocial project. (Editors Note: The term “affordance” is used in relation to Wonderland in a variety of contexts. If you are unfamiliar with the term, the essay Affordances and Design by Don Norman provides a detailed explanation of the term.) The spatial affordances act as ways to either keep users in a designated space, or keep users out of other spaces. The affordances are displayed as discs appearing on the ground to keep users within and red vertical squares which act as Force Fields.

A red force field is blocking access to the red sculpture and the mouse.

A red Force Field is blocking access to the red sculpture and the mouse.

Clicking unlock from the context menu allows your avatar to walk through the force field.

Selecting "unlock" from the context menu allows your avatar to walk through the Force Field.

Personal Pods, which denote places for users to stand, are another type of spatial affordance.

Personal pods (pedestal shown in green) denote areas for which a person should sit/stand similar to a chair or desk.

Personal Pods (pedestal shown in green) denote areas for which a person should sit/stand similar to a chair or desk.

Pod turns red when person is on it

When a user stands on a Personal Pod, it turns red to show that the user cannot move outside of the bounds of the Pod. It also shows that no one else can occupy that Pod.

Pod unlocked

Right clicking and selecting "unlock" from the context menu turns the Pod yellow while in transition to green. Once the Pod turns green, the user is free to move from the Pod.

Pod is green

With the Pod green and the user no longer occupying the Pod space, another user can walk onto the Pod.

This first showcase was a great success and everyone in attendance was excited to see what other developers were doing with the Open Wonderland toolkit. We hope this will be the first in a series, so please let me know if you have a module you would like to demonstrate so I can set up the next community showcase session.

Mapping Emotions to Avatar Gestures

July 5, 2010

Here is another project from the Spatial Media Group at the University of Aizu brought to us by the same team responsible for the Wonderland-CVE Bridge described in a previous Wonderblog post.

Mapping Emotions to Avatar Gestures

By Rasika Ranaweera, Doctoral student, University of Aizu, Japan

Representing emotions in collaborative virtual environments is important to make them realistic. To display emotions in such environments, facial expressions of avatars have been previously deployed. Avatars in Wonderland can be animated with limited predefined gestures, but there is no limitation to integrating new animations along with new artwork or combination of existing contents. Our goal is to introduce emotional communication to Wonderland to make it more realistic and natural. In this case existing gestures were mapped rather than introducing new gestures to avatars of the virtual world. We also used user-friendly keywords to trigger gestures of avatars, for example :cheer: triggers “cheer” animation.

Avatar cheering image

Avatars in a conversation with emotion embedded textchat

The following table shows emoticons to gestures/animations mapping in our system.

:S Anger TakeDamage
:( Dislike No
3:( Fear TakeDamage
:D Joy Laugh
{:( Sadness GoHome
:O Surprise Cheer

Watch the demo video to see the gesture mapping in action.

This project has been written up in the following paper:

Senaka Amarakeerthi, Rasika Ranaweera, Michael Cohen, and Nicholas Nagel. Mapping selected emotions to avatar gesture. In IWAC: 1st Int. Workshop on Aware Computing, Japan Society for Fuzzy Theory and Intelligent Informatics. Sep. 2009, Aizu-Wakamatsu.

%d bloggers like this: