Quote:I was thinking of you having continuous floods of events (ie- position updates) crossing seamless boundries and traversing your hierarchy (and having to be translated numerous times as it spread to many adjacent areas). But if you can eliminate cases of seeing objects at long Line Of Sight (etc) from a players viewpoint (thus having few cross boundry cases) then the problem pretty much goes away. |
My PORs can specify what event types they can 'pass along'. For example, designing an anteroom where the entrance and exit do not share a common line of sight can be used to curtail boundary traffic. In most cases event migration is handled by parent POR - this prevents looping in migration paths.
Again, this is two parts layout, and on part architecture - the POR mechanism is not designed for very high activity adjacencies - where possible any hierarchy splitting must be done at low activity adjacencies.
Quote: The loading delay problem calls for a preload threshold to pull data into memory ahead of need. This buffer area then becomes its own headache with predicting and prioritizing when data needs to be preloaded across machine boundries (or complex hulls etc.. precalculated ) before the actual transition between zones takes place. |
My libraries maintain two discrete levels of simulation - coarse, and fine.
Coarse simulation abstracts away fine route finding (falling back to predesigned coarse routes (less nodes), large amounts of physics, actual interactions, and is used to simulate world behaviour when a client is not aware of it. A server's entire domain is modelled at this level. (NPC) Entity migration can occur at this level for special circumstances, but the NPC data itself is not required.
Fine simulation is the interactive level, where PORs that contain client entities, and PORs that are potentially relevant to clients, as specified by the relevance graph (and manually definable Potentially Relevant Sets for each POR) are modelled. This is the level where real collision detection and entity movement (fine detail route maps) etc. are handled. Asset management runs on recent use stats, with items used infrequently or a long time ago being unloaded first.
Part of the load process is the conversion of abstract data stored in the coarse simulation (say NPC position-scale along a coarse node map link) to finer detail simulation data (fine node map position) and finally to actual physical position of the entity.
Quote: Default place holder data is handy when the transition happens before the data transfer is completed... |
Actually I use placeholders for a lot more besides - including asset substitution on the Client, if or load of asset is pending on the client, we can define that any sword might use a default sword item.
Using placeholders for any critical event on the server is not a great idea. It's more sensible to use common data - for example every creature has a similar collision hull, altered only by scale, position, orientation, whatever - it's then easier to ensure the server remains authoritative.