Mapbox-gl-js: raster-resampling has no effect on raster tiles (eg. nearest neighbor is still blurry)

Created on 25 Sep 2018  路  7Comments  路  Source: mapbox/mapbox-gl-js

mapbox-gl-js version: v0.49.0

browser: Chrome 69.0.3497.92 (Windows 64bit)

Steps to Trigger Behavior

  1. Set up a basic map instance with a raster tile layer
  2. Set the raster-resampling paint property of the raster tile layer to nearest
  3. Over-zoom map and notice blurry tiles

Link to Demonstration

http://jsbin.com/nohuromeqa/1/edit?js,output

Expected Behavior

According to the documentation, when setting the raster-resampling paint property to nearest the raster tiles should have sharp pixels when over-zoomed.

Nearest neighbor filtering interpolates pixel values using the nearest original source pixel creating a sharp but pixelated look when overscaled

Also, when changing the raster-resampling paint property to linear the results should appear different.

Actual Behavior

When setting the raster-resampling paint property to nearest the raster tiles have blurry pixels when over-zoomed.

When changing the raster-resampling paint property to linear the results appear the same (blurry).

Screenshots with custom layer (not in demo)

Over-zoomed in QGIS

2018-09-25 08_48_02-_untitled project - qgis

Over-zoomed in Mapbox GL JS with raster-resampling set to nearest

2018-09-25 08_49_18-mbtiles raster test

Over-zoomed in Mapbox GL JS with raster-resampling set to linear

2018-09-25 08_49_51-mbtiles raster test

Screenshots from demo

Original tile

174333

Over-zoomed in Mapbox GL JS with raster-resampling set to nearest

2018-09-25 09_09_35-js bin - collaborative javascript debugging

Over-zoomed in Photoshop (1000% increase in size)

2018-09-25 09_02_27-174333 png 100 rgb_8 _

bug environment-specific needs investigation

Most helpful comment

I did some digging, and from what I can gather, the problematic lines are here:

https://github.com/mapbox/mapbox-gl-js/blob/321a3695a6c068a1cfd58629ed9d8dcb333b8bbd/src/source/raster_tile_source.js#L129-L131

If commented out, everything looks fine on my side.

All 7 comments

Interesting! Might be GPU-dependent? Here's how the example works for me on macOS:

image

Can you also try different browsers?

Ah good question, I hadn't checked other browsers and machines yet.

Here are the results of a few tests:

  • Windows, NVIDIA GeForce GTX 1070

    • Firefox (62.0.2) looks blurry

    • Edge (42.17134.1.0) looks blurry

  • Windows (Surface Book 2), NVIDIA GeForce GTX 1050

    • Chrome (69.0.3497.100) looks blurry

  • MacOS (MacBook Pro Retina, 2012)

    • Chrome (69.0.3497.100) looks pixellated

  • iOS (iPhone 8 Plus)

    • Chrome 69.03497.105 (iOS) looks pixellated

Looks like Windows vs. MacOS / iOS more than GPU. Are you able to replicate it on a Windows machine?

Hmm, I have no ideas why Windows wouldn't like the NEAREST mag filter. Perhaps you could poke around the code and see if there are any clues? https://github.com/mapbox/mapbox-gl-js/blob/master/src/render/draw_raster.js#L48

Me neither, I'll see if I can find a moment to have a look and poke around.

If it helps, the Three.js examples using a nearest mag filter work as expected (pixellated) on Windows: https://threejs.org/examples/webgl_materials_texture_filters.html

image

It's passing in the render tests which run on Linux, and I can't replicate this on my Linux machine either, so certainly it being a Windows specific issue sounds plausible.

I can also confirm this issue. I validated that both MIN & MAG texture filters are set to NEAREST using the WebGL Inspector Chrome Extension. This only happens on Windows, no issues on macOS:

image

Instead of blur, we get rainbowy edges, as we remap grey scale colors of the original tile image.

I did some digging, and from what I can gather, the problematic lines are here:

https://github.com/mapbox/mapbox-gl-js/blob/321a3695a6c068a1cfd58629ed9d8dcb333b8bbd/src/source/raster_tile_source.js#L129-L131

If commented out, everything looks fine on my side.

Was this page helpful?
0 / 5 - 0 ratings