Hi,
-- messages protocol
As i told in last meeting, what i said is that some information for
var regions is only send using the http region capability 'Event', nad
not the respective LLUDP message.
Several of the "event" messages are direct replacements of
respective LLUDP messages So that some viewers decode both into same
internal message and use same processing code.
* So the messages listed below did got the listed additional
fields, with Region size information, except EstablishAgentCommunication
that no longer has such fields, becasue where not needed, and so ignored
by viewers
-- region sizes
http://opensimulator.org/wiki/Varregion Restrictions is not obsolete on
that:
* The dimensions must be a multiple of 256 and less than or equal to 4096.
* The dimensions must be equal so regions are square
* One region can only have one adjacent region per side, excluding
corners or viewers may crash. (so at most 4 regions touching at corners
plus other 4, one touching each side)
the multiple of 256m is to simplify placement on the map grid that is a
256m grid.
the other restrictions are for compatibility with current viewers.
Opensim could possible handle non square regions, but we keep the
restriction for now
* Adjacent regions must be the same size unless they are all version 0.9
or above.
This is because lack of large region support on older regions.
-- Terrain patchs
terrain is sent blocks of patchs of 16 x 16 terrain heights, as sl
just larger regions have more of those
The protocol is as aurora, uses the same ll messages but with few changes
the layer type on global header is one this
public enum LayerType : byte
{
Land = 0x4C, // 'L'
LandExtended = 0x4D, // 'M'
Water = 0x57, // 'W'
WaterExtended = 0x58, // 'X'
Wind = 0x37, // '7'
WindExtended = 0x39, // '9'
Cloud = 0x38, // '8'
CloudExtended = 0x3A // ':'
}
where extended means regions larger than 256m
Water* where never supported
Wind is only send in 256m total size. Larger regions will have lower
resolution. --> obsolete on many viewers
Cloud was only send in 256m total size. Larger regions had lower
resolution. --> removed from most viewers and opensim.
then each patch is identified be a patchID encoded as :
header.PatchIDs = largeRegion ? (patchX << 16) | (patchY &
0xFFFF) : (patchX << 5) | (patchY & 0x1F);
where largeRegion is true for regions larger than 256m
note that terrain patchs are 16x16m size not 4x4. 4x4 is land parcels
minimal size.
-- region Handle math
SL uses region Handle as a region identifier, it built from the region
reference corner that is left lower corner on map.
ulong handle = X & 0xffffff00; // make sure it matches grid
coord points.
handle <<= 32; // to higher half
handle |= (Y & 0xffffff00);
with X and Y the global coords (in meters ) of that corner
Because historic reasons, opensim must always look for a region that
contains such a point
so only restriction is mostly that any pair (handle, offset) of a
message do point to the correct point.
if offset is the localoffset as defined for LSL, ie relative to the
reference corner, so handle must be made from that
but in several messages it can be relative to the nearest lower left
grid point.
Ubit
On 14-May-23 05:54, John Nagle wrote:
I'm working on a new viewer. It's connecting to Second Life, and to
non-varregion Open Simulator regions. Varregions don't work yet.
I need more info on them.
## Simulator to client protocol for connecting to regions
The Open Simulator wiki says, at
http://opensimulator.org/wiki/Varregion
"The implementation uses the Aurora large region protocol extensions so
the existing Firestorm and Singularity Aurora support will now work for
OpenSimulator."
This references
http://opensimulator.org/wiki/Varregion/Protocol
which says:
Simulator to Client Protocol
EnableSimulator event message: add integers 'RegionSizeX' and
'RegionSizeY'
CrossRegion event message: add integers 'RegionSizeX' and
'RegionSizeY' to 'RegionData' section.
TeleportFinish event message: add integers 'RegionSizeX' and
'RegionSizeY' to 'Info' section.
EstablishAgentCommunication event message: add integers
'region-size-x' and 'region-size-y'.
This is, apparently, obsolete, according to Ubit. Although there is
still code for those LLUDP messages in Firestorm. Does anything still
use those now-blacklisted UDP messages? Ubit has said that region size
info is now passed via an HTTP capability. But which capability, and in
what format?
Does anybody still use that old Aurora format?
The obsolete Varregion article also says that regions are limited to
multiples of 256x256 and that sizes cannot be mixed for regions that
touch. Are those obsolete restrictions, or should mixed-size regions
be handled? If so, how does a sim find all its neighbors?
Are non-square regions now supported?
(An argument for mixed-size regions in a grid is that you can have large
regions of mostly empty space as large regions, with smaller regions
for heavily populated areas. I'm willing to support that if the protocol
is documented.)
## Terrain patches
The wiki says " Implementation Discussion (Obsolete)", and
that, as of the obsolete version, terrain was sent the Linden Lab way,
as patches with discrite cosine transform compression. The discussion
on the wiki suggests this be replaced with generalized meshes. Was that
ever supported? I would guess not, but would like to be sure before
I implement.
For larger regions, do the terrain squares get bigger than LL's 4x4
meter size? Or are there just more 4x4 terrain squares?
John Nagle
Animats
_______________________________________________
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