Jump to content

A look at GTA 5 graphics rendering.


Recommended Posts

I've found this very interesting series of article on Reddit: it dissects how GTA 5 renders a scene. I wanted to highlight some differences with 0 A.D.

http://www.adriancourreges.com/blog/2015/11/02/gta-v-graphics-study/

http://www.adriancourreges.com/blog/2015/11/02/gta-v-graphics-study-part-2/

http://www.adriancourreges.com/blog/2015/11/02/gta-v-graphics-study-part-3/

Now obviously GTA 5 uses deferred rendering, which isn't entirely possible for us so far because we support older OpenGL. It doesn't change much, except it makes it much easier to support many lights, something which could be interesting.

In part 1, one thing to notice is the use of LOD, and more importantly the huge amount of instancing: the number of draw calls to render the scene is about 1900. We in 0 A.D. are quite regularly above those numbers on much "simpler" scenes. In part 2, it explains how they actually swapped a hill with models on it for a single model to reduce draw calls.

On the other hand, it seems like GTA has found no better way than us to render the ocean, or indeed even reflections on the swimming pool.

  • Like 2
Link to comment
Share on other sites

But I think, LOD & Good Instancing is most needed at current moment for perfomance.

I think different levels of detail are hard to do (lots of modeling work, not that many 3D artists are active at the moment I believe). And LOD works well when objects are both close (need high detail) and far away (can be low detail), as you might have in a first person view. The top down view of a typical RTS game like 0 A.D. has to have most of the things on-screen at the same level of detail because those are equally distant from the viewpoint. It would only provide a benefit once people zoom in or zoom out quite far.

So I don't know how strongly this game would benefit from LOD changes, although that also depends on the amount of mesh complexity reduction that could be achieved. Keeping the extra meshes in memory (ready to be swapped in and out) also comes with some cost in memory.

Instancing would probably have a larger impact as the average player will have many times the same building on-screen (such as houses, towers and walls), the same goes for the environment (trees are a good example). I'm no expert so I wouldn't be able to guess how much benefit may be obtained and whether it's worth spending development time on that (and drop support for any non-OpenGL 3.1 compatible systems).

  • Like 1
Link to comment
Share on other sites

I think different levels of detail are hard to do (lots of modeling work, not that many 3D artists are active at the moment I believe). And LOD works well when objects are both close (need high detail) and far away (can be low detail), as you might have in a first person view. The top down view of a typical RTS game like 0 A.D. has to have most of the things on-screen at the same level of detail because those are equally distant from the viewpoint. It would only provide a benefit once people zoom in or zoom out quite far.

So I don't know how strongly this game would benefit from LOD changes, although that also depends on the amount of mesh complexity reduction that could be achieved. Keeping the extra meshes in memory (ready to be swapped in and out) also comes with some cost in memory.

Instancing would probably have a larger impact as the average player will have many times the same building on-screen (such as houses, towers and walls), the same goes for the environment (trees are a good example). I'm no expert so I wouldn't be able to guess how much benefit may be obtained and whether it's worth spending development time on that (and drop support for any non-OpenGL 3.1 compatible systems).

About LOD: you can rotate your camera, so you can see objects which are near and far. And with lot of trees it's really slower. And it's not hard work for artists, because we need lower poly than we have now. So most of 3D programs can do this with few click, and some from console.

You don't need to use glDrawInstanced or smth like that to do instancing, there are few techniques to draw copies of one object (not so fast as opengl 3.1, but faster than now).

Link to comment
Share on other sites

We do actually somewhat need gldrawinstanced to improve on what we have now. Also we have very little texture atlasing, in particular for stuffs such as bushes. In general I think the engine should be able to do better on instancing by being clever about things, not by raw openGL techniques.

LOD would be useful in some edge cases, such as when the camera is rotated to look super low. In particular, the cinematic camera could really use it. I think it would be a more useful feature to have higher-res meshes that rarely get used, more than lower-res meshes though.

I think a bigger improvement would be to cull objects that are too small at a distance, but that would take some fine tuning.

  • Like 1
Link to comment
Share on other sites

And it's not hard work for artists, because we need lower poly than we have now. So most of 3D programs can do this with few click, and some from console.

You are right, it's not hard it's painfully slow. We have to tweak the way textures apply, the details we want to keep remove, sometimes we have to edit meshes from five or six files, each of them with their own textures. Then you have to bake stuff, reexport everything, and due to the very low polycount of the meshes there is no real point to do that, apart maybe from the latest buildings that were made.

I agree with wraitii about instancing though trees could really benefit from it.

Link to comment
Share on other sites

At the moment we are limited on the CPU side by the number of objects and not the polygon count of these objects. At least that's true for dedicated graphics cards.

In my OpenGL 4 branch, I'm working on reducing driver overhead with OpenGL 4 functionality such as glMultiDrawElementsIndirect. So far, I've only worked on the aspect of uniforms and don't even do real instancing yet. Still, this has already improved performance quite a bit. I hope and expect to see some more improvements by introducing bindless texture management, which should then allow real instancing.

In my opinion, it doesn't make much sense to work on a LOD system, before we overcome these limitations.

  • Like 4
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...