In FontLab, your font can have multiple masters: “sub-fonts” or “master styles”, where each glyph has several designs that vary in weight, width, ascender length or in some other way. The way or kind of variation between masters is called a variation axis.
If the masters match (are geometrically compatible), then FontLab can combine them through the process of interpolation and create instances: additional styles that represent “in-between snapshots” or intermediate designs, derived at a chosen location on the variation axes. You can preview instances dynamically at any axis location, and you can predefine some instances by giving them names.
In FontLab, the entire process of working with multiple masters, interpolation and instances is called Variation, and any font or glyph that can produce instances through interpolation is variable.
If your font has multiple variable masters, you can:
- Preview the interpolation process dynamically using the Variations panel. The dynamically interpolated instance is always available in the Layers and Masters panel as the
- Use Font > Generate Instance to interpolate an instance, and insert it as a predefined instance or a master into your font, or create a “static” (single-master, non-variable) font that you can later post-process and export.
- Use File > Export Font As to export all font masters or all predefined instances into a final “static” font format such as OpenType PS (
- Use File > Export Font As to export your entire variable font into a variable font format such as OpenType Variations (
OpenType Variations is the technology you use to make Variable Fonts. As a type designer, you can enable one or more axes of variation, such as weight, width, optical size, the presence of serifs… the possibilities are nearly unlimited. FontLab allows you to have up to the 65,536 axes.
Technically, OpenType Variations are an extension and updating of the 1990s GX Variations technology invented by Apple, and a functional superset of Adobe’s Multiple Master technology. You can read the details in this introduction from John Hudson, and in the OpenType specification.
The variations workflow mostly does not work with color. Specifically, it supports only fonts where glyphs are made from monochrome PostScript or TrueType contours (and some editing tools only work reasonably with PostScript contours, not TrueType contours). Interpolation between color glyphs (made from editable contours) is also possible to some extent. SVG or bitmap glyphs are not yet supported in variations. These are limitations because of what OpenType supports in the output formats.
A typographic property that changes during interpolation is a design axis. You can create as many axes as you wish (up to 64K), each representing the change of a different typographic property, for example, weight, width, optical size, slant, serif size, contrast, ascender length and so on.
To add, edit and remove design axes, use File > Font Info… > Axes.
In FontLab VI, an axis has a name, a FontLab-internal two-letter code. Optionally, it also has a four-letter OpenType variation axis tag used by the Variable OpenType font format.
An axis can also have a “show/hide in the user interface of end-user apps” toggle that will be written into the Variable OpenType fonts (not yet supported in FontLab).
Each axis has its axis coordinate range that goes from from a minimum to a maximum value and has a default position. The axis coordinate range controls the range of the sliders and map in the Variations panel for the given axis (change it to allow for larger extrapolations).
Finally, an axis can also define axis instances.
Example axes would be:
FontLab VI allows you to define masters within the weight and width axes without explicitly declaring them in File > Font Info > Axes. Declare them explicitly to control the axis coordinate range and define axis instances.
At a minimum you need a total of one font master, plus one font master per axis. Each axis must have font two masters that have different coordinates on that axis.
A font master in FontLab is an object that represents a complete font for a given axis location. You can define some font properties for a font master in Font Info: dimensions, some names, stems, zones, font guides and some other parameters and values. A font master also contains its own set of kerning classes and kerning pairs.
In addition, a font master is associated with font master layers in all or some glyphs — or, in other words, any glyph layer that has a name identical to a font master’s name is associated with that font master.
By default, when you add a font master, FontLab will also add associated glyph layers for all glyphs in your font. However, you can add a font master without adding any font master glyph layers. You can remove a font master and choose to also remove the associated glyph layers.
You can rename a font master and the associated glyph layers. But you can also add, remove or rename a glyph layer in all or some glyphs without renaming the font master — then those glyph layers become disassociated from the font master. If you give a glyph layer a name that matches a font master’s name, the glyph layer becomes associated with that font master.
A variable font master also defines the location in all font axes, which allows it to participate in interpolation. A variable font master also needs the associated glyph layers to be variable. A glyph layer is variable only if its contents matches the contents of other variable master glyph layers, that is if the number and order of elements are the same and those elements have the same number of contours and the same number of segments.
A glyph master is a variable glyph layer that contains the design at an axis location where a font master does not exist. Glyph masters can be used to correct interpolation results for particular glyphs, but they do not contain font-wide information such as kerning.
An instance is a “snapshot” of the interpolation process at a chosen location within the design space. FontLab can generate a “static” (single-master) font from an instance.
You can predefine some instances in File > Font Info > Instances. The predefined instances are “named snapshots”.
The particular instances that you choose to name are primary instances. Primary instances can be used in an output variable font, or output as separate, standalone fonts. Each kind of variation in a variable font is an “axis.”
For example, you can design a master with “regular” weight and a master with “black” weight, and derive an instance which has a weight somewhere between the “regular” and the “bold”.
For example, if you design a Variable font with a weight axis, you could have an Extra Light master and an Extra Bold master. Each master has its own set of glyph outlines. There would be hundreds of possible in-between instances. Some of these you could label some specifically as the Light, Regular, Medium, Semibold and Bold weights.
Simply speaking, interpolation between two masters on one axis works a bit like mixing a drink from two ingredients. If you put gin and rum into a glass in equal proportions, then your drink will taste like a 50%–50% combination of gin and rum. If you put much more gin and only very little rum, then your drink will taste very much like gin and only a bit like rum.
If you have two masters, one “Light” (at the “weight” axis location 300) and one “Bold” (at the “weight” axis location 700), and you derive an instance at the axis location 500, then the resulting instance will look like a 50%–50% combination of Light and Bold, because the Light master contributed its design in 50%, and the Bold master contributed its design in 50% (
500 = 0.5 * 300 + 0.5 * 700). Since both masters contributed equal interpolation factors, the instance will be a style that is in-between both masters in equal proportions.
But if you derive an instance at the axis location 340, the Light master will contribute its design at the interpolation factor of 90%, and the Bold master will contribute its design at the interpolation factor of 10% (
340 = 0.9 * 300 + 0.1 * 700), so the result will be much closer to the Light master.
During interpolation, FontLab finds corresponding (matching) points (nodes and handles) in all masters of a glyph, and for each point, it calculates the final position in the instance by taking the interpolation factor the point’s x and y coordinates in all masters. Similarly, it calculates the position of elements, the advance width and the kerning pair values.
The axes combine to form the design space, an abstract, multi-dimensional space, in which every master has a location. A location in the design space is defined in terms of numerical axis coordinates, for each and every axis in the design space. The design space is the range of variability in the variable font.
An example of a design space would be two axes: weight (code
wt) and width (
wd), with four masters:
Thin Narrow, at the location
Thin Wide, at the location
Bold Narrow, at the location
Bold Wide, at the location
With such a design space, you could choose an instance at the location
wt=500,wd=100 which would be then interpolated, and would represent a design with Medium weight and Normal width.
FontLab VI currently only supports master at extrema locations of the design space (there, undefined kerning pairs will have the value 0), and simple intermediate masters (undefined kerning pairs will have the interpolated value).
FontLab VI does not yet support master switching or intermediate masters with ranges.