Advertisement

LOD in modern games

Started by September 13, 2014 05:38 AM
12 comments, last by MJP 10 years, 3 months ago

Hello all, I was just wondering what LOD methods are used in modern games (2013/2014)? Basically I'm asking because of the new consoles being released last year with the more horse power I wonder if developers are using CLOD techniques more often? In addition has there been any significant new techiniques developed recently?

-potential energy is easily made kinetic-

In the general case, hand done LODs of models at three or four distances, maybe plus an impostor billboard of needed. Simple alpha fade between them. Nobody is bothering with continuous LOD or other automated systems, as they have several flaws:

* Expensive on CPU

* Require dynamic GPU buffers

* Pretty much ruin any chance of instancing/batching - this is a huge problem

* The vast majority of methods are not able to cope with tex coords, normals, tangent spaces, and all the other real world stuff verts actually use. This becomes a huge n-dim optimization problem.

* In conjunction with the above, LOD changes create severe popping artifacts due to discontinuities in the various spaces

* Vertex processing isn't the limiting factor in nearly every system

The primary use of LOD right now is to prevent small triangles from being rasterized. Rasterization of tiny (less than 8x8 pixels in particular) triangles is catastrophically slow on modern hardware and negatively impacts overall fragment shading efficiency. There are a few special cases where more sophisticated LOD techniques are useful, notably (and almost exclusively) terrain.

SlimDX | Ventspace Blog | Twitter | Diverse teams make better games. I am currently hiring capable C++ engine developers in Baltimore, MD.
Advertisement

Yeah IME, a fixed number of pre-generated LODs for each mesh/model are produced. Perhaps semi-automatically, but with at least artist's oversight.

It'll be interesting to see if CLOD makes a comeback this generation with some GPU-side implementations, using compute shaders and/or tessellation... But I haven't seen much of that yet (except as above, special cases like heightmaps).


Rasterization of tiny (less than 8x8 pixels in particular) triangles is catastrophically slow on modern hardware and negatively impacts overall fragment shading efficiency.

I thought gpu's rasterized in quads (2x2 pixels) and that was the efficiency threshold? Or has that changed in recent years. Oh and thanks for the quick response.

-potential energy is easily made kinetic-


I thought gpu's rasterized in quads (2x2 pixels) and that was the efficiency threshold? Or has that changed in recent years.
Yeah they do, but nVidia's chips also run computations on 32 items at once, and ATI chips run computations on 64 pixels at once.

8x8 pixels = 16 2x2 quads = 64 work items = full utilization of AMD hardware.

Perhaps semi-automatically, but with at least artist's oversight.

Thanks for that, as it was my next question. For semi-automatically do you know what algorithm's are being used?

Yeah they do, but nVidia's chips also run computations on 32 items at once, and ATI chips run computations on 64 pixels at once.

I thought the gpu merges pixels from different triangles until a warp/wavefront can be scheduled?

Oh and Promit do they really alpha fade between discrete LOD's? Seems rather expensive especially for something like crowd rendering.

Thanks in advance for your help.

-potential energy is easily made kinetic-

Advertisement


I thought the gpu merges pixels from different triangles until a warp/wavefront can be scheduled?
I thought they would do this as well, but apparently there must be some obstacles with the implementation of that approach...

This guy's done the experiments and found quite a big performance cliff when rasterizing less than 8x8 pixels. It's also interesting that the shape of small triangles matters (wide vs tall)!

This: http://t.co/I1hjxx2P0I looks potentially interesting, depending on performance. But otherwise what Promit said is spot on.


In the general case, hand done LODs of models at three or four distances, maybe plus an impostor billboard of needed. Simple alpha fade between them. Nobody is bothering with continuous LOD or other automated systems, as they have several flaws:
* Expensive on CPU
* Require dynamic GPU buffers
* Pretty much ruin any chance of instancing/batching - this is a huge problem
* The vast majority of methods are not able to cope with tex coords, normals, tangent spaces, and all the other real world stuff verts actually use. This becomes a huge n-dim optimization problem.
* In conjunction with the above, LOD changes create severe popping artifacts due to discontinuities in the various spaces
* Vertex processing isn't the limiting factor in nearly every system

The primary use of LOD right now is to prevent small triangles from being rasterized. Rasterization of tiny (less than 8x8 pixels in particular) triangles is catastrophically slow on modern hardware and negatively impacts overall fragment shading efficiency. There are a few special cases where more sophisticated LOD techniques are useful, notably (and almost exclusively) terrain.

Well it's not really true that nobody used continuous LOD systems (I know of a few games that did), but it definitely wasn't popular. In fact I've seen Progressive Meshes mentioned as one of the most frequently-cited but least-used techniques in graphics, which is pretty funny.

In general discrete LOD levels is definitely still the normal. Simplygon is becoming pretty popular as a tool for automatically generating LODs. It's pretty good, although you still generally want artist intervention.

Tessellation used to be frequently mentioned as the solution to all LOD problems, but in reality it's found little use in big-budget games. The Call of Duty series seems to be the one notable exception.

I am wondering. When it says a card supports 1/2/4 primitives per clock..

Does this mean that those primitives must be within the same 8x8 block? Or the exact opposite?

If I'm rendering pixel sized triangles, and 4 of them land in the same 8x8, can it only do one at a time?

Also I'd like it if future GPU's might offer the ability to disable the mandatory 2x2 triangle blocks(used for derivatives), since not all shaders require them, and in particular the stuff I'm working on does not;)

I have a project that supports a variable # of primitives per pixel.

From testing, it does drop significantly as I approach 1/1 ratio, although it is still playable.

Since the GPU screws me with the 2x2 quad thing, for near 1/1 ratio scenes I've found that doing super sampling isn't very expensive ;0

This topic is closed to new replies.

Advertisement