Hi, @NeophyteArtist. I’m mainly shooting from the hip on this one, but in reading up on matcaps (how they’re made, how they work, etc.), I thought up a couple of possible causes. I think the most important thing is that you can confirm that it is only effecting matcaps and not rendering with Cycles or Eevee.
Apologies if you know this, but in case you didn’t, matcaps work essentially like a shading LUT (look up table). Each position (pixel) on the matcap hemisphere is associated with a surface normal. When the surfaces of your object need to get shaded in the viewport, instead of some heavy duty shading math to determine the pixel’s color, the renderer grabs the closest-fitting pre-rendered pixel color from the matcap (based on the surface normal), and bam! Shading done.
What that tells me is that shading accuracy using matcaps is likely related to the resolution of the matcap. A lower resolution matcap may introduce shading errors as there are fewer pixels to match surface normals to. There’s a chance that the matcap you are using isn’t high-res enough for what you are asking it to do. You called it “old.” Have you tried any new ones? Maybe if they don’t cause the same issue, your red one is too low-res to use. If that is the case, the good news is that once you press F12 and send that file to the actual renderer, it is going to use actual shading calculations rather than LUT approximations.
A similar, but technically different issue could be an interpolation problem. For matcaps to be so fast, they should probably be performing the least number of calculations per pixel. Ergo, a LUT is super quick (with some considerable limitations). So…there may be zero interpolation going on by the renderer. In the last explanation, I said that the renderer picks the closest matching pixel to the surface normal you need, and bam! Shaded. But in the case of a lower-res matcap, there may not be an exact match, and instead of the closest pixel, the renderer might average the value of the top four nearest pixels. That is 4 lookups compared to one, and an averaging function, so it would be slower and possibly not worth doing. Maybe what I’m saying is that either the matcap rendering code eschews interpolation in the interest of speed, or possibly an interpolation is introducing artifacts as you are further approximating an approximation.
I could be way off over here. That’s how it sounded to me as I was reading about it, but I’m no expert. My recommendation is to try different, newer matcaps, and to make sure these artifacts don’t show when rendering in Cycles or Eevee.
Let us know how it goes!