Quote

Undermeshing refers to the ability to get to where you aren't supposed to by moving outside of the playable space. Almost every game is susceptible to undermeshing in some form. Most speed runs rely on undermeshing, for example. It's effectively impossible to solve completely, at least automatically. The approaches taken to prevent it are usually a tradeoff between how much freedom you want the player to have, how complex your world is, and how much processing time you can afford to spend on physics. Generally, when there's an instance of meshing, it's caused by bad collision setup, improper level geometry (holes), or a problem with the algorithm used to move the character through the world. In some instances, you place kill volumes in locations that you want to guarantee that the player doesn't end up, but that isn’t a global solution.

The collision setup for our objects varies based on their complexity. For very simple objects, we use a basic primitive shape (box, sphere, capsule) that matches the shape of the object. It's very good if you're able to take this approach, because natively the physics system can treat that individual object as water tight - ensuring that another physical object will never end up inside of it, and that you'll always detect it if you're already inside. When constructing a modern game, however, it's very likely that you need to use shapes that are more interesting to look at and interact with than a simple box or sphere - so you use mesh based collision. Mesh collision treats the surface of the mesh as the collideable surface, but it cannot be treated as watertight, and the physics system cannot guarantee that you don't pass through it. You might ask why, then, don't you try to represent that larger object as a bunch of smaller watertight ones? We do that in a small number of instances, but quantity of primitives is also a major concern, so it is not feasible to do this for the entire world. Take the ground under your feet, for example, at any given moment you'd be surrounded by thousands of primitives to approximate the surface of a natural looking ground, and yet it'd be less smooth than the pure mesh shape. In addition, a guarantee to not end up inside of a single body isn’t a guarantee that you won’t end up between them even if they’re tightly clumped, leading to more instances of getting stuck.

When we lay out our levels - we construct them in the way that is interesting and optimize them for efficiency so that we can maximize quality and quantity. What that means is generally the world outside of the space you're meant to play in is empty - we spend our resources on the spaces where players are at. In addition - we reuse assets many, many times - rotating a rock different ways to make it look different before shoving it into the terrain at various depths to mask the reuse and keep it visually pleasing. Technically, the physics for these objects overlaps, and if you get past the surface of one, you'll stand on the next one down. While that sounds like it would help, it’s actually the meat of the problem. Adding more meshes doesn’t help, because once you can get past one, you can get past the next one. That said, there have been many instances where we’ve flagged the collision on an object incorrectly, or left a minute hole that we can and do address through Level Design.

Nearly every game uses custom physics for characters. Much of ours is built on the out of the box simulation that you get from UE4. Fortunately for our players, our game is one where the world is vast and complex, and players have the freedom to build many objects and have many dinos. Unfortunately for us, this pushes all of these algorithms to their breaking point. We've had to augment, rework, and add additional tests in many places that affect the simulation to improve our core player experience. In addition, we've built many gameplay mechanics that don't exist out of the box. Wall climbing, for example, requires a completely new set of physics tests to understand and hug the wall surface. When we set these up, we build them to be as flexible as possible, but it can be difficult to predict how the player base will use something when they get it in their hands. In many cases, this is a good thing - we’re delighted with the creative things that our players do, but sometimes they’re able to abuse mechanics in unintended ways. When we find problems with them, we have to find solutions that won't break the mechanic completely for the many other use cases, sometimes an impossible feat! This is also why we aren’t quick to completely disable a feature - we evaluate how much harm versus good it is doing across the entire experience.

We do use kill volumes at a broad scale - usually high in the air, or far below the surface. Far outside of the playspace, to segment specific areas. The reality, though, is that when someone is meshing, they're usually not out in that empty space around the world, they're running around on the insides of overlapping shapes or physical surfaces that are just below the real surface. In order to implement kill boxes in these places, we'd have to go back to every location in the map and place a kill volume just below the surface that will kill someone that touches it. As with the terrain example above, it would require entirely too many objects to cover the entire world in these accurately. In addition, a major downside to this approach is also the fact that it will detect and kill something that may have a good reason to be below the mesh - on a Basilisk? You just got killed by the kill volumes. Misjudge where the surface is, and a bunch of players are being killed erroneously and losing their stuff.

As with all aspects of making a game, it's all a balancing act. We try to spend our time on the things that are most valuable to as many of our players as possible - which means attacking holes in the world in waves and making algorithm changes when it's become obvious that they're having a large enough negative effect on the experience for our players. The reality is that there is no silver bullet, no automatic solution - so it continues to be a problem that our game (and many others) continue to fight throughout their lifetimes. Recently, we’ve fixed a bunch of holes across all of the maps and did a pass at removing Climbing Pick exploits. Going forward, our best bet is to remain diligent about resolving issues as they arise and improving the experience over time. The good news is that we like solving hard problems - and exploits like these are some of the more interesting ones to try and tackle!