2

How can I perform seamless rendering of long-distance vistas in a fashion suitable for an open-world game (e.g., where the player is relatively unconstrained in how they traverse the world)?

For the purposes of this question, I'm only concerned with rendering of static objects: terrain and large props, as my game world is relative devoid of dynamic actors outside of the player.

The PS4 remake of Shadow of The Colossus™ illustrates the kind of effect I'm going for:

SS from http://www.businessinsider.com/shadow-of-the-colossus-remake-playstation-4-video-2017-9

  • 1
    Generally we can't answer "how did Game X achieve Y" since often only the developers of that one game know the answer in detail, and might not be permitted to speak about it publicly. But, this site is good at answering "How can I achieve Y in my game?" Can you try editing your question into this form, and include some details about how your game works currently / where specifically you're hitting distance limitations? – DMGregory Feb 06 '18 at 00:56
  • 1
    I've made some attempt to edit the question into something that is actually on-topic here, guessing at some constraints that might be appropriate given the type of game SoC itself is. –  Feb 06 '18 at 02:11

3 Answers3

2

Since I don't know what language you're using, I'm going to answer purely based on what I can tell you about scaling objects/background objects.

If you haven't already started, I'd recommend using Unity's Level of Detail feature.

If you have started and aren't using Unity, I would recommend creating a program that scales your objects, or manually scaling them using a graphic editor and removing some details. You could also implement an object such as fog that would remove some details and prevent your program from trying to render too much at once, as otherwise system restrictions may cause your game to run slowly.

Kromster
  • 10,643
  • 4
  • 53
  • 67
  • Unity's LoD was interesting to play with. Managed to use your idea of scaling with the Vulkan API (manually rendering outside of Unity), although I am still unsure of how to implement that fog myself... Maybe a mask over the viewport that changes some internal state of an actor (C++ object) depending on its distance to the camera, triggering some LoD flag on the render (tessellation?) and/or altogether telling it to use alternate (lowres) textures already stored in the GDDR or the RAM, and maybe also (@ErnieDingo) 'slicing' my geometry (lower poly models stored within same actor?) – Havoc Lamperouge Feb 07 '18 at 15:19
2

There are a few techniques that go into most LOD terrain. More than that, alot of what you see in the distance is more a prop than actual terrain. The same goes with static models.

Alot of the time, the occulusion game engine framework will include considerations into distance as well. Basically most of what you see is a LOD, but things that quite practically are too small to be seen at a distance will obvioulsy be culled (or faded out at distance).

What really is a challenge is to rapidly remove items that are not in the view of the player. Most of the work on the game engine (especially in an open world) is to ensure the minimum draw set needed for the scene. After that, Level of Detail can be applied. The onus is then on the artists to a degree to ensure that the transition in LOD of all objects is smooth (multiple LOD of the model).

As DMGregory said above, if your question is structured slightly differently, say as how a certain look was achieved (which is sort of your thrust of your original post). If your question was, how did they achieve such smoothness of framerate on such an open world? That would be just as pertinent.

ErnieDingo
  • 1,150
  • 8
  • 15
0

Terrain LOD rendering is what you're looking for. It can be done on the GPU by utilizing the tesselation shader to subdivide triangles.

Kyy13
  • 740
  • 3
  • 10