The normal software development buzz word would be "velocity", but CIG tends to make up their own that aren't found in normal software dev jargon.
'Velocity' would imply that they were actually moving forwards...
The normal software development buzz word would be "velocity", but CIG tends to make up their own that aren't found in normal software dev jargon.
Pretty much… time to effort post.
Level of Detail (LoD):
The method of using different art assets depending on the distance between the viewer and the object they're looking at. Be it sprites or 3D models or textures, lower-detailed ones are used at larger distances because any more detail will just be squished together to a size smaller than a pixel, and be lost. This method has been around for the last 30 years.
Serialised variables:
Serialisation is the method of turning a complex data structure into a much more simplified series of data points. Instead of dumping an entire block of memory onto the client, you compact it into something much mor terse and relevant.
You may have a ship (partially) stored in memory as:
0000AB12▢Ugly Ducking▢▢▢▢▢▢▢▢▢▢▢▢▢▢▢▢▢▢▢▢006E▢
0000000000003039▢000000000000D431▢0000000000002F59▢
3CE4186D399E326B▢308D6E044A0A2E92▢009BE179CA492B01▢ etc etc etc.
…where the different parts are things like ship ID, name, type, x/y/z coordinates, memory coordinates for fitted equipment and so on.
That's a whole bunch of ugly junk to send, and those last bits won't even be accurate because they depend on how the equipment is stored in the server's RAM — the client will be completely differently set up. You have to turn it into something that's not just light-weight enough for transmission, but also actually useful for the client. So you “serialise” it — turn it into a data series that the client can use — along the lines of:
43794,Ugly Duckling,110,12345,54321,1212, … [and then some serialisation of the different equipment]
The client knows which parts are which, and stores them into memory in a way that's suitable to it, and life goes on.
This is simply a different way of saying that the way data is stored internally is not how it is (or should be) transmitted — it's an idea that is as old as computers, and I'd be surprised if this was news even to Ada Lovelace.
Incidentally, formats like XML or JSON, that you may have heard of in relation to this, are serialisations of variables — they let you express complex objects in a very structured way. The problem is that their focus is on being easy to read for humans and on being interoperable between different software, not on being efficient. So for a controlled and fast-paced environment, you really want something else. Hence why Cryengine's internal XML-based structures make for a very poor basis for syncing objects over a network, and why you had this guffaw a few years back where each ship in SC required megabytes worth of data to be sent to the client — they were dumping the entire inefficient XML structure on the poor users.
Serialised variable culling:
That's all nice and well, but do you really need all that data to be sent, even in a serialised format? After all, the equipment won't really change that often, and even positions may be static. So to reduce traffic even further, you devise a way to inform the client what you're actually sending and what it should just retain based on old data. This may entail either skipping entire variable series, or skipping parts of a series. Either way, you can now use different update intervals for different variables, and the trick is more in figuring out what needs to be processed when — the rest is “culled”, that is, deemed not relevant for now and thus not processed.
Where, before, you might send a compact data structure of the format Ship ID, name, X, Y, Z, equipment data, you can now just send something along the lines of
ID=43794,X=12355
…because all that happened between the old update and the new is that our Ugly Ducking ship changed its x-position, and we detected that and skipped all other variable processing and transmission.
Again, a thoroughly ancient technique, but since the whole detection of what needs to be updated creates a bit of processing overhead, it may in some cases be easier and faster to not do it at all. It's a balancing question of, does the lowered transmission and (potentially) reduced processing rate warrant that extra book-keeping overhead?
Bind culling:
Even with that reduced and simplified traffic, the question remains: do we actually need to send anything at all to the client? For the vast majority of stuff going on in a space game, the answer is a resounding “no”. They're too far away to have any impact, or they're just in the wrong location, or of the wrong type. A ship that's half a parsec away is not relevant to you; a character that sits inside a different station than yours isn't relevant to you; the colour of Miles Eckhart's third jacket isn't relevant to you (because while he's close-by, he's a walking-around-mode character and you're current piloting a ship).
So you decide that there needs to be no connection between some object the server knows about, and the client. You don't “bind” that object — i.e. you don't make it a part of the list of things you need to update the client on — and as objects move in and out of relevance, you constantly check and cull that list of objects and in many cases don't even get to the step where you have to bother with serialisation and culling of object variables.
This is a concept that is, in gaming at least, 20+ years old. Any game that offers multiplayer and that supports some kind of division of the world into zones does this to some extent. Well… most of them. Cryengine is (in)famous for having particularly non-granular culling methods — all clients get the same updates on all the same objects, and screw their individual preferences…
I think you are describing these, at least the ones I've bothered to try and figure out what CIG means, incorrectly in terms of the context of Star Citizen.
The ones I've tried to figure out what CIG means is for Serialized Variables, Serialized Variable Culling, and Network Bind Culling.
I love these little write-ups.
'Velocity' would imply that they were actually moving forwards...
Maybe we should hire CIG some housechickens and they can get rid of the bugs?
Ooh take it further - paint some bugs on keyboards and get them coding - a million chickens can probably fix their netcode quicker by accident than the progress they're making by themselves
I love these little write-ups.
Perhaps because for going on close to 2 years we were hearing how 3.0 was going to be the Jesus patch. When 3.0 didn't add much and performance tanked... well, no surprise that people are not happy.
There was a GIF floating about years ago comparing the SC and ED galaxies.
It was a wondrous thing to behold
The saddest part is that SC doesn't have a galaxy, it doesn't even have one complete star system.
Thank you. I appreciate the effort you put into explaining.
Yup, that's another source of inspiration, as (presumably) is Frank Herbert's Dune.
'Velocity' would imply that they were actually moving forwards...
The normal software development buzz word would be "velocity", but CIG tends to make up their own that aren't found in normal software dev jargon.
Velocity doesn't imply forward, just movement
SomethingJones said:In case anybody isn't taking the time to actually comprehend what Erin is talking about regarding the networking and server meshing, what he has outlined is a server per area, with a server hosting a room or an area or a portion of space. These will be instanced and 'walled off' (Erin's example about the walkway) so areas will be separated by a hard transition, like a doorway for example.
The instances will not be talking to each other despite the fantasies of backers, their server mesh is a bunch of hard instanced CryEngine maps and servers will spool up, load the exe, handshake and transfer data when you move from one to the next.
That's what Erin has just explained, that's your networking, that's what they are saying is targeted for next year. That's your MMO, hard server instances separated by 'walkways'.
SomethingJones said:To be fair to the guy asking the questions - these were good questions and the first sign I've seen of of a SC content creator holding CIG's feet to the fire a bit. I appreciate the transcripts are a riot, but you can in fact grasp what they're trying to do.
Erin's long pause when asked about a single shard with 1,000 players - well it depends what you mean by 'single shard', CIG have just moved the goalposts for 'server mesh' and finally admitted that areas will be instanced right down to an individual room in which they reckon they can push the player count to 100. Well in theory you can push the player count to whatever you want, that doesn't mean that it's going to remain playable or stable.
Now those instances can't talk to each other (except in a slow transactional way) because they are each an instance of a headless server exe on a server, they are each protected from each other by the OS. So when room A and room B are in separate exes, you can't see what's in the other room even if there's a window right there.
Chris's fantasy was that you could share player data in realtime between the instances, and in fact he went as far to say that you could translate bullets from one to the other. This is what he sold as the genesis of his Server Mesh idea.
Now Chris will tell you that's all still on the table, that's all long term stuff, but there are hard physical network limits that are so fundamental and well known that guys who work with this stuff know the numbers and the formulae off the top of their heads. Asp Explorer, the network guru on the FDev forum jokes about CIG needing to get the fibre reaching the rack of every Star Citizen client.
CIG's network guy in Manchester is talking about ping times and finding central geographical locations for servers to reduce latencies, Chris Roberts is talking about server instances communicating with each other and THEN updating hundreds of clients with updates on each of the other hundreds of clients at 30hz in CryEngine, and a network bloke in a thread at the end of the Frontier forum is wiresharking the client and laughing his off at all of it.
Erin's answer to the networking questions is a dose of reality that will be impossible to grasp for pretty much all backers because it's embedded within a word salad and requires at least some level of actual working experience in the field.
The follow up question to the 'walkway' transition between instances would naturally be one of latency and of 'seeing' beyond the instance, but that would require anyone who is supportive of this project to have the slightest clue about technology.
Erin is relying on the fast babbling of his words and the ignorance of his audience to keep them on board for another 6 months, he knows exactly what he's doing, make no mistake about that.
Hav said:Imma gonna call them 'loading screens'.
…and also a quick comment on “walkways”Hav said:Imma gonna call them 'loading screens'.![]()
Serialized Variables
In normal software development, serializing a variable is such a trivial thing, it was odd to see such a big deal being made of it in Star Citizen. In Star Citizen, it is referring to an internal framework they have developed to intelligently handle the serialization and communication of the object between the server and client. The process is abstracted out, so a normal game programmer doesn't have to worry about how an object gets serialized and sent over the network. Their Serialized Variable frameworks handles things like only sending values that have change etc.
Movement and direction.Velocity doesn't imply forward, just movement
Movement and direction.
Movement without direction is implied by speed.![]()
Yes.would we still classify that as velocity or just as hilariously cringe-worthy?![]()