 |
Home | Changes | Index | Search | Go
This is an extension to Project Looking Glass. Project Wonderland aims to produce a large scale collaborative environment
on the Project Looking Glass infrastructure that will enable users to collaborate in a number of ways. One key goal is to
allow users to share and work concurrently on desktop applications (X11 and Java to start with and XP using rdp).
On this page:
API Cleanup
- Post 0.3 release we plan to spend some time cleaning up the API to make the platform easier to use and more extensible. Check ApiCleanup for details.
Performance, and how you can help
Project Wonderland provides a flexible platform that should run on a wide array of hardware with varying performance characteristics. One of the critical elements is graphical performance which has not traditionally been important to many users, this is obviously changing with the rich interfaces being created in most operating systems (Compiz on Unix, Aqua in OSX and Aeroglass in Vista) but there are lots machines deployed with lower end hardware. When building a virtual environment the most critical aspect that will affect performance is the complexity of the art (amount of geometry, size of textures etc). For the sample world, MPK20, included in Project Wonderland the art is targeted at a mid range graphics machine, for example GeForce? Go 5200 card in a laptop should provide good performance. If you run the wonderland client and observe poor performance there are a number of things you can do to improve it
- Check you have the latest graphics drivers installed for your hardware (this is especially important on linux which does not normally include hardware accelerated graphics drivers)
- Make the Wonderland window smaller.
- Lower the desired frame rate of the wonderland client (under the View->Max Frame Rate menu)
- Try quitting some apps. When the on-board texture memory fills up some graphics cards push textures out to CPU memory. Textured rendering is slower from this type of memory. Reducing the number of app windows will free up more space in the on-board texture memory. This will reduce the number of CPU textures and will result in faster rendering.
- Scrolling an app window with the mouse wheel can generate huge amounts of data traffic that can swamp low bandwidth clients. Using other types of scrolling features (such as scrollbar buttons, scrollbar elevator, or arrow keys) is easier on this slower clients.
This PerformancePage provides information on measured performance on different platforms. If you have any questions please post to the forums.
The ScalabilityPage provides information on the latest Project Wonderland scalability and performance benchmarks for individual software components.
Extending the world
The way the world is currently defined and can be extended is very preliminary. One of our high priority tasks is to dramatically simplify this process, but in the meantime here are the gory details of the current implementation....
The world is defined by a group of Cells (3D volumes) which are controlled by the server. As the avatar moves around the world the server periodically informs the client which cells to load (and which to unload). The client is passed the cell type, position, bounds and any extra data required for setup (handled by the UserCellCacheGLO and UserCellCache). The bulk of the static world content is defined as SimpleTerrainCells which can load and display data from .j3s files (an optimized Java 3D graph representation). Cells are grouped in a hierarchical structure (very shallow at the moment) which is hard coded in WorldRootCellGLO, if you want to alter the world content you will need to edit this file. For more details on the specific classes involved, see ProjectWonderlandArchitecture.
Content can be added to the world in one of two ways: through static art files or programatically using Java3D code. To add static content to the world, see "Content Creation" below, as well as ProjectWonderlandBlenderImport. To add content programatically, you can define your own custom cell type. Custom cell types give you complete control of the Java3D scene graph for a given volume of geometry. You can add new objects, load static art files, react to user input and send messages between clients and to the server. Custom cell types can be developed without changing the core Wonderland code. To create a new custom cell, you can use the Wonderland module system. See the sample module in the Wonderland modules directory for an example.
All the data files for the world (the geometry and textures) are fetched on demand from a web server and cached on the client. All the data is also in the project lg3d-wonderland-art.dev.java.net. If you want to add content to the standard distribution you can include files in the lg3d-wonderland-art project and we will host them on our server, or you can host them on your own web server as detailed below. For testing there is a flag which will cause all the data to be loaded from the local disk. To enable this cvs checkout lg3d-wonderland-art as a sibling the lg3d-wonderland project and then edit/create the file lg3d-wonderland/my.build.properties and add the line "useLocalArt=true" (without the quotes).
To host the content on your own server do the following:
- Link or copy the compiled_models directory from the lg3d-wonderland-art into the www directory of your webserver
- Edit lg3d-wonderland/my.build.properties and add the line "wonderland.art.url.base=http://example.com/compiled_models" (without the quotes), where example.com is the webserver host, and /compiled_models is the URI of the compiled_modules directory as specified in Step 1.
Note: The checksums.txt file can be ignored currently, the checksums are checked, but no action is taken.
Content Creation
Initially we will rely solely on external content creation tools. In the longer term we hope to produce an in world creation tool but we will always support the external tools as they provide a much richer environment than is possible in world. For simple geometry we can support any tool that can export data in a form for which a Java 3D loader exists. However we will need to include some meta data with much of the geometry for correct in world interaction.
Currently we are using x3d as the data format for loading data into the world. As we define the meta data system we will examine what other formats we can support or if import tools can be created which enable users to apply the correct meta information. Within the Wonderland system all data is stored in the Java 3D SceneGraphIO binary format.
Initial content for the world is being created in Maya and exported to x3d. We obviously want to support other tools, especially free and open source tools. The following tools should be evaluated for inclusion in the tool path
Wonderland X11 Server Source Code
Wonderland X11 App Sharing uses a special X server known as the "X Remote Window (XRemwin) Server." This server is similar to an VNC server except it handles windows separately. That is, instead of just displaying an entire X desktop inside the virtual world it allows windows to be individually integrated into the virtual world. This allows X windows to be treated as first class objects in the world. For example, these windows can be moved into different locations in the world and do not even have to reside in the same plane. They have complete freedom of movement and orientation.
The source code for XRW resides here.
This source code is based on Xorg 7.3. It contains only the Xremwin-specific differences. It contains some entire files, which are new, and also some code fragments
which change existing Xorg files. These changes must be applied incrementally to an existing Xorg source code tree. Both Linux and Solaris changes are available.
There is a file in the zip bundles called README-XREMWIN which explains how to integrate this code into an Xorg server source base.
This code is licensed under the MIT License.
Documentation
End User
Architecture documents
Tutorials and HOWTOs
Developer Notes
Event Handling for 3D Objects
The way you add an event handler to an object in the world is to make the object a child of an J3dLgBranchGroup. This is a type of Java3D scene graph
node on which you can register keyboard and mouse listeners. In Wonderland, whenever an event happens over a visible object in the scene graph
the system starts searching for an event listener. It works its way up the scene graph toward the graph's root. Along the way, whenever it encounters
a J3dLgBranchGroup it calls the listeners that have been registered with that group.
There is code in the appshare directory which demonstrates how to initialize a J3dLgBranchGroup, how to register listeners with it,
and how to implement those listeners. Check out lg3d-wonderland/src/classes/org/jdesktop/lg3d/wonderland/appshare/Gui.java,
especially the method initEventHandling. Note that several of the classes of the Wonderland event system are defined in the source
code for the lg3d-core java.net project. Go to the parent directory of lg3d-wonderland and do a cvs checkout lg3d-core to get this
source.
Proposals
- ProjectWonderlandFileSystem - A proposal for representing Wonderland worlds on disk with a series of XML files
- WonderlandWhiteboard - An area to focus in-world whiteboard work (record proposed feature-list, record other whiteboard-related conclusions from the forums, etc)
Desired Features
This is a list of potential new features to add. If you are thinking of contributing to the project, please review this list and see if you might be able to build any of these features. Please feel free to add to this list as you think of new ideas that would enhance the Wonderland environment.
About the Developers
WonderlandDeveloperProfiles
WonderlandKeystrokeMappings
WonderlandSupportedPlatforms
WonderlandTutorials
WonderlandArticles
WonderlandGuides
WonderlandRoles?
WonderlandTechnicalDocs
WonderlandHelp
|