OpenSimulator:Future Release Discussion
From OpenSimulator
This article or section is a Proposal It does not represent the current state of OpenSim, but is an idea for future work in OpenSim. Please feel free to update this page as part of the proposal 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)
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 OSL Proposals.
Payment System
OpenSim will need to support micropayment. See Money for details on how this could be achieved.
Upload of existing 3D models
OpenSim should support common standards for 3D modelling. This would allow the upload of existing 3D models and make OpenSim immediately attractive for architects and project developers and their customers (walk through models).
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
Arbitrary-sized regions
I am thinking stand-alone regions here, though being able to set a single arbitrary size for all regions on a particular grid might be useful to some (or rowspan and colspan-like attributes in the region table if someone was feeling really masochistic ;-).
May require client-side work too as the 256m sim-size is likely still hard-coded in many places.
Very useful for my own free-standing simulator as I want a lot of area but not much built on it, and would rather avoid the inter-region comms overheads if possible.
Arbitrary origin would be nice too, so I could set (x,y,z:0,0,0) at the middle of my sim on sea level making my maths for several things I plan much simpler (yes, I want I want I want the whole world - and sundry satelites thrown in too!!! But not in any hurry ;-)
The ability to have edges of a standalone region be mapped to other grids or other standalone regions. I'm thinking hyper-space, one-way doors to other places. It would be interesting for standalone private regions that have doors to other places like opengrid or osgrid or something like that.
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.
Grid to Grid Travel
Going to each grid seems to require setting up an account there. Someone may specialize in 'passport authentication' allowing an avatar to hop from grid to grid (possibly with just a wallet and a small 'suitcase' inventory) as one would go from country to country in rl. Grids get control of who and how may pass through their grid.
LaeMi adds - I am waiting eagerly for integration of realExtend's avatar server which should cover this - the graphics enhancements of rex are of less interest to me as I am not a 3D designer and so have limited use for meshes, but rex has a good number of other very useful features like this too. (Rex integration is being worked on right now AFAIK).
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: <sim|grid>://<FQDN>[[:<[zonename,]x,y,z>] | [/<symbolic destination>]]
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
Macro-level (Grid-wide) location Coordinates
A set of OS-functions that work just like llSetPos, llGetPos, etc. but use 32-bit coordinates. The low-order 8 bits get used as intra-sim coordiantes as per usual, the high-order 24 bits determine which sim on the grid is being referred to. Some extra commands like osCoord2Key to get the key of the region containing the coordinates, osCoord2Name, etc. are possibilities.
- Minor modification, have the int read as 16bits=region_coords, 8bits=sim_coords, 8bits=sim_sub-coords. To paraphrase Mr. Gates, 64k sims in each direction should be enough for anyone ;-P
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.
One known Client issue
The 'extended' water off the edge of actual regions is a problem, as this is probably hard-coded into the client. Probably should have its own setting which can be either fixed per grid (or region for stand-alone) or track the tide server as per region water level.
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 <math>Insert formula here</math>