If I close my eyes, the World doesn’t disappear (except if I’m a moron game dev)

I’ve crashed my submarine in Subnautica to a wreck that wasn’t there. It simply didn’t load before I was in it. In a previous game a smaller one got stuck inside a wreck (where it couldn’t be at the first place) because the building didn’t load in time. I survived these encounters, but I perma-died in a previous game by glitching through a wall and getting stuck. Another game ended with me being stuck in a base, not dead, but unable to escape.

This isn’t a Subnautica problem. Playerunknown’s Battleground has the infamous bug that players can drive cars through buildings before they load. We are talking about the #1 game which is also a competitive shooter, allowing players cross obstacles without intentional cheating.

I didn’t care of that back then, because my computer is fast enough for PUBG, but Subnautica seems to be too much for it, even on middle settings. But now I gave a thought to it and realized something unbelievably retarded: in most games, the graphics engine is linked to the game engine. I can’t imagine how could anyone think it’s a good idea.

Here is how it should be:

  1. The game engine has a map of terrain and objects
  2. When the player attempts to move forward, the game engine gets this input and checks if there is something in the way or not and allows moving if it’s possible.
  3. Now, the player is in a new place on the map.
  4. If a player presses the button to interact with an object, the game engine verifies if the item is in reach and interactable and performs the interaction (for example picking up loot)
  5. All the above happens in the abstract map of the game
  6. The game engine sends this new location and/or item state to the graphics engine, that renders the picture with the new viewpoint or animates picking up the item.

The point of doing things right is that if the overly complicated and hardware-dependent graphics engine glitches or some of the millions of graphics assets are corrupted (for example one side of a box was given no texture), that could only result in buggy graphics, but not buggy gameplay. Similarly as if your monitor has a dead pixel, you don’t see graphics there, but you can still play the game. Sure, a total black screen ends the gameplay, but one side of a box being transparent and showing some kaleidoscope image won’t.

What’s happening instead – because game devs seem to be morons and slackers – is that the game has an unified engine. If the huge texture of a wall doesn’t load, the wall is not there and the engine allows the player to pass. Or, you can enter the box via the missing side and then fall down into the endless depths below the game world. Or cheating players use some glitch to hit you with a car inside a building.

The problem is further increased by the engine being licensed, so the devs of the game has no right or knowledge to fix it if its broken. If their players pass walls because the wall doesn’t load, all they can do is filing a bug report to the engine devs.

The most famous example of this disaster is Star Citizen, a game that cannot be completed because the CryEngine3 they use (d, they switched to LumberYard but it’s mostly the same) simply can’t support what they want.

The problem wouldn’t exist if there wouldn’t be “game engines”, just “graphics engines”, while the game would be running in some overly simple and abstract engine that is fully controlled by the game devs and simple enough to be not bugged. Let me give an example, a ramp in a grid world:

The black line is what the player see as terrain. The thin red line is where his head (viewpoint) appears to move as he runs up. The grey tiles are not passable by the player, the whites are. The thick red line is where his head really moves. The level designer must decide which tiles are grey and which are white. Sure, he should have a handy 3D editor where he can place a pre-made ramp that not only sets the tiles, but also sets their graphics flags that allow your legs appear to go into the forbidden 1 tile but makes them float mid-tile in 2. But if the graphics doesn’t load, or someone mis-sets the tiles and your head actually moves according the thick red line like you were climbing a staircase, or your body would just levitate over tile 1, that would be a low-priority bug instead of a game-breaking where you can cross the ramp into the bottomless underworld.

Why do they do this? Because it’s faster to publish a game with a unified engine. Bugs be damned, optimization can wait. Then they end up like PUBG where 700K+ cheaters had to be banned because the game system allows obviously wrong things like speedhacking. Or, they end up like Star Citizen, realizing that the engine simply can’t do what they want it to do.

It’s not a fate to do this way. EVE Online has a custom-build system and they can handle 1K player battles without lag. One can decide what’s the game is about and design the engine to do that thing, sacrificing the others. For example PUBG would be fully playable without caves, allowing a 2.5D tile system (where every place has one height and you can’t be below it). Subnautica could use instanced wrecks and bases which are simple solid boxes in the World and when you enter their door, you get a 1-2 s loading screen to prepare their instances. Neither would be game-breaking. Being killed by a car that flies though the walls in a top 0.1% game or getting permadeath for being stuck in a box you clearly shouldn’t get into are.


Author: Gevlon

My blog: https://greedygoblinblog.wordpress.com/

14 thoughts on “If I close my eyes, the World doesn’t disappear (except if I’m a moron game dev)”

  1. Let me school you on 3D graphics technology.

    Problem 1: The game can’t know what the bounding area of an object is until it loads. It CAN’T. The object has goofy physical size, and until the game knows that, it can’t compute a collision.

    Problem 2: Players won’t accept a game where you studder step when the assets haven’t loaded. They also won’t accept a game with arbitrary collision detection… which is what you need to use if the asset hasn’t loaded yet.

    Problem 3: Players won’t accept crappy graphics. Good graphics either require focusing on just the graphics, or going the expensive route and putting the development into the optimizations and testing. You want AAA games? Pay the AAA price.

    Screeps is great! Totally low rent graphics. Even your toaster can run it.


  2. @Smokeman:
    1: the textures of the object aren’t needed to know its boundaries. It could be a a solid color until it loads

    2: I’m sure they would rather accept that not-yet-loaded assets are ugly geometrical shapes than being killed in a competitive game by a player who can pass walls without cheating.

    3: Minecraft begs to differ. EQ1 having more players than Wildstar begs to differ. I think the “graphics is needed” mantra comes from developing clone games that differ only in their graphics, so this is their only unique selling point.

    Liked by 1 person

  3. The best part is, despite having mostly unified graphics and world, the collision boxes still don’t normally follow the actual visual polygons. Got a nice worst of both worlds situation.


  4. @Gevlon:
    And yet, you’re not playing any of those games. You’re playing Subnautica, a game so graphics intense that the default item pop radius is about 10 yards. It set everything on my computer to the mimimum or close to it. Just for fun, let me see what happens if I tweak it… Best I can do is drop the resolution to 800 x 600, which seems to help, but makes it look like crap. And I’m running a work station grade graphics card. An older model, mind you… but still in the game. The graphics are pretty in the default settings? But they DO get in the way of the game’s performance. This is not an engine that should ever be used in a “competitive” game.

    As far as I know, Screeps is totally p2w.

    I was concerned about that at first. It’s subscription based, $6.60 to $8 a month depending on how many months you go. You CAN buy “subscription tokens” for cash and then sell them on the steam market for “credits” (The in game currency) which you can then turn into in game resources like energy and minerals. But that’s fairly impractical. The state of your code is the more important factor once you are in an alliance that can act as your incubation area to get big enough to survive. And you can’t “P2W” that. You can download a code base, but you won’t know how it works or how the game works… and without an intimate knowledge of both, you’re just a “NCP” (Non Coding Player) and not very competitive. The learning curve is brutal, it makes Eve look like Tic Tac Toe.

    Now, do I think Screeps is the best game ever? No. It has all kinds of problems and questionable design decisions. But for every one of those, there is a “Ok, that’s cool and adds serious depth” component. All in all, it works, has no really fatal bugs, and is brutally challenging. It’s for a small target market. A niche game.


  5. @Smokeman: I don’t play Minecraft because it’s not a game but a toy to build.
    I don’t play EQ1 for the same reason I don’t play much better graphics WoW
    Screeps needs intimate programmer knowledge.

    I did play Albion Online which has 1998 graphics and was never bothered by it.

    Oh, and I lost another Seamoth to a non-loading wreck. Luckily I didn’t lose myself, upon reloading, the game thrown me out of the wreck.


  6. What you called a “graphics engine” is just a simple renderer, not the biggest part of graphics engine that itself is just a part of game engine. Those things are interconnected, things on top depend from things below. So you can’t really move gameplay part from one engine to another. For example you have your math library with vectors, matrices and everything. This part is used by entire engine. And your gameplay part is using this library too. So to move your game from one engine to another you should make serious changes in your entire codebase. And that if both engines use same programming language. In best case you can implement “translation layer”, basically implement one engine on top of another. I’ve heard about at least one case when somebody implemented XNA on top of Unity3D because it wasn’t possible to rewrite entire codebase for Unity.

    Some engines have their own problems. Subnautica is written on Unity and this engine have serious scalability problems. It works really well from something small, but to make anything bigger you need to do a lot of things in totally different way. Any decent Unity game is build on top of their own layer on top of Unity (like Albion Online).


  7. You lost another one? Ouch.

    I haven’t even found one of these wrecks. I take it that they’re pretty big, and just pop in front of you like everything else.

    The way to fix that, engine wise, is to have LODed down versions that pop in at farther distances. I know they have a LOD system, I’ve seen it go and there is a system display that shows the status. If you get close and it’s still not loaded at the high resolution LOD, at least you can see it in the way.

    They probably didn’t include that for the same reason there’s no map and despite this being the future with super advanced tech… they have no compasses of any kind. They want you to stagger around blindly, under the guise of “immersion.”

    As such, they probably felt that seeing the wreck off in the distance, which is what the LODed down one would do for you, would make it too easy to find it. Of course, you can just go on the internet and find all the wrecks you want.

    The problem, of course, is that exploration in a game is nothing like the real world. You have no sense of “direction” and unless you can see persistent, far away things like the sun or a mountain… you have no idea where you are in relation to the rest of the world. And even the sun is usually useless for that as it either never moves, or goes so fast as to be useless for navigation.

    So, they either did this intentionally to make the game harder (Which I doubt, as the LOD could have popped in at a reasonable distance.) or they just didn’t spend the dev time on that. Hence… AAA graphics without paying the AAA price.

    What PROBABLY happened is during development, they used the most god-awesome computers available, just like online game devs connect directly to the server when developing. As such, there was no problem with the wrecks. No matter how fast you went towards it, it popped in before you got to it, just like online developers act like latency never happened before once the game goes live and people suddenly have game breaking levels of it, they didn’t know of the problem until it was too late to fix.

    Had they simply focused on the game, instead of the graphics, they would have been able to easily up the visibility range for far objects (With LOD) as soon as it became a problem. Oops.

    The problem, and this frustrates me immensely, is we want good graphics because it exists. But we aren’t willing to pay the fee to do it right. (Devs or players.) It’s like medical care in Western societies, sure, we have to technology to do a lot, but it’s really expensive. There has to be a point where people actually take responsibility for paying the fee themselves. But they won’t, because we’re the human race, and are largely self centered.


  8. @Smokeman: they could have placed invisible walls around the terrain that locks out vehicles (swimmer can’t go that fast to not load). This couldn’t be seen from afar (as invisible). So you crash into the invisible wall before you drive into the yet-invisible wreck.


  9. Is this a problem with LOD or actual draw distance? Most maps are precompiled, meaning that most objects should be rendered in real time based on the draw distance settings. WoW had this same kind of problem back in the day when 310% mounts were first enabled, but this problem was one associated with how fast the net code translated the locations of spawnable items such as gathering nodes. You could literally fly right past a mining node and have to turn around and go back and get it because the video system was getting the information “late” compared to the speed and direction of the flying mount. But I don’t see how this should be an issue in a single player game where the maps and map entities are loaded at runtime.


  10. @Smokeman: they could have placed invisible walls…

    They could have done a lot of things. Now that I’ve come across a pretty big wreck, I see what they did do, they LODed it down and displayed it at a distance. I had no problem seeing it from a mile away.

    The problem now is “Why didn’t your computer display it?” And that’s a problem for YOU, not the intended customers of the product. Sure, it’s possible that a considerable number of people that otherwise would be customers also have this problem… which would be bad… That’s a “Wanted AAA without paying the AAA cost” on the Dev side.


  11. People with far more superior math and theoretical IT brains solved a ton … usually their work is buried in engine code with heavy licensing. If you build your own you will have to reinvent or adapt from case to case. If a lot is going on … usually it isn’t as simple and coockiecutter.

    As far as gamesoftware is concerned: as long as you can get away with it and it still compiles without to much abuse potential … it’s ok … ship it.
    [..]you don’t have to use the actual models for collision detection. You can make invisible meshes -with lower poly counts and simplified geomtery if compared to the actual models- to serve as bounding meshes and use their polygons on the per-triangle collisions.

    path of exile desync was bad for a long time. after nearly 2 years they finally addressed it and implemented https://pathofexile.gamepedia.com/Networking_mode


  12. An interesting thought, but would require serious rethinking by gaming programers.

    By the way, the Derek Smart site you linked has a Trojan.


  13. In game developers’ terminology, the whole post could be summarized as “levels’ physical geometry must be separated from levels’ visual geometry”. It’s common knowledge for any professional game developer. It’s actually implemented in many games (almost sure about WoW, totally sure about Guild Wars 2). Why not in all games? Well, indeed because someone is non-professional or plain stupid, either a lead programmer who’s unable to implement proper architecture, or a manager who forces the team to use wrong technology.

    There’s another similar problem, yet way less noticeable. Virtually every single game developer processes user input and renders game graphics in the very same thread. This means that if your GPU is only able to display 20 frames per second, you will have input lag about ~50ms (1/20 of a second), making you unable to competitively participate in any arcade-like action, even if you know the “rhythm” by heart and don’t really need to see the exact picture. E.g, you already see where the enemy moves, you predict where it will be in the next 100 ms, you shoot, but the game forces you to shoot 50 ms later, making you miss. It is totally possible to process user input more often than you display picture on the screen, but no one cares about it. Very disappointing.

    Back on topic.

    1) Many “AAA games” (quotes are intended) are made by not AAA teams.

    2) Some of the games are even not actually AAA – PUBG was initially someone’s pet project. Even though it’s a big company now (as far as I understand), it’s not simple to swiftly replace the crappy internals with proper ones, see the comment above regarding Path of Exile’s networking mode. It’s the same: Path of Exile was initially made by a team of enthusiasts who just didn’t have access to proper technology, so they needed a lot of time to reinvent it first, then integrate in their game.

    3) Almost all of the popular game engines are crap. CryEngine, Unreal Engine, Unity, whatever. Every single proper game uses their own game engine. Long story behind that, telling it would mean overusing the purpose of the blog’s comment section. But basically: see a “AAA project” using some hyped game engine? — you can be 99% sure it won’t have AAA quality.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s