Gameplay
Cubic Chunks: Reduced lag, infinite height, and more [The #1 Suggestion Thread of all time!][Updated! 6/14]
Poll: Which parts of this system do you like?
Ended May 15, 2014
Poll: Which parts of this system do you NOT like?
Ended May 15, 2014
Poll: Do you support this system's implementation overall? (If yes, if
Ended May 15, 2014
Will you share your suspicions with us?
As it will be in the future, it was at the birth of Man
There are only four things certain since Social Progress began.
That the Dog returns to his Vomit and the Sow returns to her Mire,
And the burnt Fool's bandaged finger goes wabbling back to the Fire;
And that after this is accomplished, and the brave new world begins
When all men are paid for existing and no man must pay for his sins,
As surely as Water will wet us, as surely as Fire will burn,
The Gods of the Copybook Headings with terror and slaughter return!
-The Gods Of The Copybook Headings, by Rudyard Kipling.
Perhaps you all should create an RP topic in forum games for this, instead of continuing to post here?
Aren't you glad for the posts in this thread? They help keep it popular.
As it will be in the future, it was at the birth of Man
There are only four things certain since Social Progress began.
That the Dog returns to his Vomit and the Sow returns to her Mire,
And the burnt Fool's bandaged finger goes wabbling back to the Fire;
And that after this is accomplished, and the brave new world begins
When all men are paid for existing and no man must pay for his sins,
As surely as Water will wet us, as surely as Fire will burn,
The Gods of the Copybook Headings with terror and slaughter return!
-The Gods Of The Copybook Headings, by Rudyard Kipling.
As it will be in the future, it was at the birth of Man
There are only four things certain since Social Progress began.
That the Dog returns to his Vomit and the Sow returns to her Mire,
And the burnt Fool's bandaged finger goes wabbling back to the Fire;
And that after this is accomplished, and the brave new world begins
When all men are paid for existing and no man must pay for his sins,
As surely as Water will wet us, as surely as Fire will burn,
The Gods of the Copybook Headings with terror and slaughter return!
-The Gods Of The Copybook Headings, by Rudyard Kipling.
On to 2,000, and then 3,000, and so on.
Well, I think we should attempt to make contact with Mojang once we reach 1,000 supporters. It's an important milestone.
As it will be in the future, it was at the birth of Man
There are only four things certain since Social Progress began.
That the Dog returns to his Vomit and the Sow returns to her Mire,
And the burnt Fool's bandaged finger goes wabbling back to the Fire;
And that after this is accomplished, and the brave new world begins
When all men are paid for existing and no man must pay for his sins,
As surely as Water will wet us, as surely as Fire will burn,
The Gods of the Copybook Headings with terror and slaughter return!
-The Gods Of The Copybook Headings, by Rudyard Kipling.
Seems amazing. When this gets 1000 supporters. Let's tell Mojang. Also, I think we should make like a YouTube video and post it to make more people find out about this amazing idea.
That was perhaps a little harsh. I do understand what OpenGL is; my use of the term was to help convey the concept of "not showing things things that can't be seen" [which is actually known as "hidden surface removal" and uses the Z buffer of primitives and vertices]. I did not, however, know that MC already breaks the world down for rendering, and this fact fortunately makes this half of my suggestion redundant.
Anyway, I am not trying to employ a complex mathematical form of optimization, or anything of the sort. Most optimization is essentially just making specific assumptions in place of performing complex tasks, and this is exactly what I am suggesting.
OPTIMIZING BY ASSUMING STUFF
For this method of optimization, we will use a range of basic conditions. Each condition is easy to determine and allows us to make a range of basic assumptions. For example, if a chunk has all solid blocks on one face, we can assume that the player cannot see through that face of the chunk no matter where they are looking from. Some conditions may be recorded as tags for the corresponding chunk, meaning that the chunk does not have to be loaded before it can determine whether or not it should be.
NOTE: If the player is within a small distance of the chunk, the chunk will be loaded regardless. Also, If there is an active block in the chunk; if the player has planted a sapling, put things in a furnace, dropped an item, or whatever, then that chunk will be loaded. Whether or not a chunk is 'active' should be recorded as a tag for that chunk when the chunk is generated/modified.
A SIMPLE CONDITION
If a face of a chunk is covered with solid blocks then that face is considered 'solid' and the appropriate tag is set to 1. This tag is otherwise 0, or excluded entirely.
We can remove about 3/4 of the blocks from every face of a totally solid 16x16x16 chunk without actually changing the effective 'solidity' of any of the faces, and hence this condition can be made more comprehensive.
A SIMPLE IMPLEMENTATION OF THE SIMPLE CONDITION
From any single direction, you can never see any more than 3 faces of a cube at one time. Therefore, if we determine where the player is relative to the chunk (let's say, above, a little bit behind, and a bit to the right), we can assume which faces the player can actually see. In our example, these are the top face, the back face, and the right face. If the corresponding faces of the adjacent chunks are "solid" then we do not have to load the chunk with the knowledge that the player cannot see it.
Alternatively, we can just check all 6 faces of every single chunk, however determining the visible sides requires only a couple of basic operations and should be faster than performing checks on the other three faces. In contrast, if we check all 6 faces, we can predetermine whether or not we even have to consider the chunk in question.
EXPANDING ON THE SIMPLE IMPLEMENTATION OF THE SIMPLE CONDITION
We can also consider this in reverse. Take a chunk that is bounded on all sides by solid faces. If the player stands in this chunk, they cannot see anything outside of it. Now take a chunk that is bounded by solid faces on the bottom, front and left sides. If the player is standing in this chunk, we assume that the player is unable to see any chunks to the left, in front, or under them. The applications for this principle are plentiful, and should be exceedingly obvious.
I also have some ideas about optimizing the way that the visible region is determined, but I'll let them fester for a few days.
I believe in the Invisible Pink Unicorn, bless her Invisible Pinkness.
Yes, you can have chunks not loaded. This is why, for example, you can spend 300 hours in the nether and come back to find that your furnace has only finished smelting three ingots and that all your crops are still on the first growth stage.
I believe in the Invisible Pink Unicorn, bless her Invisible Pinkness.
It's called dimension, stupid. Overworld and the Nether are two different dimension.
OcD Simple Add-On!
♦♦♦♦♦♦♦♦ I SUPPORT THIS ♦♦♦♦♦♦♦♦
That's a completely different thing. As far as Minecraft is concerned, when you're in a different dimension, you're in a different world entirely. You're just using the same level.dat.
Yes, it is called 'dimension'. It's also called "THE CHUNKS ARE NOT LOADED".
No, it's exactly the same thing. As far as Minecraft is concerned; when you're in a different dimension, it can save a huge amount of RAM and CPU time by not loading all of the chunks from other dimensions. To the game, it's the same as walking far away.
EDIT:
I believe in the Invisible Pink Unicorn, bless her Invisible Pinkness.
Suppose you're mining in a mine below your house. In your house, which is several chunks above you, is a set of furnaces where you're melting cobblestone. It takes 10 seconds to smelt one cobblestone (according to the minecraftwiki), so a whole stack (suppose, just for simplicity's sake, that you smelt a whole stack that starts when the chunk can't be seen anymore because you're down in the mine). 640 seconds (~10 min) later, that is 12,800 ticks, you return to your house from your mine, thus the chunk must be loaded (and rendered) again. Upon loading, the timestamp indicates that 640 seconds have passed, and a part of the code of the furnace now says: 'oh, wait, 640 seconds have passed, burning time is 10 seconds per item, so I need to put 640/10=64 times the recipe I'm currently running (cobble->stone) in my output slot'.
This means that the chunk doesn't need to be loaded or rendered for the entire 640 seconds, you're down in the mine, which does mean a decrease in working load on your computer. The chunks don't need to be loaded because you can't see them, and nothing changes in them (because of the timestamp), so there's no need to have them loaded in your RAM at all.
In fact, if this is done for all chunks within rendering distance, (say 16*16 chunks, using the old linear system), this means that you only need to have 1 (or 9, if you want to be certain and account for boundary effects) chunks in your RAM if you're mining and the only thing you can see is the 3 meters of mineshaft you've mined before you. If you have only those 9 chunks directly around you in memory, that means that there are 247 of the original 256 chunks not loaded, which means that the workload of your computer is only 3.5% of the original workload.
Likewise, using cubic chunks, and keeping 27 chunks around you loaded, using a square loading pattern for simplicity's sake, you only need to load 27 of the 4096 chunks that are within rendering distance, which means only a workload of 0.7% compared to the workload if every chunk is loaded.
It is, in my opinion, silly to load chunks that can't or won't be rendered, provided that there are no active blocks in them (say burning furnaces, growing crops etc etc), for which there can't be found a solution like the timestamps mentioned somewhere in this topic.
This is pretty much what I talked about before. The hard part isn't unloading the chunks but actually determining which chunks should be unloaded. The best I can think of is treating each chunk like an individual block with face that are either opaque or transparent.
For example, if you are standing on the middle of a block, it will not be possible for you to see any of the blocks underneath you no matter which way you look. If you add any block horizontally adjacent to the block you are standing on, you will also not be able to see any blocks below that block. It may be possible to use some rasterizing operations to increase the scope of this principle, but the issue is whether this would actually be worth the extra CPU time.
I believe in the Invisible Pink Unicorn, bless her Invisible Pinkness.
0.7%.
If we could just show that to Mojang there wouldn't be any excuse they could possibly use to not do this.
As it will be in the future, it was at the birth of Man
There are only four things certain since Social Progress began.
That the Dog returns to his Vomit and the Sow returns to her Mire,
And the burnt Fool's bandaged finger goes wabbling back to the Fire;
And that after this is accomplished, and the brave new world begins
When all men are paid for existing and no man must pay for his sins,
As surely as Water will wet us, as surely as Fire will burn,
The Gods of the Copybook Headings with terror and slaughter return!
-The Gods Of The Copybook Headings, by Rudyard Kipling.