[Resending since previous bounced without membership of realxtend-dev] Toni Alatalo wrote: > Melanie wrote on 18th July 2009: > > (am cc'ing rex-dev to inform the devs here who follow that but not > opensim-dev, we talked about this in RL here yesterday, but propose that > the discussion will be continued on opensim-dev) > >> A clear and loud +1 on getting started on removing this SOG/SOP >> hierarchy thing. >> The basic "node" could be stripped down to position, rotation, >> scale, parent, children and a few more things, with the prim stuff >> being in it's own class like Inventory was already moved out. >> > > Has this been worked on already?
No code has been writing, afaik, just discussions. > > We have now had a short two week research period at Realxtend, now that > everyone returned from holidays, and next week we'll plan the work for > coming autumn and the rest of the year. > > One issue we have is the Opensim scene object data model. For the viewer > side, we designed and implemented an Entity-Component model in spring - > this part of the design doc (written in February and implemented in > Naali later) is > http://wiki.realxtend.org/index.php/NG_Design_Document/Viewer_Architecture/Framework#Component_based_World_Object_design > > Instead of a base scenenode class, that model uses aggregation: an > Entity is just an identity, which can refer to any components it wishes > to use. One example is what you say above: position, rotation and scale > -- those are currently implemented in Naali as the Placeable component. > So any entity which wants to have those props can have that component, > currently that is avatars and prims. But also e.g. the terrain and the > water skybox are entities. > > Prim data we haven't splitted into many different components, but now > there is a single component for that data: > http://www.realxtend.org/doxygen/viewer/class_rex_logic_1_1_e_c___open_sim_prim.html > > The idea is that with that Entity-Component model we can have all kinds > of data, like the Ogre material properties or whatever physics settings. > Even that an application can define own custom components, which the > uniform system could then store and transfer, and the application code > could handle how it wants. These components are just passive data, no code. > > The question for Opensim developers is: would this kind of design be a > good target in the SOG/SOP etc. refactoring? On the surface this sounds like a good approach - keep a minimum structure in the objects and bring everything else in via composition. Out of interest, have you thought about a Model-View-Controller approach to this problem? > > In coming Realxtend work there is increasing pressure for being able to > easily extend the data there is about the objects in worlds. This is not > for any specific application only, but specifically to allow all kinds > of applications. In that sense it would seem to fit the Opensim goal > well, being a generic platform for many apps and not only a SL impl. But > for us it would also support the immediate specifics in Rex, like Ogre > animation data etc. > > There is basically two places where we'd need the server to support > arbitary data: 1. in networking and 2. for storing. Also of course it > would have to be within the Opensim internals so that scenes with the > data like that would still function, the actual running of the > simulation like movements and physics etc. Personally, I think that we should support arbitrary data directly but I know other core developers have concerns about this (such as performance ones). This is probably a topic for debate. > > One option is that we make a module that implements an additional > network connection to the client with another protocol that communicates > the scene object data, with basics like movements remaining in SLUPD as > they are. In this case the module could also use some own storage system > for storing the data too. But in this case similar(?) basic information > about objects would be in two places .. dunno if/how bad that would be, > we'll have to examine this more I think. Intuitively, having two sets of data stored in different places feels nasty - really something to be avoided I should think. > > But if we could refactor the core Opensim scene to this design, and > implement the core storage mechanism so that it'd support additional > data (or even arbitary custom app specific data?), it would be just a > matter of different ClientViews .. SL view communicating just the prim > data as it currently does, and Rex view communicating Ogre and/or > arbitary data in the E-C style, possibly using some other protocol like > MXP and/or Google protocol buffers, or an own solution. > > We still have enough tasks to keep us busy easily for the next month or > so without this, but need to get this ball rolling at some point -- > possibly later in the autumn. This is basically just a heads-up to > inform opensim devs about what we have in the client now, and what would > need from the server, to get initial reactions and ideas about how it > might be good to start with this. If there is a feasible roadmap towards > this within Opensim, I imagine we would do the bulk of the work, of > course appreciating all the help that could get. I'm a bit afraid of the > SOG/SOP monster having heard about the difficulties in changing it, but > I guess we'll have to see that as an argument *for* a refactor and not > against it. At least Realxtend can not be stuck with the SL scene model > forever. I think it would be fantastic if Realxtend could help lead the way on a SOG/SOP refactor in partnership with the other interested devs. The best thing would be to develop a roadmap in co-operation rather than wait for one to happen. The topic of SOG/SOP refactoring has been kicked around before in this mailing list - not just this time - but no-one has had the resources to go forward with it. > >> I don't now about the interface registry, I'd rather see this >> "minimal" class be a base class from which more specific classes >> inherit and that handles the connections to Scene and the linking >> stuff. Seems more sensible to make this most used entity be fast, >> specific subclasses rather than registered interfaces. But... a >> subclass could offer that registration method if it needs to be that >> extensible...... >> > > So in our design the base Entity is so minimal that it doesn't have any > data, just an identity with pointers to mostly minimal data components > like Placeable for pos&rot&scale, and larger data like Prim. No > interfaces are used, but the extensibility is achieved by aggregation. > >> Melanie >> > > ~Toni > >> MW wrote: >> >>> Both SceneObjectGroup and Part are growing beyond manageable sizes (with >>> both of them over 3000 lines long), and are not very easy to change when >>> trying to make custom classes bassed on them (as I think Sean found out >>> recently during his attempts). >>> >>> Ideally I think we would all like to see the separate Group and Part >>> architecture replaced with a architecture that was more like a Node based >>> scenegraph , and had a hierarchy of SceneObjects. But I think we all know >>> of the problems in doing that, and how much work is involved. >>> >>> So as a small step in (hopefully) that direction, I propose to start >>> splitting those two classes up, and having something similar to the >>> interface registry we use in various of parts of the architecture. >>> (RegisterInterface<type> , RequestInterface<type>() ). >>> >>> So things like the methods for editing prims would move out into a separate >>> class; for example ISceneObjectGroupEditing. And then when the scenegraph >>> wants to call a editing method on a Group, it can call : >>> >>> Group.RequestInterface<ISceneObjectGroupEditing>(); >>> >>> >>> I believe that this will at least make the code more manageable and make >>> those classes easier to customise. I also hope that it will make it easier >>> to head towards a new combined architecture for prim handling. >>> >>> The draw back could be performance, as we will have the overhead of calling >>> those methods to request the correct interfaces. Although we could do the >>> same as we do in scene and have properties that can access the common >>> interfaces. (eg. SceneObjectGroup.Editor) >>> >>> >>> >>> >>> >>> >>> >>> ------------------------------------------------------------------------ >>> >>> _______________________________________________ >>> Opensim-dev mailing list >>> Opensim-dev@lists.berlios.de >>> https://lists.berlios.de/mailman/listinfo/opensim-dev >>> >> _______________________________________________ >> Opensim-dev mailing list >> Opensim-dev@lists.berlios.de >> https://lists.berlios.de/mailman/listinfo/opensim-dev >> > > _______________________________________________ > Opensim-dev mailing list > Opensim-dev@lists.berlios.de > https://lists.berlios.de/mailman/listinfo/opensim-dev > -- justincc Justin Clark-Casey http://justincc.wordpress.com -- justincc Justin Clark-Casey http://justincc.wordpress.com _______________________________________________ Opensim-dev mailing list Opensim-dev@lists.berlios.de https://lists.berlios.de/mailman/listinfo/opensim-dev