07-28-2013, 11:31 PM
Theoretically, yes.
Let me give you some counts: Every tick, each chunk selects up to 50 blocks that receive a "block update", and entities (will) query the chunk for blocks related to their physics simulation. This means that the chunk will need to decompress its data in each tick, that is, 20 times a second. I don't think there's a CPU on this world that could do that.
The only "compression" that could be actually implemented is "sparsing". There are two levels of it, each with its benefits:
A) For each chunk, allocate only data for blocks until the highest non-air block. All the blocks above the limit are know air, so there's no need to keep that in memory. Difficulties: When players / entities / simulators build above this limit, the data needs to be reallocated. Useless for structures that have two layers, one at Y bottom and the other at Y top.
B) Split each chunk into 16 sections vertically, each section 16x16x16 blocks. If the section is full of air, don't allocate the memory for it. Difficulties: Again, when building, sections may need to get allocated; a lot of code in cChunk will have to take this into account.
Let me give you some counts: Every tick, each chunk selects up to 50 blocks that receive a "block update", and entities (will) query the chunk for blocks related to their physics simulation. This means that the chunk will need to decompress its data in each tick, that is, 20 times a second. I don't think there's a CPU on this world that could do that.
The only "compression" that could be actually implemented is "sparsing". There are two levels of it, each with its benefits:
A) For each chunk, allocate only data for blocks until the highest non-air block. All the blocks above the limit are know air, so there's no need to keep that in memory. Difficulties: When players / entities / simulators build above this limit, the data needs to be reallocated. Useless for structures that have two layers, one at Y bottom and the other at Y top.
B) Split each chunk into 16 sections vertically, each section 16x16x16 blocks. If the section is full of air, don't allocate the memory for it. Difficulties: Again, when building, sections may need to get allocated; a lot of code in cChunk will have to take this into account.