Introduction
Second Life and Open Simulator offer big worlds, but you can't see very far. The draw distance is a few hundred meters at best. So you never get to see the world at full scale.
Most big-world games let you see for miles. Users today expect Second Life to let you do that. This tech note is about how to do it.
The basic concept is much like sim surrounds, where isolated regions have off-region content that can be seen but not visited. Visible but somewhat distant regions can be represented by low-resolution region impostors, objects that look like the real region from a distance.
Sailors should be able to see distant shores when sailing. Flyers should be able to see the ground over which they are flying and airports they are are approaching. Everyone should be able to see mountains and tall buildings in the distance.
What's a region impostor?
A region impostor is an ordinary SL/OS object, with some restrictions. It's a minature of the region, one which, from a distance, looks like the real region.
Technical details
Region impostors must be mesh objects, not prims or sculpts. The mesh levels of detail are intended to be used as follows:
- High - an overflight model of the region, probably created using Open Drone Map from 50 to 100 images from a flyover of the actual region. There is no interior detail. Only what's visible from outside is represented. This should look good at ranges of 100 meters or more. Closer than that, and the viewer will draw the real region. Sharpview always runs with a draw distance of about 120 meters, and the nearest four regions are within draw distance.
- Medium/low - an orthographic view of the region from above projected onto a low-rez elevation map.
- Lowest - the map tile for the region on a flat rectangle of two triangles. This is the default if we lack better data.
Region impostors can't be the full size of the region, due to SL size limitations on prims. So they will generally be created at some convenient miniature size such as 16 x 16 meters. When the Sharpview viewer displays them, they will be scaled up to region size. They can be rezzed in world to create a minature of a region, and to get a close look at them.
For Open Simulator, region impostors need not be square, and should have the same proportions as the region they represent.
Region impostors initially have a mesh, and a classic base color texture, each represented by a UUID. Texture scale, rotation, and repeat are all default values. There is no texture animation. There are currently no materials, PBR or otherwise.. This is the state of a mesh just uploaded to SL servers, before any use of the "Edit" menu in-world.
Region impostors are 3D models lit by the sun and moon. As usual, the current environment applies to everything you can see.
Only mainland and large estates need impostors. For less than five regions, impostors are unnecessary.
Impostors will be assigned an "estate group ID" for visiblity purposes. An estate group is the set of regions you can see and reach from where you are. You can only see impostors in the same estate group. All mainland is one estate group. This handles the Second Life case where two regions are diagonally adjacent but can't see each other, and avatars cannot cross between them. (Open Simulator does allow diagonal corner crossings.)
When is a region impostor displayed?
 |
Impostor layout - Second Life |
The four regions closest to the avatar are displayed normally. Just beyond those regions, an outer ring of ten regions is displayed at High level of detail. Outside that, the next ring of twenty regions is displayed at medium level. Regions further out are displayed at lowest level, like map tiles or flat images. Regions with large mountains can have a lowest LOD with more elevation detail, so distant mountain ranges will be visible. The goal is that flying over Second Life should look like this video.
Impostor tiling is simple for Second Life, where all regions are the same size. Open Simulator has different problems.
 |
OSgrid map - there is no large, connnected mainland which needs multi-region impostors. |
There's no need for mutli-region impostors for Open Simulator. There's no mainland area large enough to require them. Only connected areas with significantly more than fifty regions need impostors.
Possible enhancements
Once glTF is fully supported in Second Life, region impostors can have a PBR emissive texture, which should be used to show the region at night. So, at night, you see impostored regions as they would appear at night. What was lit by the region's own lights will be illuminated.
Where is a region impostor stored?
The mesh and its texture are all standard in-world objects. stored in the world's asset servers. There will be an SQL database, initially not part of the overall SL/OS system, which contains index info about these impostor objects and which regions they impostor. Eventually this may be integrated into Second Life or Open Simulator. Near term, this is a tech demo only visible in Sharpview.
Temporarily, impostor data is stored locally, in a text file in the viewer, in JSON format. The data for one impostor looks like this:
[{
"grid": "aditi",
"region_loc": [1024, 1024 ],
"region_size": [256, 256],
"scale": [16.0, 16.0, 4.5] ,
"impostor_lod" : 0 ,
"estate_id" : 0 ,
"mesh_uuid": "123e4567-e89b-12d3-a456-426614174000",
"elevation_offset": 0.0 ,
"water_height": 20.0 ,
"faces": [
{ "base_texture_uuid": "acde070d-8c4c-4f0d-9d8a-162843c10333",
"emissive_texture_uuid": null
}
]
}
] |
This data has been put together by hand for early testing, but automation will be needed.
- If there are no water areas in the region, water_height can be null.
- emissive_texture_id is not currently used, but will in future show the region as seen at night, lit by its own light.
How is a region impostor created?
For initial test purposes, SL map tiles and elevation maps will be used to create basic impostors. This has been done many times before. There was a nice minature model of all of Heterocera at SLB21.
Manual additions to impostors are possible. Lighthouses would be a good addition, since sailors use them for navigation. They can emit light, but not rotate or change color; these impostors are static.
The stage after that is to generate low-detail 3D models by overflying the world and taking pictures, then feeding the pictures into Open Drone Map. This is similar to the process by which Google Maps are created.
Impostors will be needed in sizes 1x1, 2x2, 4x4, 8x8, 16x16, 32x32, 64x64, and maybe 128x128 to cover the largest group of connected regions, mainland. All other groups of connected regions are so small that nothing bigger than 4x4 should be needed. Larger impostors can be created from smaller impostors by merging the top meshes, doing some mesh reduction, merging the texture images, and adjusting the UVs so that the top surface is from 0 to 1.
Phase 1 impostors - flat map tiles
Blake Sea with impostors. Early test. The region in the foreground is fully rendered. Land in the distance is the SL map projected on the water. |