3-axis variable font interpolates differently than static otf instances

I’m working on a 3-axis, double inline font, set up like this:

Each stroke has 3 states. Bringing the total number of masters to 27. There are masters at the 0,1, and 1000 values for each axis.

  1. Full thickness
  2. Minimum visible stroke thickness
  3. Invisible (all the points are collapsed onto a single coordinate)

When I export it as a variable font, everything looks correct, and I’m able to vary the thickness of each stroke. However, when I export static otf’s, I get a different result at the same instance axis values. (Axis values of 0,550,1000)

The same issue is also present in Glyphs.

It’s most likely something I’ve set up incorrectly, but I’ve quadruple checked to make sure contour order, and axis values are correct. It almost appears as though some of the intermediate masters are being ignored. Is it possible this is a bug in Glyphs?

A few other things I’ve noticed.

  • If the values are in between masters, it’s fine. For example (0, 550, 900), looks fine.

  • I’ve tried debugging with a different master at 0, so I don’t think it’s related to all the points being collapsed onto one coordinate value

  • I’ve tried a few different versions of Glyphs, all have the same issue. (bleeding edge, most recent stable, and 2.5.1 (1141))

I’m also attaching file where the issue is present. Note that it only has the H glyph. The masters are named with a naming convention, where three digits representing the axis values. For example m-012, (inner is at 0, middle is at 1, and outer is at 1000).

To narrow it down, using an instance of 0,550,1000. The interpolation should be using masters m-012 and m-022. But it appears to be using m-002 and m-022.

KickerDebug2.zip (90.7 KB)

Thanks for any help!

Thanks for the file. That is an interesting idea. But it should be implement with bracket layers. But that is not supported for all axes, yet. On the other hand, have you tried to skip the collapsing between 0 and 1? Just make the stems zero width? I tested it and it works the same as far as I can see:

KickerDebug GS.zip (53.9 KB)

And I have a look at the Glyphs interpolation algorithm to see if we can improve it. It is confused about the 0, 1, 1000 range.

Thanks for taking a look at this Georg. I really appreciate the help.

The issue with just collapsing everything to a skeleton is that Illustrator also has a bug when rendering this. Hints of the outline still appear:

I ran this issue by some people at Adobe a while ago, but it seems like it’s still there. GitHub - scribbletone/vardebug: Debugging overlapping points in a variable font

Are 3-axis bracket layers possible in Glyphs? I was trying to figure it out from some other forum posts, but couldn’t figure out the syntax.

Also, I don’t think it’s related to the 0,1,1000 range. Here’s a version where the intermediate master is set to 500. Any values above 500 still seem to ignore the intermediate master. KickerDebug-500Mid.zip (89.1 KB)

But in a 2 axis version, still with intermediates, and collapsing points, everything interpolates correctly: KickerDebug-2axis.zip (69.6 KB)

Ilustrator is a mess even when the outlines are not collapsed ;( I just removed your collapsed layers and it can’t display it properly:

And even with your font, if you set two sliders to the same value, you get the artefacts. So you can’t get a font that 100% works in Illustrator anyway.

I need to think more about the multi axis bracket layers.

Yeah, it’s not ideal, but I’ve accepted the fact that if two sliders are set to the same value, those artifacts show up. I’m not sure how to get around it without an unwieldy number of masters or bracket layers.

I’m hoping to at least find a way to make sure each set of outlines can cleanly disappear.

I realize this is probably a weird use case though. I suppose I just need to dive into a command line workflow for this.

For now you can add a Disable Masters custom parameter to all the instances. Add a list of master names that are not needed. That would be 16 entries for each instances.

Thanks for the tip Georg. Disable Masters worked. I only needed to disable one master per instance, the one at the extreme that was being used incorrectly, instead of the intermediate master.

So I guess to clarify, is this a bug in Glyphs’ interpolation, or something wrong with my setup?

This is a bug in Glyphs interpolation. And we are working on it.

1 Like

Cool, thanks Georg!