Mapbox-gl-js: Small-radius heatmap flickers when moving the map

Created on 31 Oct 2017  ·  6Comments  ·  Source: mapbox/mapbox-gl-js

Pitching maps with heatmap layers cause "far" kernels to change on every frame (kind of flicker, in a blurry heatmap sort of way).

heatmap-blur

Reproducible on any heatmap, including the examples page.
cc @mourner

bug

All 6 comments

Wow, not sure what's going on there....

@mourner the effect sort of reminds me of something I ran into in fill-extrusion layers in gl-native, where sometimes the depth buffer resolution was too low (https://github.com/mapbox/mapbox-gl-native/pull/8431#issuecomment-296860060), causing jagged edges on the sides of extrusions; we fixed this by setting the near clip plan in the fill-extrusion layer projection matrix to 100 so as not to waste a lot of precision on shapes extremely close to the camera (https://github.com/mapbox/mapbox-gl-native/pull/8431/commits/72278bfe94ce0d19b515bb92e9d0be88eb53aa89). Not sure if this is relevant to what's going on here, but 🤷‍♀️

I don't think this is as much a "further distances" problem as much as a "small radius" problem. Radii above 5 seems to behave well. Radii 3 and under seem to flicker.

Agree with @wysisoft, there is no need to pitch a heatmap to trigger the bug. This GIF is just the official example zoomed out so that heatmap-radius = 2.

heatmap-flicker

Thanks for pointing out what's going on here @pathmapper and @wysisoft

I can confirm that this is reproducible in our debug heatmap page as well, if you lower the heatmap-radius to <= 2. I'm not very familiar with the heatmap code though. @mourner does this new information point to a potential cause? could it be related to texture filtering a la https://github.com/mapbox/mapbox-gl-js/pull/8738?

This is an aliasing issue caused by too low texture resolution in heatmap rendering. Information is lost when the heatmap is rendered to an offscreen texture that has 1/16 size of the viewport. Here's an another example of the bug:
heatmap_aliasing_bug
A quick and dirty fix would be to increase the texture resolution to 1:1, but I think the issue is deeper in the heatmap implementation. Here's a heatmap with 1:1 resolution:
heatmap_aliasing_fix
Related pull request: #8975

Was this page helpful?
0 / 5 - 0 ratings

Related issues

aaronlidman picture aaronlidman  ·  3Comments

yoursweater picture yoursweater  ·  3Comments

foundryspatial-duncan picture foundryspatial-duncan  ·  3Comments

BernhardRode picture BernhardRode  ·  3Comments

rigoneri picture rigoneri  ·  3Comments