I am not familiar enough with the code to say if it can be done, but I like the 
idea of handling smaller patches of terrain instead of the entire region.

Frank

> On May 8, 2015, at 10:28 PM, Dev Random <[email protected]> wrote:
> 
> OpenSimulator now supports variable-sized regions, some of which can be quite 
> large. The recommended maximum is 8192m x 8192m, which is (4 x 8) x (4 * 8) = 
> 1024 times larger than the “standard” 256m x 256m region. Regions of greatly 
> increased size have exposed some weaknesses in the current Terrain model.  
> Some of the issues are discussed on the Wiki page  
> http://opensimulator.org/wiki/Varregion 
> <http://opensimulator.org/wiki/Varregion> .
> 
> Database communications (in mysql – not sure about other DBs) is one place 
> where the change is very noticeable. Since a region's terrain is stored as a 
> single blob, the “max_allowed_packet” setting must be increased to 
> accommodate the greatly increased blob size for a large VarRegion. This large 
> size also appears to lead to noticeable pauses while the database is updated 
> during terraforming operations.
> 
> 
> Here's what I'm thinking:
> 
> Since logic already exists for working with 16x16 patches, perhaps the 
> terrain can be persisted in the same layout. This might remove the need for 
> extremely large DB packet sizes, and may drastically reduce delays while 
> terraforming.
> 
> Start by adding a new table "Terrain_Patches", as shown below (naming 
> conventions, etc. TBD):
> 
> Terrain_Patches:
> * region_uuid (varchar)
> * x_pos (short)
> * y_pos (short)
> * blob? (16x16 float?)
> 
> Moving the actual elevation data out of the "terrain" table leaves it as 
> basically a header table.
> 
> terrain:
> * RegionUUID (varchar)
> * Revision (int) <-- 28?
> * Heightfield (x_size (short), y_size (short)) <-- no height data here
> 
> When a region is terraformed, the already-existing taint logic can be used to 
> determine which patches need to be persisted. By adding a second taint array 
> ("m_db_taint"...?), and setting an element every time an "m_taint" element is 
> set, there will always be an up-to-date list of patches requiring 
> persistence. No need to re-write an entire region when only a few patches 
> changed. Removing the all-or-nothing requirement for loading terrain can help 
> prevent the immense packet sizes required by large regions.
> 
> I lack the skills to prototype this, so I'm throwing it out to the mailing 
> list for comments. Obviously, more re-work would be required in the code to 
> stitch together the patches, etc...  This email is more about concept than 
> details.
> 
> _______________________________________________
> Opensim-dev mailing list
> [email protected]
> http://opensimulator.org/cgi-bin/mailman/listinfo/opensim-dev

_______________________________________________
Opensim-dev mailing list
[email protected]
http://opensimulator.org/cgi-bin/mailman/listinfo/opensim-dev

Reply via email to