Search Unity

Huge Open World Game Resources

Discussion in 'Game Design' started by CarterG81, Dec 18, 2016.

  1. CarterG81

    CarterG81

    Joined:
    Jul 25, 2013
    Posts:
    1,773
    When doing research on this subject, I found resources scattered around everywhere.

    I'd have liked a centralized thread that holds all the resources we could find to help developers solve the inherent problems that come with building large worlds (ex. floating point precision issues in Unity).

    I was also unaware of how awesome UNITE lectures are. On my time in the forums, I haven't seen much enthusiasm for these awesome talks. Not enough, anyway. Lots of videos I now look forward to viewing (and I suggest many here to do too- on all kinds of subjects).

    Here are some of the resources I've come across so far:


    UNITE TALKS
    Multiplayer Methods
    For multiplayer games, some of the above techniques don't quite work or have additional issues involved.​
    • Unite 2013 - GIS Terrain & Unity - MULTIPLAYER Q&A Snippet
      This may not seem like much, being such a brief answer- but when you do your research, it turns out to be one of the few ways to do it efficiently. Unless your Server/Cluster can handle fully loading an entire world & doing all your game's calculations or each CPU on your server cluster handles a different part of the world (sounds expensive).
    • Carter's 2D Y-Stack Method
    ASSETS



    Some Links?



    User Problem Threads


    If you've found any, please post them & I will try to add them to the list. (Or if I'm unavailable, I give permission for a moderator to edit the OP to add them.)
     
    Last edited: Jul 5, 2020
    TonyLi, ToshoDaimos and Martin_H like this.
  2. CarterG81

    CarterG81

    Joined:
    Jul 25, 2013
    Posts:
    1,773
    My game is 2D, with a 3D perspective Camera. So I use the X/Z axis, with absolutely no Y-Axis usage outside of the camera's position.Y
    Although I don't see why you couldn't use some of the Y-Axis in this method.

    Since I do not use the Y-Axis, I figured a very simple way to surpass the floating point limitation (single precision floats ; 16 bit transform.position ; 7 digit limit) was to use the Y-Axis as a sort of layering system.

    Level-Layer = Chunk = Gameplay Area = Terrain = Piece you need to chop up.

    Benefits
    • Extremely simple system with significantly less coding required. Less Hack-y code.
      By doing this method, I don't have to do any extra work on my Camera, World, etc. (More work is required to make this seamless).
    • A single Level-Layer / Chunk can be as large as you can get in Unity (7 digit X/Z transforms)
    • Physics still work great (Note: No Gravity in my game. Theoretically should still be fine. May want to put in a teleporting-layer inbetween each level-layer, to prevent a player from falling through one world and into the next.)
    • Works easily for "Host" (Server is also a Player/Client)
    • Should retain a limited use of the Y-Axis inbetween level-layers
    • Able to load entire world simultaneously (no streaming required if your memory can handle it or your world is only slightly too big; just enable/disable Levels). This means it works in Multiplayer very easily. Simpler iteration of levels if you need to iterate through them to update them.
    • Client requires only 1+ Level-Layer at any one time. This method is for the Server to enable multiple Level-Layers.
    Restrictions
    • 2D Only or Limited use of the Y-Axis
    • Tricky Camera/Rendering to make the entire world seamless (but should be similar to other methods, like in the KSP video)
    • Not Ideal for a lot of scenarios.

    These benefits/restrictions are just a few things I thought up. Take them with a grain of salt.

    An example in Unity. Each 3x3 tile is a separate level/chunk. Red & Blue are both the same thing: a "Level-Layer" or "Chunk".

    potato chips.png

    In my game, these are instances you load into (not seamless).
    However, shouldn't be too much trouble to make seamless. Just follow some of the advice for handling open worlds (KSP camera method perhaps?).
     
    Last edited: Dec 18, 2016
    Martin_H likes this.
  3. BornGodsGame

    BornGodsGame

    Joined:
    Jun 28, 2014
    Posts:
    587
    Yeah, I think developers can work around many of the problems ( except for maybe stuff like flight simulators) just by being more creative with map design and using vertical layers. Just as an example, the entire map of Skyrim could be done in Unity without having floating point issues... I believe I read that it is like 6 km by 5km which means you could almost go double the size of Skyrim.

    There are a lot of little tricks, including not only making a lot of use of the Y-axis and the vertical aspect of your map, but also design your areas to be maze-like so that players can´t go in a straight line very often. Finally design-wise there are just easy things you can do like not having town-portals or fast travel. And if you want to be really sneaky, you can just slow down the characters walking speed. Going from 4 to 3.6 has almost the same effect as making your world feel 10% bigger and it isn´t noticeable. For my game, basically an open-world RPG, I have 4 movement speeds, walking is the default, and then there is a jog and spring. The jog has some negatives associated with it including a slow stamina drain which would effect the character if they enter combat from the jog state, but also if they are jogging they make more noise, which means they would get attacked more often ( which again slows them down). The idea is that players only use job when they are returning to their village, not for exploring new areas... where they would either be walking or stealthing. Sprint is not sustainable and only can be done for a few seconds. So basically the entire time the player is pushing into new territory, they will be walking.

    And finally, make the world interesting. One of the biggest reasons players find games ´small´ is because they can walk in a straight line and see nothing special and then meet the border of the map. This is what Skyrim did so well, you never could go very far without finding something unique and worth investigating. If your players are traveling straight through an area without having anything to see, that is part of your problem.
     
    CarterG81 likes this.
  4. CarterG81

    CarterG81

    Joined:
    Jul 25, 2013
    Posts:
    1,773
    Updated the resource list with user threads.

    I figured it would be good to include threads of people with problems & how they solved their problem. That way if someone has something similar - they can understand or ask questions from others who already solved their problem.
     
    MarkusGod likes this.
  5. hlw

    hlw

    Joined:
    Aug 12, 2017
    Posts:
    250
    Thank you a lot for helping me on my thread. The tips you gave me made my system have better performances, and it became easier for me to control it. I'm not sure if worth, but maybe you could make something like an explained list of the basics you need the most to master when it comes to create something related to open worlds.
    it maybe is a little out of the subject of your thread and it maybe won't be truly helpful to advanced programmers, but beginners will be able to see clearly what they need to learn , or what they missed before searching for advanced solutions.
     
    CarterG81 likes this.
  6. CarterG81

    CarterG81

    Joined:
    Jul 25, 2013
    Posts:
    1,773
    This is a great idea. Do you mind if I ask you what specifics I should cover in the list? I would love to create an explained list of the basics, like a PreReq list. I'd also love to write a tutorial on all this stuff & more. What basics did you find most valuable? Any things other tutorials didnt teach you?
     
    Last edited: Aug 19, 2017
  7. hlw

    hlw

    Joined:
    Aug 12, 2017
    Posts:
    250
    I believe it would be interesting to explain what are the things that take a lot of processor and RAM performances, and what doesn't. This is kinda the basics of Unity, but for those learning by creating project examples like me, we sometimes just didn't learn some particular basics (I started programming, but i sometimes don't even know how are stored the soundtracks, the sprites, etc, and get affraid of working on such kind of assets)
    Basically it should explain what should be loaded when the game starts, and maybe some examples of the best ways to load these, and what shouldn't be loaded, and examples on how to load these at runtime properly. (For example, is there a way to load something big slowly so unity don't lock up?)

    By explaining how those basics work behind the scenes (i don't think you need to explain it very deeply) and why it could become dangerous in an open world game, a beginner should be able to find tutorials explaining what he exactly needs and find out how to build his game.


    Maybe it could explain when , why and how object pooling gets very interesting.

    It could be interesting to explain how to modulate things based on the player location , on what "town" he is heading for, things about colliders and how to use colliders in a big world.
    (For example, someone planning to make the game mix the music based on how many monsters there is near , on what terrain type (like snow, swamps etc) the player went through before he got there, needs to know the best ways to gather data on locations, patterns and collisions.)
    I have some troubles with colliders as their methods have some misleading names or need some complicated workarounds to return what you need from them. I just didn't looked at enough tutos about it and went through it using only visual studio's semi-auto.

    Maybe a few things about the LOD (i'm not even sure of what i'm talking about) and what is nice about it.

    I believe those apply to any game, but i guess open worlds need those to be done correctly, also it is sometimes hard to understand how to apply those knowledges properly to big open maps as the number of possibilites can get very big.
     
    CarterG81 likes this.
  8. CarterG81

    CarterG81

    Joined:
    Jul 25, 2013
    Posts:
    1,773
    Thank you very much for the input. It gives me a lot to consider. I am very interested in starting a tutorial / resource site for these things (and much more) as soon as I have arrived at an "Alpha" stage in my game. That way I can use it as an example, as well as make sure I didn't mess up along the way, before teaching my method. Hopefully that will be soon.
     
    Martin_H likes this.
  9. Martin_H

    Martin_H

    Joined:
    Jul 11, 2015
    Posts:
    4,436
    I stumbled over this and thought it might interest you:
    https://www.lexaloffle.com/bbs/?tid=29798
    It's a proc gen pixelart planet generate. The source might be behind a patreon paywall though, I did't look too closely.
     
    CarterG81 likes this.
  10. CarterG81

    CarterG81

    Joined:
    Jul 25, 2013
    Posts:
    1,773
    Found out about what seems like quite the unknown Multiplayer Asset for Unity

    Uecho, which automatically syncs two separate Unity Editor projects, so you can test live changes in the Unity Editor between the server/client.

    I'm on mobile, so the link is in the video.



    With that said, Jason Weimann's channel is quite awesome. Lots of interesting bits of info about multiplayer games, big projects, and MMO's. The guy seems to have been personal friends for a decade with Brad McQuaid, and been working in the industry a very long time. Really knows his stuff. Very impressed with his videos.
     
    TonyLi likes this.