After some time working on a very basic landscape… which is basically just a 3d heightmap, I’ve made a new step by adding the system that will handle everything related to scene details such as vegetation, rocks, buildings etc. It’s a good occasion to talk a bit about both technical and design aspect of these things :)
Very often, when it comes to voxel games, the default solution to display scene details is to merge their mesh with the terrain mesh. It’s indeed a very efficient and flexible solution, since it easily allows things such as unique trees, and does not cost much in terms of performances compared to the terrain alone. But it’s only true as long as you don’t want the the scene details to be too much detailed.
Put two detailed trees on a chunk, and you’ll have two detailed trees in memory. Every time you’ll add a tree, it will be a new tree in memory, too. When having a lot of details, it can quickly get out of hand. Luckily, there are a few alternative techniques to render numerous objects, and one of them is hardware instancing. Rather than just duplicating elements, we keep a single tree/house/whatever mesh representation in memory, and display it at defined positions. There’s still an overhead for each duplicata created – its position – but it’s ridiculous when compared to the cost of duplicating a whole mesh. Hardware instancing has a drawback compared to the previous option, though : a single shared mesh means no unique trees or rocks. Is it a problem in my case ? No. And even if it was, there are some tricky workarounds, anyway (such as generating part of the mesh on the GPU).
My take on scene details is not only that I don’t need uniqueness, but that I don’t want it, nor I want too much of them. I’ll explain : one of the thing that I really want Metaworld’s graphics to allow is for the player to be able to recognize things. To avoid to send too many graphical informations, while still being good looking. Do you remember the 2d tile-based games from the 80-90s ? It’s close to the kind of redundant visual richness that I’m looking for. The tilesets of those games were originally a way to minimize memory usage, but they created a graphical style and – in my opinion – self-explanatory signs, because interactive details could be recognized easily.
If you don’t know what the expression ‘signs and feedbacks’ refers to in game development, it’s basically all the graphical polish used by the game to indicate to the players that an action occured (feedback) and to guide them through possible actions (signs). Examples : when a button is disabled, it’s usually gray. This is a sign (the user can’t use it). When the button is enabled, it’s colored. Another sign (the user can use it). When a mouse cursor is put above an enabled button, and it changes its color, it’s a feedback (the user has put the mouse above the button). If the user clicks it and the button appears pressed, it’s another feedback (the user clicked it).
Another sign example in games : when a player can interact with an object, it’s really common in modern games to have it glowing in some way. Most of the time, this sign is here because the players can’t understand “naturally” by seeing the object that they can interact with it. The question is, why can’t they understand it ? Usually, it’s because there’s too much of everything everywhere, making nothing recognizable until after a long learning curve of what is interactive and what is not. It’s not really a problem as long as there are additional signs, but where tilesets were awesome, it’s that their redundancy implied a short learning curve, leading the players to be naturally curious and interested about anything new or unusual. They tried to interact with it.
I don’t want a mining rock to be all shiny because players can’t differentiate it from a normal rock. I want the players to be able to tell that it’s not the same rock that they know. For new players to wonder “why is this rock different ?”. Curiosity and action. This is the kind of spirit that I’d like to give to Metaworld. Even through something as basic as environmental details.
I’ll conclude with an interesting note : even when some details were not interactive, they are sometimes so weird that people believe that they must be interactive, and thus start to build theories extrapolating how to activate them. Before the advent of Internet, unusual details could even creates the so-called “rumours” and “secrets”. One of the most infamous probably being Pokémon Red/Blue’s truck :