Just a long brain-dump of some ideas I had while reading through the list of the requirements for the VOS/Interreality 3D suite. I'm sure you will think some are blatantly obvious, or redundant, or that some aren't quite within the scope of VOS -- though perhaps they are something that could be implemented by an extension/plugin to either the server or client (or both). In fact, one could argue that any robust extension system should be able to support all these kinds of features if they aren't already in the "core." Also sorry if it's a bit disorganized.
1.1 Mission Statement Should emphasis be put on the interconnected aspect of "online"? In other words, the worlds can and should connect to other worlds, either though links or direct portals. Under "platform" should it mention commerce in the list of possible applications? 1.2 Multiuser Requirements Should users also be able to form "subgroups" or "channels" with other users on a server which they can send messages (or other data) to? Should users be able to send messages directly to another user (not through the server)? I echo Reed's suggestion not to specify VOIP directly, but rather audio streams in general. In fact, perhaps users should be able to stream multimedia in general (face-to-face video, for instance). Users should have the option not to receive certain kinds of multimedia or have it limited in bandwidth. Users shall be able to ignore messages or other traffic from any other user at the server-level (ie, the server won't propagate it to them any more). Administrators shall be able to grant and rescind Moderator privlidges to users. Should users be able to transfer virtual world object to other *servers*? Should content be flaggable with age restrictions or NSFW, and users be able to filter by content classification? Should users be able to suggest that content be flagged (including, for example, other users' avatars)? Should servers be able to create independent "instances" of the same space, so a space doesn't become overcrowded (or to provide a private experience -- for example, when shopping or doing research)? -- Should users be able to "invite" other users into their instance, or all go into an instance as a group? (private meeting room, or game, or collaborative research). Should they be able to set more general permissions on who can access their instance and how (ie, some have full access, some are read-only/observers, some can instantiate their avatar and some can't, etc) 1.3 Online Networking The client shall support intelligent caching of data from recently-visited servers Partial downloading of the world (ie, only currently visible/important features plus intelligent precaching) shall be supported Should there be user preferences to control the amount and types of bandwidth the client will receive from the server? Should the server have features to impose quotas on user resources such as bandwidth, server cpu time (scripts), number of objects, storage space, etc? (this is probably covered in other sections) Servers can link to content on other servers (and other servers can limit such remote linking) Clients can perform parameterized queries for downloading data or receiving updates (I swear I thought of this before the recent discussion ;) ) 1.4.1 Scripts Should the server and client have standard frameworks for "plugins" or "extensions" which can extend the interreality 3d platform in various ways? Should the client be able to query the server for the features it supports and plugins it has installed, and vice-versa? Should the client support extensive user-customizable macroing/scripting capabilities? 1.4.2 Interactivity Should there be "movable" objects which can be manipulated by dragging the mouse or another input device? The user shall be able to move around the virtual space through a variety of control schemes and input devices. The movement may be constrained by the client or by the server. In either case, a physics system may be imposed, and in the case of a server-side physics system, client-side prediction will be supported (this requires representing movement as user input actions, timestamping them, and keeping the timestamp synched between server and client -- maybe some of this should go in the "Networking" section?). Server-side movement restriction may also disallow a user from entering a certain area based on other factors (such as permissions or rules of a game). For support of games etc, should the server (or a script on the server) be able to restrict which VObjects the client can access or change based on where the user is in the world, or what the state of the world / current game is? (ie, to prevent cheating / spoiling -- to ensure proper progression of game logic - or outside of games, to force the spacial metaphor to be followed, etc) Scripts/extensions should be able to specify other kinds of interactivity with the world. User ability to see everything that's going on in the client, cache status, currently connected servers/users and currently active objects, bandwidth usage, cpu, etc. A feature in the client to "browse" your own local PC in the 3d interface? To run local 3d applications or browse the web or view files inside the 3d interface? Having a "home world" that you can set up locally with common links/portals to other worlds? (the ability to log on remotely and browse your pc or home world from another client across the network? maybe even invite friends into your computer as well, except they'll have restricted access? ok, this has gone out of the scope of interactivity...) 1.4.3 Authoring I like Reed's idea of being able to "sign" the objects you create. Perhaps vobjects should have a built-in facility for providing "signable" data for the object and a signature that can be verified against it. Content should support (require?) levels of detail / scalability for different client capabilities and bandwidth situations. Revision control / edit history of user-editable objects? (sorta like a wiki, where you can roll back if someone screws it up) Objects should have a physical model for servers or clients which support physics-based animation / interaction / movement. The server should be able to specify limits for the data size of objects, their physical size or other properties. Should users be able to author an object on a server that only selected other users can see/ know about its existence? Should users be able to "author" an object that is sent directly to another user, not through the server? This way, they can share the existance of the object in the current space, but no one else is aware of it? 1.5.1 Meshes and Effects "Portals" is more than just an effect. There's a lot you could do with portals between servers, and perhaps this should go up to "Online networking" but I'll put my thoughts here. A server can choose to accept incoming portals, and have several locations specified to be "portal inputs" where the portal "door" appears to be. Servers may load-balance incoming portal connections across instances or across physical servers (as with any incoming connections, really). A client, upon seeing a portal object, will open a connection with the destination server, but won't instantiate its avatar there yet. It will render the scene aligned with the "incoming portal" on the destination server. In passing through the portal, it will remove its avatar from the old server and instantiate it in the new -- perhaps requiring some additional signaling so that onlookers see a smooth transition. Upon passing through a portal, the user can leave the connection open to the old server (if it allows it) or at least remember which portal went back to which server so they can re-trace their steps (therefore, on a server, every outgoing portal should also be an incoming portal, but not necessariliy vice-versa -- a server can have "incoming-only" portals which receive users from many different places). If two servers have outgoing portals to each other it can be a kind of bi-directional portal, but this sh ouldn't requrie any additional logic. Users can also open "temporary portals" for themselves only (simply a graphical nicety, no interaction with the server), or instantiate one on the server if they have permission to add objects. Portals can have permissions set as to who is allowed to "go through" them (really, who is allowed information on where it links). Servers can restrict who can arrive via portal and where. Perhaps a user can create a temporary portal that only certain other users can see, with the intent that they can follow him/her. Temporary portals will disappear after a timeout after their last use. A result of all this is that portals may not necessarily be seen the same by all users -- but that's probably OK. The client should limit the number of portals "opened" at the same time to save bandwidth/memory. Some portals could by default be "closed" and need to be requested to open before a connection is made. Finally, portals should display messages to the user while connecting or during error / access denied situations. Wow, I rambled enough about those! User options to adjust lighting in the world, turn off shadows and other features, etc. 1.5.2 Avatars Servers should have the ability to restrict various parameters of user-uploaded avatars (just like content) Other users may choose not to download custom avatars -- therefore, a "fallback" standard avatar should be available. Models should support various levels of detail/bandwidth requirements Model articulation can be based on canned animations that are triggered, or by "streamed" bone animation data (if the server allows it, and the clients request it). For example, a head-tracking device may be linked to the position of the model's head. Or a motion-tracking glove may be linked to the model's hand. Avatars may be created on the server by scripts, with appropriate permissions (in other words, bots/agents). User permissions limit the total number of bots a user may have on the server at once. 1.5.3 Animation Support not only canned/pre-recorded animations, but also "streaming" animations? Procedural animation (ie, have this block follow a sine wave, have this object spin in a circle, etc)? Physics-constrained animations? Animated textures / procedural textures animate other object properties (have lights pulsate or vertex colors change over time?) User option to stop any animations in the world in case they're annoying. Also second Reed's suggestion of sound effects. Also ambient sound. And perhaps sound environmental qualities (amount of reverb/damping/etc)? User options to "mute" anything in the world that produces sound, or control volumes. Ok, that should be enough thoughts for now :P -Ken _______________________________________________ vos-d mailing list vos-d@interreality.org http://www.interreality.org/cgi-bin/mailman/listinfo/vos-d