Make Semi Bold and Bold fonts

currently I made regular fonts on fontlab8. How do I make the same fonts available in semi Bold and bold options?

Comments

  • You can design more wheights as seperate fonts or design the Bold version to be variable (new master, matching outlines with your Regular), then interpolate the SemiBold. It seems you need at least two masters to inter- or extrapolate (see Tural's post). 

  • Yves Michel
    Yves Michel Posts: 185
    For a simple demonstration, I'll start from a lonely Regular master (weight: 400) and add an Extra Bold one (weight:800).

    I have only have one master, so
    • I create a new master:
    1. I go into the "File > Font info" dialog
    2. I create a new master by using the + sign (on the left, under my Regular master) > "Duplicate Master, copy glyph layers"
    3. I change the name of my new master to "Extra Bold"
    4. I Change the "Weight class" of the new master from the original "Regular/400" to "Extra Bold/800)
    5. I click on "Build Names"
    6. I change the "Master name" to "Extra Bold"
    7. I click "OK" to close the "Font info" dialog
    • I change the weight of my new master:
    1. I open my uppercase "I" (stem: ±100) for trial
    2. I use "Actions > Adjust > Change weight > Simple" with a value of 25
    3. I click "OK"
    4. The result is an "I" with a stem of ± 200 (acceptable result for me)
    5. I undo this Action on "I" and then apply it on all my glyphs.
    6. Rem.: This doesn't exempt me to verify all my new glyphs.
    When I'm satisfied with my 2 masters, I can use them to create other masters or instances through interpolation.
  • Yves Michel
    Yves Michel Posts: 185
    Of course, this is an example. You have to play with the Change Weight value to reach the good one!
  • Yves Michel
    Yves Michel Posts: 185
    Additionally, I would suggest to consult the Fontlab 8 forum and maybe some tutorials on the Fontlab software!
  • Thomas Phinney
    Thomas Phinney Posts: 2,901
    I would strongly recommend doing considerable manual work after doing some sort of automated adjustment to the stroke weight. The automatic adjustment will not produce great results; it is more of a starting point.
    1. Rem.: This doesn't exempt me to verify all my new glyphs.
    When I'm satisfied with my 2 masters, ...
    Thank you Thomas! You completed my remark.

    But I would be interested to learn a more efficient method.
  • John Hudson
    John Hudson Posts: 3,244
    Of the various methods I have used over the years, my favourite was using Karsten Lücke’s Glyph Tweak tool in FLS5 to rough in weights and proportions, and then to use FLS5’s Interpolate Nodes tool to fit my initial master outlines to those weights and proportions, making adjustments to things like serif weight/length and join tapers as I went.

    FL8 now has a very good Delta Filter tool that functions quite like the Interpolate Nodes tool, but I am not sure there is yet anything that works quite like Karsten’s sledgehammer.
  • Thanks John!
    I still have Studio 5 on my PC but I didn't find the Glyph Tweak tool you mention.
    It seems to be obsolete. I only found https://kltf.de/kltf_otproduction.shtml 
  • Kent Lew
    Kent Lew Posts: 947
    I lamented the loss of Interpolate Nodes when I had to [reluctantly] leave FLS5 behind. News of this Delta filter might just get me to move back to FontLab. (But just as I was getting comfortable in a different environment … 🫤.)
  • John Hudson
    John Hudson Posts: 3,244
    edited November 11
    The Delta filter is great. I use it daily when in the outline editing stage.

    It works quite like Interpolate Nodes, but now you can constrain x,y interpolation direction so each node can have one of five states: moved, locked, locked x, locked y, or fully interpolated.


  • rsdk
    rsdk Posts: 8
    Thanks for your response, but I'm still stuck. Is it possible for anyone to give me step by step process of how to start making the SemiBold version. I already have Regular and Bold version. 

    also, in this link (https://help.fontlab.com/fontlab/8/tutorials/calfonts/7. Families, Variations, Interpolations/7b-2c Making Instances/), when I download the sample vfc file listed there, it only lets you change on letter H, not on any other letter
  • That link does not work for me
  • George Thomas
    George Thomas Posts: 649
    edited December 22
    Stray paren on the end of the link. This is the correct one. https://tinyurl.com/yc4heftn

  • Drawcard
    Drawcard Posts: 57
    Also worth mentioning, RMX Tools (specifically Tuner and Scaler) is anither option for creating the interpolations between your original extreme masters. 

  • Igor Freiberger
    Igor Freiberger Posts: 280
    edited December 23
    rsdk said:
    Thanks for your response, but I'm still stuck. Is it possible for anyone to give me step by step process of how to start making the SemiBold version. I already have Regular and Bold version.
    If you have Regular and Bold as masters, simply go to Font > Generate Instance.

    Note that you aren't limited to SemiBold. Actually, you can even extrapolate and try lighter and heavier instances.
  • John Hudson
    John Hudson Posts: 3,244
    edited December 23
    Are your Regular and Bold masters already in the same VFC project? If not, the first step is to import the Bold into the Regular project as a master, via the Font Info panel.

    You then need to set up the locations in the variable design space for each masters. To do this, you first define a weight axis in the Font Info axis panel. You can assign any location values in the Design Coordinates space (e.g. based on stem weights), but the Regular and Bold masters should be assigned to the values 400 and 700 respectively in the public facing User Coordinates.



    Then in the Instances panel, you define the Design Coordinsates locations for your Semibold weight (which should be mapped to 600 units in the User Coordinates). I recommend defining a Medium instance also, even if you are not planning on exporting it; it should be mapped to 500 units in the User Coordinates.

    Note that the interpolation path between Regular and Bold is not necessarily linear, and a more pleasing weight progression usually involves slightly bending the path as shown in that illustration.

    Your Semibold instance interpolation is only going to work, of course, if your outlines for each glyph in the Regular and Bold masters are compatible. You may need to spend some time checking this and fixing possible incompatible start point locations, path directions, or element ordering.

  • John Hudson
    John Hudson Posts: 3,244
    Also worth mentioning, RMX Tools (specifically Tuner and Scaler) is another option for creating the interpolations between your original extreme masters. 
    Unfortunately, RMX Tools for FontLab were not updated beyond FontLab Studio 5, so if you want to use the latest versions of RMX you also need to be running Glyphs. I go back and forth between FontLab and Glyphs sometimes to access RMX Tools and Kern On.

  • rsdk
    rsdk Posts: 8
    Are your Regular and Bold masters already in the same VFC project? If not, the first step is to import the Bold into the Regular project as a master, via the Font Info panel.

    You then need to set up the locations in the variable design space for each masters. To do this, you first define a weight axis in the Font Info axis panel. You can assign any location values in the Design Coordinates space (e.g. based on stem weights), but the Regular and Bold masters should be assigned to the values 400 and 700 respectively in the public facing User Coordinates.



    Then in the Instances panel, you define the Design Coordinsates locations for your Semibold weight (which should be mapped to 600 units in the User Coordinates). I recommend defining a Medium instance also, even if you are not planning on exporting it; it should be mapped to 500 units in the User Coordinates.

    Note that the interpolation path between Regular and Bold is not necessarily linear, and a more pleasing weight progression usually involves slightly bending the path as shown in that illustration.

    Your Semibold instance interpolation is only going to work, of course, if your outlines for each glyph in the Regular and Bold masters are compatible. You may need to spend some time checking this and fixing possible incompatible start point locations, path directions, or element ordering.

    Can you explain a bit more on the design and user coordinates and how do I set them and what should be the values for Regular, Bold, and Semibold. Also, when I get to the graph, my graph looks like this, so how do I add the new values in the graph?

  • John Hudson
    John Hudson Posts: 3,244
    The weight axis in OpenType variable fonts is defined relative to the scale from 0–1000 that is shared by the OS/2 font table weight class and the Cascading Style Sheets (CSS) specification used to define text weight in Web browsers. This scale allows for any number on that scale to be used to affect a sepcific weight in the variable design space, but there is also a set of standard instance weights defined along the scale:


    These values correspond to the ‘User Coordinates’ in the FontLab axis graph, i.e. these are the coordinates that the user will use, e.g. in CSS, to interact with your font weight axis.

    The ‘Design Coordinates’ are whatever scale you use internally to define the weight interpolation minimum and maximum, defined in font units (i.e. the same units used to define glyph outlines, spacing, kerning, etc.). The axis graph is mapping between your design units and the User Coordinates. The design units can be arbitrary: they just have to make sense to you. I sometimes use a multiplier of the common stem weight of a letter like lowercase l, such that at each extreme of the weight axis and at each instance the value of the Design Coordinates relates directly to the weight of the glyphs in some way.

    You can add points to the glyph graph and drag them into position manually, but just clicking anywhere on the graph line. But the easiest way to plot a weight axis is to first go to the Instances panel in Font Info, and define the set of named instances there (named instances are locations in the design space that you want to predefine and gival a label; often they correspond to static fonts you might want to generate such as Regular, Semibold, Bold, etc.) For each instance, you define both the location in design space font units (design coordinates), and also the mapping to the OS/2 weight class (user coordinates):



    When you have done this, you can go to the Axes panel and automatically fill in the named instances in the sub-panel for each axis:



    Now, when you open the axis graph, you can click the + button at the top to add points to the graph that correspond to your instances (select the From Instances option; the From Axis Instances does weird stuff).



    For the weight axis, I think it is a good idea to plot an entire weight progression across the User Coordinates, at least from 100 to 900, even if your actual design does not extend to cover that full range. The graph shown above, is for a font that actually only covers from Regular (400) to Black (900), but I have defined in the graph where there lighter weights from 400 down to 100 would land, because I may opt to extend the design in future, and want to know what the full curvature of the weight progression would look like. If you start with a Regular minimum weight, and then later extend the design to lighter weights, the Regular sometimes ends up being a break point on an othwerise smooth progression—as is the case here—, so plotting the full weight range ahead of time helps confirm whether this is going to be a minor or major distortion of the curve.

    Because the OS/2 weight class and CSS named instances have pre-defined values, it is a really good idea to plot all of these on the graph, even if you are not intending to output them all as named instances in a variable font or as individual fonts in a static family. You may be thinkin of your design as consisting of Regular, Semibold and Bold, with the Semibold sitting somewhere in the middle space between Regular and Bold, but the way the OT variable weight axis is defined really presumes the existence of a Medium instance (the 500 location on the User Coordinates scale). If you only define locations on the axis graph for Regular (400), Semibold (600), and Bold (700), then the interpolation of the undefined Medium location will be halfway along on a linear progression between Regular and Semibold, which may be acceptable but means a user engaging with the design space via CSS weight definitions won’t have the benefit of a smooth non-linear progression across the weight axis.
  • rsdk
    rsdk Posts: 8
    edited December 28
    Also, for example, Gujarati letter Ka and gujarati letter Ja (but seen in latin extended characters as well and at other places), when I apply "Font>Add Instance>see screenshot for details", it gives a random shape and for some characters the glyph stays empty. So, what can I do make those characters work?

    and for majority of the Hindi characters, the semibold variation didn't even get applies (screenshot at the end)


    Regular.        Bold.            Semibold (made using font>Add Varitation)



    Details of the Font>Add Instance


    Details of the font>font Info>Axes
    >Instances

    Masters

    Graph


    Semi Bold Instance not applied to Hindi Characters Screenshot
    (working for gujarati letters)

    not working for hindi letters (worked only on dev_Lxrw- two left from the selected one below)


    Can you share on what approach can I take to fix the issues mentioned above in this post?
  • John Hudson
    John Hudson Posts: 3,244
    If you are getting either a distorted shape or no glyph in the semibold instance, this indicates that the glyph outlines in your two masters are not compatible. No glyph indicates that FontLab is completely unable to interpolate between the masters. A distorted shape indicates that interpolation is happening but the outlines have incompatible start points or some other issue, e.g. incompatible path directions or element order.

    In the Layers and Masters panel, masters that are compatible with the selected master will be coloured light green. So here you can see that all the masters are compatible:



    But here, one two of the masters are not compatible, and are coloured red:



    [You may also sometimes see masters coloured yellow, which indicates that the outlines may be interpolable but FontLab thinks there might be a problem.]

    FontLab has some tools to try to automatically match masters, and you can try these, but I usually go through each incompatible glyph to figure out what is wrong and what is the best way to fix it.

    Look for start point location, i.e. where the little arrow indicating the start of the element path is. Is it in the same place for each element in each master?



    Look for incompatible path direction, indicated by the side of the path on which that little arrow sits and the direction in which it points. Is this the same in all the masters?

    Look at the number elements in each master, and the order they are in. I recommend having the Elements panel open, so you can step through each master and confirm that a) the same elements are present in each master, b) they are in the same order, and c) the corresponding elements in each master have the same number of nodes and handles (the first number after the element snapshot) and the same number of segments (lines, curves between online nodes; the second number):


  • John Hudson
    John Hudson Posts: 3,244
    BTW: I am happy to provide advice here, but I also recommend the FontLab user forum for technical help using the tool. There are some really knowledgeable and helpful contributors there.
  • Ray Larabie
    Ray Larabie Posts: 1,438
    I recommend making a new font with a single glyph and going through the manual and tutorials until you feel like you understand how it works.

    It's especially important to understand how layers and transformations affect interpolation. For example, if you have a glyph with multiple shapes, they need to be in the correct order in the layers panel. Occasionally, you'll have to manually fix the ordering of those layers.

    Every so often, you'll need to expand transformations. For example, if you slant, shift, or scale a glyph, you can see those transformations in the panel shown at the bottom of the image in the previous post. See the grayed out checkbox? Sometimes, you'll have to click that checkbox to expand transformations so you can solve stubborn interpolation issues.

    “Match masters” can be handy, but it won't always solve your problem. Sometimes it's easier just to copy from another master and rebuild the glyph manually.

    The axis graph/instances system is perplexing. Even though I've been using it for a few years, I still need to check the manual every time I use it. There are user coordinates and design coordinates, and little indication which is which. I understand the concepts perfectly, but that interface always throws me.

    That's why I think playing with a single glyph will help you learn how it all works.
  • There are some problems in your axis graph that could be easily improved.

    Currently you have this:



    As you go from left to right with increasing Design Coordinates for weight, the User Coordinates should also increase. Each point should be a higher value on both axes than the one preceding it.

    In the majority of fonts, the User Coordinate of every defined point will be a multiple of 100 (especially true for any points other than the highest and lowest). You will want a defined point on the User Coordinates axis for every 100 unit intersection (e.g. 200, 300, 400 etc.) until you reach the maximum.

    What Design Coordinate goes with that is more flexible, but needs to also increase for each point. Usually this is in something of a slightly curved arc.
  • John Hudson
    John Hudson Posts: 3,244
    That messed up axis graph looks like the sort of buggy thing that happens if you select the From Axis Instances option instead of the From Instances option when clicking the + button to add locations. I don’t even know why those two different options exist, or why one works and one makes a mess, even if the values in the Instances panel and Axes panel are the same.