[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