I'm sorry if I this is something that's already in the spec. I get the impression that the
GVAR table will dealing mainly with deltas. In the
overview, there's a example of how deltas could be used to make a Q tail pop at a certain weight. As I understand it, it involves moving deltas at close together positions so they quickly snap rather than move smoothly.
I'm going to refer to that effect as delta-popping.
One of the the limitations of MM was not being able to implement structural changes during interpolation. An example of where this might be needed is the asterisk. In heavy weights, a 9 pointed asterisk looks too dense. In an ultra-light, a 5 pointed asterisk looks too light. At certain weights, I want this asterisk to change its structure; sprout more legs. I can imagine how this could be accomplished using deltas but it's kind of nasty. At certain weights (or whatever axis) I want a new shape, not just deltas.
What about the GVAR being able to show/hide shapes? The overview shows how deltas could delta-pop a very plain Q. But maybe my Q has a rather flamboyant tail and I want to completely change the structure when it pops.
If I have a pilcrow (
¶) and I want the ultralight to have an open loop and the heavy to have a filled loop (no counter), I can see how it would be possible to use delta-pops to make that counter suddenly disappear in an inelegant way.
Now imagine I've got a art deco typeface and I want an axis that makes the counters toggle. I could use delta-pops to mangle the counters, tucking them away so they're unseen. I could use delta-pops to make all sorts of decorative variations. Hearts that turn into stars and flowers at certain points across the axis. But wouldn't it be more elegant if I could simply change the visibility of shapes with GVAR? I could have a Q with 2 tails and GVAR would toggle the visibility at specified locations on the axis. I could have 3 types of overlapping asterisk and toggle them in and out. I could make counters disappear, decorative elements change.
I can use Feature Variations to sub a glyph with alternates at certain weights. With the example of the asterisk, I could have alternate glyphs that would swap at certain axis locations. That would be acceptable in the case of the asterisk. But if I wanted changes throughout alphabets, it would require storing a lot glyph variants. Especially, if the changes are merely decorative like engraving, inline, polka dots etc. Why not change the visibility of shapes rather than storing alternate glyphs.
Another use for this would be for reducing detail in textured fonts. Picture a grungy alphabet with dirt speckles. I could set up a detail axis and use GVAR to have those speckles vanish. Deltas could be used to smooth out the outline. You'd end up with the ideal dirt axis. One end of the axis is filthy, the other end clean. Or you could use delta-pops to make each individual chunk of dirt vanish. But it's nasty stuff.
Comments
The Q stuff is implemented using a simple GSUB glyph substitution that is applied under certain condition (e.g. if weight is > foo). How this works is that you draw to different Q masters, one with the long stroke and one with the short, and tell the font to use one or another based on the weight. So you can do any arbitrary transformations you might want for certain ranges.
I was referring to the technique described above the Q example. Search for "sharp transition at the overlap" in the overview.
I hadn't seen that. Is that Feature Variations swapping to an alt $ glyph?
@Mark Simonson
Now it's a GVAR thing too. From what I understand, we'll be able to throw down deltas with reckless abandon anywhere on an axis. If so, it'll will eliminate the need for doing the twist. The only reason I ever twisted was to get some control over the thickness of diagonals in the middle of each axis. But if I can delta nudge points anywhere...no twists required.
All I'm saying about GVAR being able to hide shapes is that it would be handy to have. I can always use Feature Variations to swap as many alternates as I want to. But it'd cool if I didn't have to. In case of ornamented decorative fonts: the ability to use GVAR turn elements on and off rather than adding a ton of alternate glyphs.
So, if we can use Feature Variations to substitute glyphs along an axis, does this eliminate the need for a stylistic alternates feature? You could have a style axis and people could run the slider to see the different variations or choose one of the named locations on the axis. No more hunting for the salt button.
You have correctly identified two techniques that are available for changing the structure of a glyph: use the 'rvna' GSUB feature with a Feature Variations table to substitute a different glyph, or use deltas (specifically, deltas for overlapping pairs of "intermediate" regions)
As @Khaled Hosny noted, the font has a single outline defined for a given glyph, and then delta values are stored then describe how points can be moved to create a different variation of the outline. You can have multiple delta sets for a glyph, and for each delta set, there is an associated position within the variation space at which that delta set has maximal effect. Depending on the user-selected configuration of axis values, the deltas from the different delta sets will apply in varying degrees from zero to the maximal effect. But in every case the number of contour points (or components, in a composite) remain the same.
So, to get a structural change, you can either use Feature Variations to switch to an entirely different glyph, or you can use deltas to move points around. You might have a custom axis to make gradual changes in glyph structure, or you could have two delta sets with slightly overlapping regions of effect within the variation space, and one of those delta sets causing certain points to suddenly "pop" (as you put it) to a significantly different position on the grid, such as ending up hidden within some other stroke.
Are you familiar with Tom Rickner's Buffalo Gal font? This was created years ago as a TrueType GX variation font, and it uses gvar deltas associated with custom axes for a set of different structural changes, including having certain elements disappear. During the ATypI presentation, we gave a demo of Buffalo Gal to show the use of custom axes in that way. If you can find the video of the talk, look for it near the end.
The same could be done with the dollar sign, where the vertical bar is composed of two overlapping bars, with a sudden jump where they don’t overlap anymore.
The GSUB technique might work better with applications supporting arbitrary transitions, but this sudden delta jump might be fine for applications supporting named instances (and may take less space).
I don't think twisting is more efficient than not twisting. Picture a simple sans serif N with a weight axis. With no twists, it's 10 points. With twists, it's 12 points. Assume all points are shifted in the weight change. That's a total of 10 deltas for the non-twisted N, and 12 deltas for the twisted N. To fix the diagonal distortion in the middle weight, I only need to add 2 more deltas. That adds up to the same number of deltas using either method. With the twist method, I need to fiddle with the light and heavy in an attempt to make the middle weight look correct. With the non-twisted N, I can simply adjust the middle delta until it looks correct. Same number of deltas but easier to deal with.
And on top of that, it might be necessary to add the correction twice.
So you end up with much more work, a less maintainable source file and a much bigger file.
Ray, I worry that you are confused by the terminology around deltas in variable fonts, possibly because you are familiar with the notion of using delta instructions in TT hinting to move individual points. In variable fonts, delta sets are used to store glyph shapes as X,Y position deltas for points relative to the single set of stored outlines in the font. So when we're talking about deltas in variable fonts, we're not talking about instructions that are applied to points, as in TT hinting, but about the way in which glyph shapes are stored. An intermediate delta set, between the stored outline and the extremes of one or more axes, can be used to control how a shape interpolates in that region, or to activate a radical change of shape at a particular position in the design space, but I don't think talking about 'delta nudging points' is accurate, and may further confuse.