|View Issue Details [ Jump to Notes ] ||[ Issue History ] [ Print ] |
|ID||Project||Category||View Status||Date Submitted||Last Update|
|0005820||opensim||[REGION] OpenSim Core||public||2011-12-12 11:34||2011-12-18 17:27|
|Assigned To|| |
|Platform||Custom||Operating System||Windows 7||Operating System Version||64bit|
|Product Version||master (dev code)|| |
|Target Version||Fixed in Version|| |
|Summary||0005820: Feature: Show neighboring regions based on avatar's field of view|
|Description||This is more of a feature than a bug. In OpenSim, an avatar is shown the 8 surrounding neighbors of the simulator he's in, once he connects to a region. The Second Life grid uses a better method, which I'm also suggesting for OpenSim. Instead of loading neighbors based on simulator positions, neighbors should be displayed to an avatar once they're "touched" by his field of view.|
One advantage of this method is that the avatar is not given information about a simulator he doesn't see. In OpenSim, if your draw distance is set to 64 and you connect, you are still notified of all 8 neighbors around you, although you can only see 3 at a time from any given point. This decreases performance for no reason, by spamming the viewer during login / teleport with things it doesn't need to know.
Second advantage is allowing avatars with a high draw distance to see further than the closest neighbor. On the Linden grid, users with a draw distance beyond 256 can see two sets of regions, whereas those with a strong PC can use Debug Settings to set their FOV past 512 (eg: 1024) which allows them to see on a range greater than 2 neighbors. Although it's laggy, it's a beautiful sight to see a lot of sims in the distance. Also, the SL viewer allows positioning the camera far from the avatar, which can be used to look inside neighboring sims (by disabling "camera constraints" then control + alt + click-ing inside a neighbor). This can bring your view in a spot where you should be able to see other regions as well.
Since this already works on the Linden grids, I assume the client sends field of view information to the server. If so, I imagine OpenSim just needs to read where each avatar's camera is pointing, and instead of sending neighbors at logon, send them in real time once the person is looking at an edge / corner where a sim is present.
|Additional Information||[UPDATE] I re-tested how this works on the Linden grid with viewer 3.2.4. The current implementation is slightly different than what I described at first. First of all, neighboring regions are loaded based on avatar position + draw distance, not where the avatar is looking. If you login with a draw distance of 64 then turn it up to 256, a neighboring region behind you will appear on the minimap, even if you haven't looked at it. However, only terrains are loaded this way. Primitives (both on local region and neighbor regions) are only loaded once you look at them too. Also, moving the camera away from the avatar does not cause anything to load if it's past the avatar's draw distance. The avatar needs to be close enough in order for a primitive to display, and your camera will see an empty terrain if you move it independently around far sims.|
Now I'm not suggesting to do this exactly like the LL grid. Personally, I find it better that in OpenSim, suddenly looking behind you after logging in does not cause primitives to start loading (although this means more flood since everything is sent at once). But I still support using avatar position + draw distance to limit the range on which primitives (and especially neighbors) are loaded. Perhaps there can be settings in opensim.ini for this? Where 0 means everything is loaded at once, 1 means limited by draw distance, and 2 limited by draw distance + where the field of view is pointing.
|Tags||camera, flood, fov, grid, neighbor, region, sim, spam, view|
|Git Revision or version number||r/17539|
|Run Mode|| Grid (1 Region per Sim) |
|Environment||.NET / Windows32|