2
$\begingroup$

Nearest interpolation between 2 texels means to take the texel whose center is nearest to a given coordinate to draw or, in other words, the texel the coordinate is matching.

Linear interpolation between 2 texels means to mix the colors of them using more of the nearest texel and less of the others according to the distance to a certain coordinate.

Nearest interpolation between 2 mipmap levels consist in taking the mipmap whose size fits better the size of the image to draw

But I cannot understand how linear interpolation works with mipmap levels.

$\endgroup$
4
$\begingroup$

It's called trilinear interpolation. You first do a bilinear interpolation of the higher-res texture, then do a bilinear interpolation on the lower-res texture, then interpolate between the 2 results. The weight of the final interpolation is based on where between the 2 textures your Z-coordinate falls. If 0 is fully the low-res texture and 1 is fully the high-res texture, then you can use the standard glsl mix() function to combine the two:

result = (highres texture color * weight) + (lowres texture color * (1.0 - weight));
$\endgroup$
4
  • 1
    $\begingroup$ You are talking about GL_LINEAR_MIPMAP_LINEAR filtering method, but if you use GL_NEAREST_MIPMAP_LINEAR instead then you first do a nearest interpolation of the higher-res and lower-res textures, and then mix the resulting colors giving more preference to the nearest mipmap and less preference to the furthest. Am I correct? $\endgroup$
    – Adrian
    Mar 3 '17 at 0:30
  • 1
    $\begingroup$ Actually, for nearest, you would just pick either the high res or low res texture (which ever is nearest), and then within that texture do a normal 2D nearest-neighbor look-up. $\endgroup$ Mar 3 '17 at 0:51
  • $\begingroup$ For GL_NEAREST_MIPMAP_NEAREST we pick the nearest mipmap and applies nearest filtering to that. Since it renders very differently to simply using GL_NEAREST for texture minification I can only assume that GL_NEAREST lazily picks whichever mipmap is "good enough" (maybe you can provide clarification?). $\endgroup$
    – alexpanter
    Jan 15 at 17:45
  • $\begingroup$ With mipmap interpolation we have 2 parameters: mipmap selection and interpolation. For mipmap selection it's decided by GL_xxx_MIPMAP_selection, and for interpolation it's decided by GL_interpolation_MIPMAP_xxx. So in that sense only GL_LINEAR_MIPMAP_LINEAR is truly a trilinear filtering method. (If I understand corrrectly) $\endgroup$
    – alexpanter
    Jan 15 at 17:48
2
$\begingroup$

You might find the 1983 paper that introduced this**, i.e. Lance Williams' "Pyramidal Parametrics" informative.

You can ignore the scheme, in Figure 1, he used for the layout of the MIP maps as I doubt any hardware, at least in the last 20+ years, used that approach.

** (Actually, Williams *may* have described the technique at an earlier SIGGRAPH (1981) as part of tutorial/course but I've never been able to get hold of a copy)

$\endgroup$
1
  • 1
    $\begingroup$ Fantastic reference. Always fascinating to read original papers which introduced new technologies that we all but take for granted these days. $\endgroup$
    – Dan
    Mar 3 '17 at 22:09

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.