OpenSimulator:Future Release Discussion

A collection of ideas for additional functionality in OpenSim. Please add your thoughts - anyone may contribute.

3D grid structure
I have always wanted to see a grid where you could have regions not only to the north, south, east west of a region but also above and below. This would enable space above for orbiting space stations and the like and depth below for underwater worlds and tunnels. - Garth FairChang

I like the idea of a 3D Grid structure, along with that, the ability to turn off gravity, water and the terrain textures. It would be nice to set the region's background image to a starscape or something other than the default background.

User defined gravity fields. This would be useful in a grid environment that was space themed, certain areas could have defined gravity fields. The possibilities for this could be very interesting.

3D Security
At the end of the day, this technology is a new form of computer user interface, and mobile agent application server. We need to move away from the concept of land, in a 3D environment we could assign access rights to 3D volumes, call them security regions. These security regions would have permissions granted by access lists, ability to assign different rights to different users or groups. (if we did 3D grid structures this would be a must)

One security feature, is the ability to "hide" objects within a security region from users that don't have access rights. Much like barriers in SL, these 3D security regions would just not show up in the viewer, and the user would not have rights to enter the area. It would interesting if you could do this on a primative level, an object that is only viewable by people/objects with the proper permissions. (The engine could detect collision based on bounding box)

LaeMing adds:

An alternative might be to add volume-based permissions to prims themselves, so - for example - you could define a transparent phantom prim, and anything spacially within this prim is subject to its security settings (can enter space, can see/interact-with contents, etc.). This would allow arbitrary sized/shaped security regions (I often would like to use cylindrical/spherical security zones, given the chance!).

Portal Primatives
I propose a "hyperlink" prim that would be configured with an URL to a destination region/grid. The prim would be like a phantom prim, and when looked at, the user would see the destination, a doorway, like a region boundry, when the avatar passes through the object, the avatar is handed off to the destination region. This would be very cool feature, a user/company could "rent" space on a popular grid a store front, in the back of the store is a "doorway" to the user/company's private region/grid server.

(Croquet is an excellent referral to this concept, since the developers devised Portal "primitives" that allow travel not only between different worlds, but to your own one aswell. Also, once your in your own world, you can create yet another Portal to a new world that you created and so on.) -Darakon Kayvon

Governance System
The online world would have to provide a means for communities to develop legal and political systems of governance. I can think of voting systems as a start.

Scripting
See the list of OSSL Proposals.

Payment System
OpenSim will need to support micropayment. See Money for details on how this could be achieved.

Free-form Avatars
OpenSim should, at some point in time, support the design and animation of free-form avatars (e.g. animals, monsters, robots).

In-World console maintenance
Terrain manipulations, statistics and some SIM administration related tasks are not available using the Viewer - they are only available on the command line application console where OpenSim is running. It would be nice to have this same console available in-world, using an Instant Messaging window with the simulator itself, the same way as we do with thoses old command line terminals.

Externally Scripted Objects
A prim with the script contents something along the line of //external:somehost:someport. Have the simulator connect to this host:port and relay data from it to the prim. Example, have a simple library that maps the LSL functions to a simple binary protocol, which can be used from various programming languages, not neccessarily .NET, and have it act like a server. This would allow scripts to be hosted outside the Simulator while adding security, as no code would be running on the Simulator. People could code Prim scripts using C if they wished, and the library would simply send the LSL commands to the server for relaying to the clients. If this could go straight to the client then even better. The next step after that would be for the script to be able to send Prim data aswell. This also gives the possibility of using one running script on several different Simulators at once. - HashBox

Object Inventory Source Control

 * This wish list feature starts with the premise that "I HATE working on scripting and objects within SL". Basically, allow users to checkout an object and its contents to an SVN repository.  Work on the object and contents locally in whatever application they wish.  Later, they can checkin the changes, and update the object inside the simulator.
 * SubversionSharp

The ability to set region bounderies
Useful in adding a max ceiling to a region. If it was possible, ability to create a "region box" with as stated earlier, an arbitrary origin. Thinking a little further, a "region sphere" would be interesting.

Universal Location Addressing
As part of grid to grid travel, a common standard for a universal location address / coordinate will need to be defined and supported.

Proposal: opensim://sim.grid.domain.tld:x.y.z/named_location/?param=value (alternatively, could be osa:// or osl://, or sim://).

Examples of use:
 * opensim://sim25.mygrid.mycompany.mycountry/
 * opensim://shoppingcenter.gridprovider.mycountry/myshop/
 * opensim://mysim.mygrid.mycompany.mycountry:100.75.80/
 * opensim://closedgrid.myworld.business/entrance_hall/?userid=xxx&password=yyy

To avoid confusion, Opensim TLDs will need to be different from existing Internet TLDs. A naming registrar (NIC) will need to be established that ensures uniqueness and proper handling of registrations. - Ezekiel

Proposal: :// [/

Examples:
 * sim://www.mydomain.com
 * sim://www.mydomain.com:0,0,0
 * sim://www.mydomain.com/mycoolplace
 * grid://www.mydomain.com
 * grid://www.mydomain.com/mycoolplace
 * grid://www.mydomain.com:Zone1,0,0,0

The client can then get the required information regarding port numbers, protocols, and so on from SVR records embedded in the FQDN DNS Zone. This way clients are immune to changes in the physical hosting of the simulators. The data encoded in the SVR record could also give clues as to the protocol versions, abilities and restrictions of the destination. -Kelannim

Scriptable 'bodyparts' (Shape, Hair, Eyes etc)
This relates to Shapes, Hair, Eyes etc which are not prims but 'bodyparts', and are not manipulatable via LSL.

Two script commands could be implemented, one to write say a vector to 'bodypart' parameters (the numbers one edits in 'Appearance...'), and another to read them. It would be interesting to be able to create 'bodyparts' from scripts, using data derived externally or calculated in a script, perhaps from other 'bodyparts' data....

Further, with an extension to the permission system (notifying user that a script wants to modify a Shape/Hair/Eyes/whatever of theirs), perhaps editing of existing 'bodypart's could also be available.

Tide Server
It might be interesting to support tides in OGS. It should be doable without any mods to the SL client and probably wouldn't be even a big project (possibly a good teeth-cutting project for someone who wants to get into OGS server coding but isn't confident to tackle parts of a big or critical server component).

A few things to consider:


 * The tide server just periodically updates the water level in a grid's sims.
 * Would need to be grid-wide or dis-synchronised tides would have ocean-edge alignment issues (so no rolling tides across huge grids, sorry) so it would be a server operating at the grid level talking to regions.
 * Needs to be over-ridable as inland regions often use water level for things other than ocean and wouldn't want to follow the tides.
 * By using plug-in servers, different complexities of tide can be implemented depending on grid needs.

Some example tide servers

 * Null tide - simply a way to globally set sea-level in a grid. Takes a single sea-level value.
 * Simple Periodic - set the max, min and period and starting time values and let it roll.
 * Sun (and moon) locked - uses the position of the sun/moon to place tides realistically (presently rather easy as the sun and moon are always 180deg apart, but they might get unlocked from eachother later, extra suns/moons might also crop up long-term - presently it would be the same as Simple Periodic, but time-synced with whatever the day cycle is). Can day-cycles be enforced (or at least a default set) region-wide? Otherwise this would not be feasible.

SL Client compatibility
When the client sends a water-level request to the region, the region does one of two things:


 * if the water level is -32768 (assuming this value is stored as signed32) or 65535 (if it is a u32) or whatever represents the most 'insane' value possible, then the region refers back upstream to the grid tide server, gets the present tide level, and returns that (sane) value to the client.
 * if waterlevel set for the region is in the 'sane' range, that (region-local) value is returned without referring to the tide server.

(A region-server console command to set the water level outside what the current SL viewer allows is assumed).

Updating the tides.
(I assume the region is capable of informing attached clients when water level changes so that on-the-fly changes by region admins are reflected reasonably immediately in clients already).


 * tide server periodically multicasts a tide update signal to all regions.
 * if the region water level is in the 'insane' setting, it passes the update on to the attached (and neighbour-attached) clients.
 * if the region water level is 'sane' it does nothing, leaving the region-manager's water-level alone.

Client Side Weather System
A client side based weather system would be a breath of fresh air to those who enjoy more realism (Graphically). An overall Grid Weather System could also be created, so that different parts of the grid will be experiencing different forms of weather e.g 4+ Regions more to the north of the Grid would be in the midst of a blizzard whilst several sims further to the south are enjoying clear blue skys, but with an onset of rain on the way. A Server could be set up in order to simulate the overall GWS (Grid Weather System) and would shout to each region to simulate a specified weather type. All the Client has to do is pick up on the Information being sent to the region from the GWS and simulate it on-screen for it's users. Obviously this feature can be turned on and off at will, but it would be nice to not have to set up a particle weather system that cause's more lag than necessary. - Darakon Kayvon $$Insert formula here$$

Strong Identities
Basically objects and users would have strong identities created using public key cryptography. A creator or user would create a public/private key pair and register it with a key server, along with a signed hash of their character name/UUID/whatever. This creates a strong identity associated with the user.

This creator key could be used to generate certificates associated with their objects (signing the UUID and a hash of the geometry of the object along with their key identity) and register along with the geometry hash in a database. They could also create 'ownership' certificates which would be a signature against a player's identity and the object hash.

One of the uses of this is to allow a sort of voluntary property enforcement. The way it would work is that when an object is transferred using an intergrid (HyperGrid) connection, the transferor would also send any certificates associated with the object. These certificates, if the receiving server wishes, could communicate ownership or copy/mod/no-transfer rights based on the certificate and checking against the public key servers and object registries; it may also simply communicate a sort of certificate status to the other clients such that it could be verified that these objects are indeed created or authorized copies owned by the client. This would of course be completely voluntary within the grid, but it could allow commercial grids to manage intergrid object moves strictly if they want to. It could also exist simply to increase the 'cachet of ownership' such that you can show that you indeed purchase this from the creator.

Some notes:
 * It would be trivially easy for malicious clients to modify the object slightly in order to generate a new hash and register it with the object server. The point boils down to really more supporting the social movement of supporting artists you like and being able to show thus. Artists could publish their object UUIDs along with their owners so that they could be reverified orthogonally.
 * It would be trivially easy for malicious clients to submit erroneous hashes for objects. This could be solved by transferring the object parameters (all of the prims, locations, and parameters, the object description) to the object registry and having it do the hashing.
 * The creator keypair could be used for intergrid authentication also. Since it is a proper strong encryption keypair which is tightly associated to an avatar identity it could allow authenticated intergrid connections. It could also be used to encipher the communication between the client and the grid and authenticate messages back and forth.
 * Strong identities for objects could include a keypair which allows real-world integration such as bank transactions and whatnot to have a physical metaphor.
 * The point of the object certificates really isn't DRM (although in a limited sense it can be used for thus), but (partially) a way to show other players that an object was payed for and is original, that you willingly supported a creator voluntarily with your patronage.

--NickRusnov 21:45, 28 November 2008 (UTC)

Extend the form of the Sphere to a Superquadric Ellipsoid + Geodesic
On the end of present sphere data definition add the fields...
 * Sharpness - default to zero, meaning a regular sphere/ovoid and the sphere rendering path is to be used as per usual client-side (and the 'sides' field ignored).
 * Sides - can be set to any valid geodesic shape (client-side renderer can clip this value if too high). Negative value indicates to use the geodesic's dual.

Client-side (eg HipoViewer) would then need to be altered to allow editing and rendering of these shapes. (Detecting full sharpness and full roundness and passing these to appropriate optimised renderers for these shapes likely a good idea).

Adding same values to the end of the Cylinder shape to make an extruded Superellipse would be nice too (and with full sharpness, arbitrary regular shape extrusions such as pentagonal/hexagonal/octagonal prism).

Then finish the set with a Superellipse-extended torus.

Texturing as per sphere/cylinder/torus, so this does not - even if maxed out to be sharp-edged - replace a real box which can have one texture per face.

Simple Underwater Avatar Physics
Simulator physics option for:

When Avatar_position+(Avatar_Height/2) (ie. their head) is below simulator water level, they are put into fly mode. When they are more than Avatar_position+(Avatar_Height/3) (approx shoulder level) below simulator water level, they get a low positive gravity value (buoyancy) applied to them (use the page-down key to swim down against it). 'Swim' into waist-shallow water and Page_Down into land to stand again. No special client-side swim animations, etc. - they would be nice, but fly mode animations are good enough for a start and don't require client-side changes.

(Yes, it can theoretically be done with scripted attachments, but I prefer the efficiency of the physics engine doing it directly).