[sldev] Re: Wiki article on culling
Jake Simpson
jake at lindenlab.com
Wed Jul 23 16:19:13 PDT 2008
Mike Monkowski wrote:
> I've extracted some information regarding culling from the SLDev
> mailing list to create a page on the wiki. Unfortunately, I don't
> know the code involved, so I don't know if it is still current. Would
> anyone who knows, please have a look and correct anything I've got
> wrong and add anything you think might be useful.
>
> http://wiki.secondlife.com/wiki/Culling
>
> Thanks,
> Mike
This is a pretty good article there Mike. Very comprehensive.
I have some internal thoughts on our networking layer and will possibly
be doing some work in that area relatively soon (approval pending) so
I'll add some detailing to this page if/when I get to that work.
Your idea of only sending delta's is a good one - it's what Quake uses
in fact. However you can extend that further so that when a client ack's
a delta packet, the simulator then updates it's default state which it
uses as the control state (ie that which it derives the delta packet
from, by comparing this state with the current object state) since it
knows that the client now has a copy of that latest state, since the
delta packet was acked. The client of course, does the same thing
internally. It takes more memory (in order to store older delta'd
packets that it's sent that can then be applied against the current
internal control state) but it cuts down on state transfer quite
considerably.
As you point out, one of the nicest things about the delta approach is
that if a UDP packet is dropped (or comes in out of order, in which case
it's dropped) then the system just naturally keeps going until packets
get through and the client acks them - the deviation in the packets just
gets larger until such time as an ack is received at which point the
control state is reset and the deviations drop in size and count.
There are other network compression tricks that can be employed as well
- dictionary systems whereby common packets (ie packets where the
payload are the same) that get sent are noted as such and a dynamic
dictionary is constructed on the fly so in future only an index into a
dictionary is sent rather than a huge packet.
One thing I would like to see us do is better sort ordering of the
Interest set, so we send down those objects that are closest to you
first. I need to have internal discussions with the relevant engineering
groups inside of Doug's group first though.
Jake
More information about the SLDev
mailing list