Install Steam
login
|
language
简体中文 (Simplified Chinese)
繁體中文 (Traditional Chinese)
日本語 (Japanese)
한국어 (Korean)
ไทย (Thai)
Български (Bulgarian)
Čeština (Czech)
Dansk (Danish)
Deutsch (German)
Español - España (Spanish - Spain)
Español - Latinoamérica (Spanish - Latin America)
Ελληνικά (Greek)
Français (French)
Italiano (Italian)
Bahasa Indonesia (Indonesian)
Magyar (Hungarian)
Nederlands (Dutch)
Norsk (Norwegian)
Polski (Polish)
Português (Portuguese - Portugal)
Português - Brasil (Portuguese - Brazil)
Română (Romanian)
Русский (Russian)
Suomi (Finnish)
Svenska (Swedish)
Türkçe (Turkish)
Tiếng Việt (Vietnamese)
Українська (Ukrainian)
Report a translation problem
The idea to ignore different block shapes and make the impostor a big mound of terrain block shapes does sound like a good way to do a cheaper approximation.
Not really, it has just to determine if there are block, or not. If you made an artificial mountain in creative, it also wont appear in the distance. Yet, it isn't a base ... same when you dig a big crater. Distant view, doesn't seem able to change, no matter what you do on the map.
If you look on the map, it draws your base/blocks/builds on there, so this is something that could be done but is probably unimportant atm.
Fun fact: if you destroy a POI down to nothing and then go a distance away, often it will still show the LOD of the full POI and that will disappear when you get near it. Kind of janky but understandable.
now, everytime i move towards that spot, i will see the old prefab until i get close enough.
no big deal, but a little bit annoying.
Similarly, I have a huge tunnel I dug through a mountain. As I approach the opening from the outside, it looks like it's full of rock, and as I get closer the wall of rock jumps down the tunnel a ways and the walls appear up to that new point. This repeats as I travel through the tunnel until the end. That sort of shows just what is happening with POIs related to this discussion.
Basically, the world gen system creates a "low rez from a distance" preview version of the entire map, including all POIs, and defaults to that version until you get close enough that the local chunk gets fully loaded and rendered. Our constructions or world modifications like digging aren't in that original general distance map, so they don't ever show up until the chunk they are on is loaded. Hopefully, at some point in the future during the final optimizing and tweaking, TFP can work out a way to perhaps dynamically adjust that distance render map, but for now we're stuck with it.
I'm not so sure about that. Consider a base made from a POI - the only way for the game to know that is to know that the POI has changed from its original, even if only by a block.
So now, it has to keep track of all the changes being made to the map, in order to know which ones have to be rendered at a distance, and then, at some pre-determined point, rebuild the distant terrain map to account for those changes.
If you thought the old micro-stutter was annoying, just imagine what would happen in game if it had to do that. Alternately, you could have it rebuild the distant terrain map when the game was started, but then people would complain that their load times got massively longer.
Therein lies the rub - using up precious processing time will undoubtedly cause some performance issues until lots of optimizing occurs.
I'd say there are intelligent ways you could maybe sneak in some updates - in single player games, at least. Do some quick local chunk recalculations and updates when a player goes into their menu for inventory or skills, for example. Or in the Escape menu, while they have the game paused. Or update the local chunk render on game exit (my preferred suggestion).
When you get into multiplayer, though, it's a whole other kettle of fish. The server is already doing its best to keep up with the players, would be hard to find a window to re-render the world's low rez snapshot dynamically, without causing lag/stutter or sync issues with clients connected. Maybe when/if there are no players on it could do maintenance re-rendering?
I know building models in realtime can be problematic, but I bet the devs could get creative and figure something out, like go ahead and take the hit the first time you leave a zone that has changed significantly since the last time the model was built, just take a framerate hitch and build it. Or it could be spun off onto a low-priority worker thread, computed in the background using spare cores or cycles. But anything would be better than just using the precomputed stuff that is now just wrong.
By 'base', what I really mean is where the game draws the boundary for making the impostor. There are optimizations the game can do when the size of an impostor is limited to reasonable bounds, as it is for existing POIs. For instance, occlusion: when this blob is entirely off screen, or behind a hill, it doesn't need to be rendered. But that doesn't work efficiently for unusual megastructures players may undertake, or for sparsely modified areas like if you put a street light every 10 blocks along the roads. It's not impossible, but it would need to be a more sophisticated system than what's used currently if it's going to be performant.
The game already does that. If you look at the map previewer for instance, which uses those low LOD models, complex shapes like sandbags are just solid cubes.
What if there was a way to have anything painted to show up in the distance. It would not be the whole poly rendered, just the side or sides. Therefore you could paint your base and have it show up without going through a much processing. Just a thought.
Well, if the user wants to go to that much trouble, I guess. I’m on day 42 and haven’t bothered to paint anything besides some metal sign letters. Also, you wouldn’t save any calculation since back faces aren’t rendered anyway. We know this because if you go into debug ‘ghost’ mode and fly the camera inside a block, you don’t see the sides of the block, nor the sides of a contiguous group of blocks. Painting also doesn’t work for the subtractive case, i.e. if the player razes a building.
Standard game designer disclaimer here: i have never seen the source, an I don't work for the developers...
What you have to keep in mind, is that common sense goes out the window when programming a game engine. What you said makes perfectly good sense... Until you realize that voxel engine design means there are no blocks. None. They're nothing but point data in an array.
The engine then builds a whole mesh of the area out of that data, and changes this mesh when it's told that the pointers have changed.
This means there is no object to have a LOD model to downgrade from.
This is just a single complication out of many.
It should be said that it probably CAN be done, it would just take programmer hours, debugging time, and general testing to find out if it even gives back any real resources in terms of rendering costs.
And that time could be spent finding elusive bugs. Like the base reset one that snuck in.
Keep in mind: Never seen the source, I'm making educated assumptions based on my experience in Unity, programming, and game design..