Suppose I have a 2-axis 4-master variable font, say with wdth and wght axes, so narrow/light, narrow/bold, wide/light, and wide/bold masters. Let’s say master values are at 0/0, 0/100, 100/0, and 100/100.
If I want to add an optical size axis, but want to limit uses of it to narrower ranges of width and weight, what’s the proper setup? I’ll add an opsz value of 48pt to those preexisting masters, then:
Option one: Set those corners of the design space in from the extremes, eg. to 30/20/8pt, 30/80/8pt, 90/20/8pt, and 90/80/8pt. Essentially making not a cube but a trapezoid (or whatever the three-dimensional equivalent is called).
Option two: Generating the same designs as option one, but setting them to the extreme positions to get a proper cube. So what looked like 30/20/8pt is placed at 0/0/8pt, etc. This would mean changing the opsz slider would change the weight/width even though those sliders stay put, I think.
Option three: Design the masters at those extremes even though they’re beyond what I want people to use at small opsz, and find another way to constrain user access to them (so they live in the font but won’t be used). Could axis mapping do this?
Option four: Design the masters at those extremes even though they’re beyond what I want people to use at small opsz, and learn to live with people misusing them.
Comments
The graph of a straightforwardly progressive opsz axis is often something like a sine wave, because one typically wants the axis to have a lot of influence at small sizes and progressively less influence at larger sizes. So it helps if the default instance is where the wave changes direction. In the case you describe, it is really helpful if the default instance is the point at which you would want the opsz axis to start/stop having an effect. I did something like this in a font in which the opsz axis has a lot of impact on glyphs in the text sizes, but then only affects hairline thickness in the larger sizes: two different behaviours in different parts of the design space defined by the location of the default instance.
Since an OT variable font needs a default instance—the stored outline set—, it makes sense to put this in the position where it best enables you to control the design space in the way you intend.
Variable font development tends to be iterative—which is one of the things that makes it difficult to price for clients—because you can’t really know how much work needs to be done in the corners until you have made the axis extrema and tested their interactions.