Rendering artifacts (flickering/z-fighting in scope)

It appears that a lot of people have issues with flickering when using high powered scopes in BF3. The artifacts look like z-fighting issues, probably related to the large viewing distances when using 8x and 12x magnification. Short distances between close models, or models and their decals gives z-fighting and as a result, flickering, see for example

There are lots of discussions about this issue on various internet sites, often mentioning graphics memory limitations, overheating and overclocking issues. I don't buy it though, since it pretty much appears consistently across a wide range of graphics cards and drivers. The only way I can imagine it is memory related, is if the depth buffer can be larger if there is more memory, but I find that hard to believe. I also know the problem exists in past Battlefield titles as well as many other games.

  • Is a known issue with many fps game engines, when using large viewing distances? is there a good technical explanation somewhere? Games that do not have this issue, what are they doing differently?

  • Is there a known way of predicting this problem in BF3 (i.e. a known combination of hardware drivers and settings that will cause the problem)? In other words: can it be fixed?

  • Is there a way to dig deeper, e.g. see the formats of various depth/stencil buffers displayed inside the game?


I feel like this issue is one of those things that are difficult to address because of limitations imposed by game engine design: What you will likely find if you are able to extract the raw z-buffer data is that z-buffer precision is reached at the flickery areas: At the point in the rendering pipeline where z-rejection occurs for these fragments, sufficient information about the geometry intersection simply does not exist.

I recently upgraded my graphics card, and at this point, one of the biggest things standing in the way of total immersion is this z-fighting graphical glitch. The game is simply breathtaking.

Increasing the z-buffer bit-depth or modifying the distance scaling function so that more precision is allocated for these far distances may alleviate the problem, but it won't necessarily solve the issue completely. It seems to me that at the specific zoom level of the high-powered scopes in this game it would require a significant increase in z-buffer depth to provide enough precision. It is probably possible to tune it so that each magnification level uses a different z-buffer scaling function, so as to maximize the quality, but it would probably make the game engine more complex. I think it's possible that this aspect of the game could be improved in a patch, but I don't think the chances are very good for that.

The reason that I think just stepping up to a higher precision z-buffer (disclaimer: I know very little about the actual implementation of the graphics for this game) wouldn't necessarily fix things is because the problem arises when surfaces (of different color) are placed right next to each other or overlapping. This can happen very easily with billboards which are often used to draw foliage. When you reach an angle where two items are the same distance from you, their z-buffer values will be identical. If they also happen to overlap, then a great deal of factors determine which fragments get shown, and this eventually leads to strange looking artifacts.

In your video recording I notice that a lot of the buildings' walls and ceilings seem to flicker, now I haven't seen this issue manifest in such a conspicuous way myself but I'll bet that what's happening is every place where it flickers there are two sets of geometry rendered there which end up with the same z-value: On some frames and in some areas polygon A appears, while the rest of the time polygon B appears. Is the side of the block that is a part of the ceiling actually sticking out of the wall? Or is it just barely underneath? No way to tell. That's what your GPU's rasterizer would tell you. For all we know our map designer set that particular surface to the exact same plane.

The proper way to fix this is to re-work that geometry so that it doesn't end up with overlapping surfaces. If that couldn't be managed, then the flickering could be mitigated by having the surfaces be shaded in the same way (so it doesn't matter which one gets displayed, or both do, or it flickers). You can see how this might be difficult to fix.

I don't know what the precision of the z-buffer (or its equivalent geometry-buffer component) being used is. Simply having more video memory available will not increase this value, but a game might certainly choose to use a lower precision z-buffer if your hardware is short on memory. I notice you say on your video description you are running a GTX 570. That should have at least 1.25GB of VRAM, and it shouldn't be an issue.

What I find interesting in the reports I'm reading throughout the web is that people seem to indicate that certain setups don't exhibit this problem. I'm not sure how this is possible. But some controlled testing with these systems which have correct behavior might be able to provide some clues.


I have upgraded my computer with a new GPU. Before, I did not have this effect but it did come with the new card.

Setting the shadow quality to low - by keeping the rest at the Ultra / highest value - did solve the problem.

PS: I guess the problem is more obvious when doing shadow mapping.