Zos has stated on more than one occasion that adding housing slots is a performance issue but many players will not believe them and some people even claim they are lying for some unknown reason.
I hesitate to even try to explain this because it will get technical and most will not read it. Additionally the people who don’t want to believe there is an issue are unlikely to be swayed by ‘any’ explanation since it is not what they ‘want’ to hear.
I understand the skepticism because games have come so far in the last 20 years they it seems like this kind of issue should be ‘solved’. However, in reality the root cause of this issue has been around for that entire time and no one has ‘solved’ it, they just found ways to work around it and benefited from ‘hardware’ improvements over time. However, the days of hardware doubling in performance every 3 years is long gone so things have been stagnant in this area for about 10 years now.
The ‘Explanation’:
This is going to be a bit of a long and winding road involving math but I will try to keep it is simple as possible.
Lets start by conceptualizing the ‘Game World’ as a ‘Turn Based Board Game’ where each ‘Round' is 1 ‘Frame’ based on the games ‘Fames Per Second’.
Then let’s examine a vary ‘naive’ view of how many object calculations ‘need’ to be performed to track the positions of all objects in a game world for each ‘frame’.
Based on our view of the ‘real’ world to know the positions of every object you must examine how each object in the world moves and how it interacts with every other object in the world because of that movement. That is because all objects are always ‘moving’ due to ‘gravity’ and even if 2 unique objects do not interact at all you need to verify they do not interact.
This leads us to a very bad number of required movement calculations N * (N -1) where N is the total number of objects in the world.
This calculations can be simplified to N squared – N which is what is known as a geometric progression that is very bad in terms of calculation growth.
If N is 5 the number of calculations required is 20
If N is 10 the number of calculations goes to 90
If N is 15 the number of calculations goes to 210
As you can see the number of calculations needed goes up much faster than the total number of object added.
If N is 700 the number of calculations goes to 489,300 which I guarantee not even the most powerful gaming computer could handle.
But games work, so how do they get around this issue?
Well they find ways to ‘cheat’ the math.
So, let’s start ‘cheating’.
We start by realizing that the ‘Game’ world is not a ‘Real’ world so we not bound by real world physics conditions like ‘gravity’.
Most objects in the game will ‘never’ move. So we can restate N as the number of ‘Moving’ objects M plus the number of ‘Collidable’ object C.
Then we can restate that original equation as M * (M + C - 1).
This can be simplified to M squared + M * C – M.
This may look ‘worse’ but M is a much smaller number than N so the number of calculations does not grow as fast as it did before.
That is good, but we still have a geometric progression algorithm which is still bad.
So, lets look at M.
M is now only the moving objects which are basically ‘Players’ P and ‘Other AI Controlled Objects’ A.
So M = P + A
Ok, so now lets ‘cheat’ some more. What if we could say that AI Controlled objects were not part of M but instead were part of C.
What does that mean?
Well, it turns out that if we manage AI movement at the ‘Server’ level and say AI objects always win any collision detection operation then the ‘Client’ machine can treat all AI controlled objects as if they were ‘stationary’ at least during each individual frame of movement.
Think of it this way. Imagine that the game is a ‘Turn Based’ table top game and all NPC’s get to move first in each round. Now when all ‘Players’ move the ‘Board’ is set so they know where all the NPCs are during this round and they are guaranteed not to ‘move’ again until the next round.
So M = P and C now becomes C + A
Ok so what does our formula look like now?
It would be P * (P + C + A -1)
Which can be simplified to P squred + ((C + A) * P) – P.
Again, this looks more complex but again P is an even smaller number than M so the number of calculations grows even slower than the last time. However, P squared still means we have a geometric progression.
Time to cheat again.
Ok so P is now just ‘Players’ right. Well what if we said every ‘Player’ managed their own world movement calculations and ‘Players’ could not ‘Collide’ with one another.
What does that mean?
Well think of it this way. Imaging you are the only ‘real’ player in your world and all other players were ‘ghosts’ you can see but cannot actually touch.
If we do that then P = 1.
So what happens to that equations now?
P squred + (C + A) * P – P becomes 1 squred + (C + A) * 1 – 1
That simplifies to C + A.
OMG the square is gone. We no longer have a geometric progression.
Problem solved!
Zos must be a bunch of liars after all… right?
Sorry, no…
It is great that we now have a linear progression for the ‘number’ of calculation required for each fame of movement. But that is just a count of how many unique ‘collision’ calculation need to be perform at each frame every time a player moves.
Those ‘calculation’ have a cost measured in milliseconds.
So here is the second half of the ‘object count’ problem.
To give you smooth movement in the game you really need to process at least 10 ‘moves’ per second or movement begins to feel jerky and unresponsive to the player.
That means you only have 100 milliseconds to process ‘ALL’ collision operation for each ‘move’ frame.
Imaging that turn based game again but now you have a timer and you have to move in a set time each round or you are penalized. However, before you can move you have to perform a calculation in your head for each object on the board. The more objects the less time you have for each calculation you need to make before you can move.
The time needed to perform all collision calculations is then (C + A) * t.
Now lets also simplify the calculation by saying C + A is just C.
So the calculation is now just C * t.
Lets say each ‘collision’ calculation takes 5 milliseconds (I am pretty sure they take longer than that even today).
Ok how many calculations can you perform in 100 milliseconds if t is 5 milliseconds?
C = 100 / 5 = 20
WTF!
So even if the time required to perform a collision operation is only 5 millisecond you can only process 20 objects for each frame of movement!
How the F can any game possibly function?
Well they use things like BSP trees and Occlusion operations to further reduce the size of C so you don’t perform calculations on ‘All’ objects in the game world but instead only perform them on a small sub set of objects near the player.
What does that mean?
Think of the table top game again. Now you have to move in a set time frame but instead of having to perform a calculation in your head of all objects on the board you just have to perform the calculations for the set of objects that are within say 3 squares of the object you are moving.
I am not going to describe the processes for deciding ‘which’ objects you ‘need’ to perform collision calculations on but know those processes also have a time cost that goes up as the number of total objects go up.
However, no matter what they do, they can’t escape the limit of how many objects that can effectively perform collision calculations on before hitting performance issues and that number is actually pretty small.
So they do everything they can to ‘avoid’ those calculations.
In the ‘Dev’ controlled game world they ensure objects are placed far enough apart that you are basically guaranteed that you will never have ‘too many’ objects close enough to a player that it causes significant performance issues.
However, in a ‘House’ players are placing the objects, which means they can do ‘bad’ things, like building a house out of bottles, that can cause serious issues with performance because they have place way too many small objects close enough to each other that the value of C goes way beyond 20 even after performing all ‘limiting’ operations.
If you still don’t believe this I suggest you try a test I have posted several times already.
NOTE: This test may cause your player to get ‘stuck’ in your house or if you perform the test too close to the entrance cause you to not be able to ‘enter’ your house.
1. ) From a test server acquire a large home capable of the deploying the max furniture count which I believe is 700 items the new ‘Coldharbor’ house would probably be good.
2. ) From the test server acquire 700 items based on the items types described at the beginning of the test notes. (Make sure all lights have been turned on)
3. ) Place all 700 items in a pile somewhere in the center close enough that they are not overlapping and you can see all objects.
4. ) Log out of your house, then log back in and note the ‘load time’
5. ) Now move around the object while trying to keep them all in your view window and note the ‘Frame Per Second’ you are getting. (I believe there are PC addons that will give you slash command to see the FPS)
6. ) Now move so you will collide with the object, jumping on top of them would be good the more objects you can hit at once the better. Again note your Frames Per Second.
NOTE: I have another thread in which I describe ways Zos CAN increase the slot count in some way, but I am not really a fan of the solutions described since they are not ‘fair’ and can lead to other issues customers would like even less than the current slot limits.
https://forums.elderscrollsonline.com/en/discussion/418234/examples-of-how-zos-can-increase-house-furniture-slots#latest