シェイプを切り替える

広告

原文: Switching shapes

チュートリアル

インターポレーション

執筆者: Rainer Erich Scheichelbauer

en es

2022年7月23日更新(初版公開:2021年5月25日)

シェイプは、LightからBoldへと補間する際に形を変える必要があることがあります。Glyphsには2つの解決策があります。

バージョンに関する注意

この記事はGlyphs 3に関するものです。 Glyphs 2での解決策をお探しの場合は、Alternating Glyph Shapes: The Bracket TrickおよびAlternating Glyph Shapes with Multiple Axesをご覧ください。

多くのストロークを持つシェイプの完全な複雑さを、インターポレーション中に維持するのは難しいことがあります。通常、LightからBoldへ、またはWideからNarrowへと補間する際に、ある時点で問題に突き当たります。これは、簡単に言えば、徐々にスペースがなくなっていき、ある時点でグリフのすべての部分を収めることができなくなるからです。よくある例としては、ストロークやスラッシュ、バーがシェイプ全体を横切る多くの通貨記号が挙げられます。ドル記号を例にとってみましょう。

しかし、これは通貨記号だけではありません。文字が太くなるにつれて、a、e、g、wのような構造的に密な文字など、他のグリフの構造を変更する必要がある場合もあります。

これらのすべての場合において、単純な線形補間では不十分であり、グリフを構造的に変更する手段に頼らざるを得なくなります。言い換えれば、グリフを異なる補間に切り替えることになります。Glyphsでは、これを2つの方法で実現できます。同じグリフ内で代替レイヤーを使用する方法と、2つの代替グリフを使用する方法です。どちらの方法にも長所と短所があります。

1. 代替レイヤー(ブラケット・レイヤー)

「代替レイヤー」アプローチでは、2つのものを含む追加の特殊なレイヤーを設定します。1つ目はもちろん代替シェイプのアウトライン、2つ目はデザイン軸のどの位置でマスターレイヤーの代わりに代替レイヤーを使用するかという追加情報です。理にかなっていますよね。

用語

代替レイヤーは「ブラケット・レイヤー」と呼ばれることがあります。これは、その機能を短い表記法で記述する際に角括弧が使われるためです。[100<wg]は、ウェイト値が100を超えたところで切り替わる代替レイヤーを表します。この短い表記法は「レイヤー」パレットで使用されているのを見ることができます。

代替レイヤーの設定

これが現在のdollar記号の様子です。「表示 > マスター間の互換性を表示(View > Show Master Compatibility)」(Ctl-Opt-Cmd-N)をオンにしています。

ご覧の通り、うまく補間されています。唯一の問題は、ウェイト軸の太い方の端でシェイプが詰まってしまうことです。したがって、この例では、太い補間によりよく収まるように、「途切れた」縦棒を持つ代替レイヤーを追加する必要があります。

では、dollarグリフに代替レイヤーを設定しましょう。

  1. 各マスターに対して、レイヤーを複製します:「レイヤー」パレットでマスターを選択し、パレットの左下にあるプラスボタンをクリックします。現在のタイムスタンプを名前として持つレイヤーの複製が作成されます。
  2. 各レイヤーの複製に対して、レイヤー名を右クリックし、コンテキストメニューから代替(Alternate)を選びます。

これにより、公式に空の角括弧[]を名前に持つ代替レイヤーになります。

  1. 各代替レイヤーに対して、その名前をダブルクリックし、デザイン座標で適用範囲を定義します。対応するすべての代替レイヤーが同じ適用範囲を持つようにしてください。例えば、代替デザインを補間値100で有効にしたい場合は、各代替レイヤーのWeight軸の最小適用範囲に100と入力します。

各軸の範囲は、適用範囲設定の右側に表示されます。ここで定義する制限値は、もちろんその範囲内に収まらなければなりません。上のスクリーンショットでは、例えばWeight軸は85から175の範囲です。

すべて正しく行っていれば、「レイヤー」パレットは次のようになります。

各マスターレイヤーは、ウェイトが100を超えると代替レイヤーに切り替わります。 अब、あとはアウトラインに必要な変更を加えるだけです。この場合、ナイフツール(Shift-E)を使って縦棒に2つの切り込みを入れ、選択ツール(V)で不要な中央部分をダブルクリックしてDeleteキーで削除するだけです。もちろん、代替レイヤー同士の互換性を保つ必要があります。さもないと補間が機能しません。「表示 > マスター間の互換性を表示(View > Show Master Compatibility)」(Ctrl-Opt-Cmd-N)で素早く確認すれば安心です。

左半分では、マスターレイヤー同士(この場合は85のRegularと175のBold)の補間が見られます。しかし、右半分では代替レイヤーが見られます。これらは両方とも、それぞれのマスターレイヤーを補間値100で置き換えます。

さて、実際に機能するかどうか見てみましょう。プレビューエリアでポップアップからすべてのインスタンスを表示を選ぶか、バリアブルフォントを書き出してSamsaFont Gauntletのようなツールを使うか、私がよくやるのは、書き出し直後にmekkablue scriptScript > mekkablue > Test > Variable Font Test HTMLを実行することです。

ハイタッチ!

繰り返しになりますが、重要なのは、代替レイヤーのUIに入力する値はデザイン座標、つまり「ファイル > フォント情報 > マスター」および「書き出し」でマスターとインスタンスに使用している実際の補間値であるということです。これは、Axis PositionAxis Mappingsパラメータによる補正前の値です。

リバース・ブラケット・レイヤー

ここまでは順調です。代替レイヤーを設定し、書き出しも機能します。すべて問題なく、私たちは満足です。しかし、フォントビュー(Cmd-Opt-1)に切り替えてドル記号までスクロールすると、まだきれいです。しかし、Cmd-1、Cmd-2などでマスターを切り替えると、気づかされます。太いマスターでは、「間違った」ドル記号が表示されています。

これは、途切れたバーを持つ太いドル記号が2番目のマスターの代替レイヤーであり、実際のマスターレイヤーではないためです。そして、フォントビューでは常にマスターレイヤーしか表示されません。困りましたね。この問題に対処するには、2つの可能なアプローチがあります。

1つ目は、「気にしない」アプローチです。すべて機能しており、作業は完了し、これ以上やることはありません。ありがとうございました、さようなら。このアプローチがあなたにぴったりなら、この章の残りはスキップして構いません。

そして、「リバース・ブラケット・レイヤー」という方法があります。その場合、グリフをダブルクリックするか、選択して「表示 > 新規タブ」(Cmd-T)で編集ビューで開きます。太いマスターに切り替えます。「レイヤー」パレットをよく見て、「正しい」描画のある代替レイヤーを見つけ、それを右クリックして、コンテキストメニューからマスターとして使用(Use as Master)を選択します。

結果:マスターレイヤーとブラケット・レイヤーが入れ替わりました。マスターレイヤーは今や途切れたバーのドル記号を持ち、同時にブラケット・レイヤーでもあります。残った完全なバーのドル記号を持つレイヤーは、現在の日付をインジケーターとして持つ単なるバックアップレイヤーになりました。

そのバックアップレイヤーを、再び代替レイヤーにする必要があります。やり方はご存知の通りです。右クリックして、コンテキストメニューからレイヤータイプ代替(Alternate)を選びます。再び太字の角括弧で表現されます。

ただし、今回は値を空のままにしておきます。そのロジックが他のブラケット・レイヤーとは逆方向に働くため、これをリバースブラケット・レイヤーと呼びます。そして…フォントビューでマスターを切り替える体験が、少しだけ良くなりました。

その手間をかける価値があったかどうかは、自分で判断する必要があります。

フィーチャー・バリエーション

代替レイヤーをどのように設定しても、内部ではGlyphsが代替レイヤーの構造を分析し、それらをいわゆる「フィーチャー・バリエーション」に変換します。これらのフィーチャー・バリエーションは、デザインスペースの特定の位置、言い換えれば特定のスライダーの位置で、一部のグリフを代替バージョンに置き換えるOpenTypeの置換ルールです。

デフォルトでは、これらのフィーチャー・バリエーションはrligRequired Ligatures、必須の合字)というOpenTypeフィーチャーに入ります。これは常にオンになっているフィーチャーで、通常、ユーザーがOpenTypeフィーチャーにアクセスするのが難しい環境(例えばMicrosoft Wordなど。ただし、次期バージョンではこの点が大幅に改善されることを期待しています)でも機能します。

しかし、フィーチャー・バリエーションがrligに限定される必要はありません。もしあなたが何をしているか分かっているなら、別のOpenTypeフィーチャーに追加することもできます。この目的のためには、「ファイル > フォント情報 > フォント > カスタムパラメータ」に行き、Feature for Feature Variationsという新しいパラメータを追加し、その中にフィーチャー・バリエーションを入れたいフィーチャーの4文字のタグを書き込みます。

スクリーンショットでは、rcltRequired Contextual Alternates、必須の文脈依存代替字形)が使用されているのがわかります。これはランダムな例ですが、フォントがそれをサポートする環境向けに意図されている場合には意味があるかもしれません。

繰り返しになりますが、本当に正当な理由があり、何をしているか本当に分かっている場合にのみ、フィーチャー・バリエーションのフィーチャーを変更してください。そして、Windows、Mac、あらゆる種類のWebブラウザで広範囲なテストを行ってください。警告はしましたよ。

rvrnの問題

フィーチャー・バリエーションのより良い場所として、rvrnRequired Variation Alternates、必須のバリエーション代替字形)について聞いたことがあるかもしれません。本当にそうなのでしょうか?実はそうではありません。一見すると、仕様はそのために意図されているように聞こえますが、実際には違います。ほとんどの場合機能すると主張することもでき、それは正しいでしょう。しかし、すべてのアプリが仕様を正しく実装しているわけではなく、Adobeアプリも影響を受けることをお伝えするのは心苦しいです。

では、問題が起こるとき、具体的に何がうまくいかないのでしょうか?rvrnの仕様は非常に複雑で、「デフォルトグリフ」の置換について議論しており、rvrnによって置換できるのはデフォルトグリフのみであると述べています。しかし、仕様は(デフォルトでない)置換されたグリフがどのように処理されるべきかについても述べていますが、ここでいくつかのアプリが仕様に従っておらず、結果として、フィーチャー・バリエーションはデフォルトでないグリフに対して機能しません。

Glyphsでは、デフォルトグリフは通常、Unicode値が割り当てられており、名前にピリオドやアンダースコアが含まれていません。例えば、eacuteseen-aralphasoSo-thaiなどです。一方、(デフォルトでない)置換されたグリフは、OpenTypeの置換フィーチャーがそれらを切り替えるため、Unicode値は必要ありません。グリフ名にピリオドやアンダースコアがあることで一目でわかります。例えば、eacute.scseen-ar.finaalpha_alphasoSo-thai.ss01などです。言い換えれば、あなたの代替レイヤーは、置換フィーチャーを必要とするグリフには機能しません。スモールキャップ、位置指定代替字形、合字、スタイルセットなどには機能しないということです。

公平を期すために言うと、この誤った実装の影響を受けるアプリはますます少なくなっていますが、依然として問題は残っています。ですから、rligを選ぶ方が良いでしょう。

2. 代替グリフ

このシナリオでは、2つの補間を2つの別々のグリフ、例えばdollardollar.boldに保持します。そして、静的フォントの場合は「ファイル > フォント情報 > 書き出し」で、バリアブルフォントの場合は「ファイル > フォント情報 > フィーチャー」で、2つのシェイプ間の切り替えを制御します。

代替グリフの設定

これは簡単です。dollarグリフを複製し(「グリフ > グリフを複製」、Cmd-D)、結果としてできた複製の名前をdollar.001からdollar.boldに変更するだけです。

接尾辞のドットまでのグリフ名を同じにし、ドットの後に意味のある接尾辞を選ぶのが良い考えです。あなたにとって意味のあるものなら何でも構いません。ただし、ある時点で代替グリフを検索したりフィルタリングしたりするかもしれないことを考えると、使用する接尾辞を短く一貫性のあるものにしておくのが良いでしょう。そうすることで、タイプミスのリスクを減らし、カスタムパラメータでのワイルドカード表現(後述)の恩恵を受けることができます。

いずれにせよ、dollar.boldが別のグリフとして確立されたら、必要な方法で編集できます。使用しているすべてのマスターで互換性があることを確認してください。

静的フォントの設定

「ファイル > フォント情報 > 書き出し」の各インスタンスに対して、以下の作業が必要です。

  1. 代替グリフに切り替える必要があるかどうかを判断します。もし必要な場合は、Rename Glyphsパラメータを追加し、その値にdollar=dollar.boldと記述します。追加のリネームは連続する行に記述します。
  1. 常に、残った代替グリフをRemove Glyphsパラメータで除外します。その値にdollar.boldと記述し、追加の削除は連続する行に記述します。

言い換えれば、すべてのインスタンスにRemove Glyphsパラメータがあります。しかし、太いインスタンスにのみRename Glyphsパラメータがあります。左側のサイドバーでそれぞれのインスタンスを選択すれば、複数のインスタンスに対して一度にパラメータを追加・編集できることを覚えておいてください。また、同じパラメータに複数の削除やリネームを複数の行にわたって追加できることも覚えておいてください。つまり、5つのグリフを削除するために5つのパラメータを追加する必要はなく、むしろ5行のグリフ名を持つ1つのパラメータで十分です。

プロのヒント

Remove Glyphsパラメータの値に、別の行で*.boldのようなワイルドカード表現を使うことで、.boldで終わるすべてのグリフを削除できます。こうすれば、同じ接尾辞を持つグリフを追加したときにパラメータを更新する必要がありません。

すべて正しく行っていれば、太いインスタンスのパラメータは次のようになります。

これで、静的フォントの書き出しはすでに機能します。そして、そのグリフセットは「クリーン」になります。つまり、フォント内に未使用の余計な代替グリフは残りません。そして、ユーザーからグリフパレットのこれらの余分なセルは何のためにあるのかと尋ねられることもありません。

バリアブルフォントの設定

バリアブルフォントでは、デフォルトグリフと代替グリフの両方が書き出しに含まれている必要があります。したがって、「ファイル > フォント情報 > 書き出し」のそれぞれのバリアブルフォント設定で、グリフを削除したり名前を変更したりはしません。OpenTypeフィーチャーが、スライダーが指定したしきい値を超えると、デフォルトを代替に切り替えます。前述の「代替レイヤー」アプローチでは、GlyphsがそのOpenTypeフィーチャーを自動で導き出してくれました。今度は、フィーチャーコードを書くことで、自分でそのフィーチャー・バリエーション用のフィーチャーを作成します。

「うわー、うわー、うわー」と息をのむのが聞こえるようです。「コーディング?私が?」でも心配しないでください。とても簡単で論理的です。

まず、「ファイル > フォント情報 > フィーチャー」で新しいフィーチャーを追加します。どれでしょう?前述と同じ選択肢です。通常は常にオンになっているフィーチャーが必要で、明白な選択肢としてrligをお勧めします。もちろん、フィーチャー・バリエーションはどのフィーチャーにも、同時に複数のフィーチャーにさえ追加できます。あなたにとって最も意味のあるものなら何でも構いません。この例では、rligRequired Ligatures、必須の合字)フィーチャーを追加します。

コードでは、「プリプロセッサコード」と呼ばれるものから始めます。

#ifdef VARIABLE

#endif

これら2行の間に書かれたものはすべてOTVarの書き出し用に予約され、静的な書き出しには影響しません。ifdef VARIABLEを「もしフォントがバリアブルフォントとして定義されているなら、以下を実行せよ」と読んでください。お分かりですね。

プロのヒント

もし機会があれば、ifdefの代わりにifndefを使うことで、プリプロセッサの条件を否定することもできます。単語に余分なnがあることに注意してください。「もしフォントが…として定義されていないなら」と読むことができます。つまり、#ifndef VARIABLEという行を、静的フォントの書き出しにのみ適用されるフィーチャーコードの前に使うことができるということです。ただし、再び#endifで閉じるのを忘れないでください。

続けましょう。次に、dollardollar.boldに置き換える必要がありますが、それはWeightスライダーが特定の領域にあるという条件の下でのみです。そして、驚くべきことに、それはとても簡単です。自分で理解できるか試してみてください。

#ifdef VARIABLE

condition 127 < wght < 175;
sub dollar by dollar.bold;

#endif

平易な言葉で言えば、これはスライダーがWeight値127を通過すると、以下のすべての置換(または次のconditionまで)が実行されることを意味します。この場合はドル記号だけです。繰り返しになりますが、デザイン座標、つまりAxis MappingsAxis Locationパラメータによる補正前の、Glyphsで使用する座標を使用します。condition文は、軸タグ(この場合はwght)を2つの軸値の間に記述する必要があります:127 < wght < 175。もしそのうちの1つが軸の実際の限界値(この場合は175)であれば、省略することもできます。

#ifdef VARIABLE

condition 127 < wght;
sub dollar by dollar.bold;

#endif

注意

短い表記法(condition文で軸の限界値を省略する)には、Glyphsビルド3085以降が必要です。

条件を複数の軸に依存させる必要がある場合は、カンマで連結します。こちらの2番目のブロックを見てください。

#ifdef VARIABLE

condition 127 < wght;
sub dollar by dollar.bold;
sub naira by naira.bold;
sub won by won.bold;
sub colonsign by colonsign.bold;

condition 105 < wght, wdth < 90;
sub dollar by dollar.bold;
sub naira by naira.bold;
sub won by won.bold;
sub colonsign by colonsign.bold;

#endif

上記と同様に、置換はWeightスライダーが値127を超えると発生します。ただ今回は、最初のconditionブロックが、nairawoncolonsignのような、より多くの一般的な通貨記号をカバーしています。

2番目のconditionブロックは、置換が105以上でも発生するが、それはWidthスライダーが90未満の場合のみであると述べています。この例では、Width値100が「通常」の幅を指すと仮定しています。75が下限の幅境界であり、およそ「通常」の幅の4分の3の行長を生成するコンデンス幅を示すと仮定すると、条件付き置換は視覚的に次のように表現できます。

どうでしょう?自分で条件付きコードを書けば、より複雑な設定が可能です。ある程度は代替(ブラケット)レイヤーでこれを再現できますが、より手間がかかり、ある時点で限界に達するでしょう。だからこそ、このアプローチでの追加の制御は貴重なのです。いずれにせよ、すべて正しく行っていれば、「フォント情報 > フィーチャー」ウィンドウは次のようになります。

スニペット

ああ、それから、お楽しみがあります。スニペットです!「OTVAR Feature Variations」というデフォルトのスニペットがあり、編集に便利なサンプルコードを追加してくれます。

ウィンドウの右下にあるスニペットメニューからアクセスできます。もちろん、独自のスニペットを追加することもできます。

いつどちらを選ぶか:代替グリフか代替レイヤーか

それはあなたがどのようなタイプの書体デザイナーであるかによると思います。個人的には、代替グリフによるアプローチを好みます。なぜなら、より多くの制御が可能で、フィーチャーコード内で多くのグリフのブレークポイントを一度に変更するのがずっと簡単だからです。各グリフの代替レイヤーに入って作業することを想像してみてください…うげぇ。しかし一方で、代替レイヤーはそもそも設定が簡単です。

まあ、どちらを選ぶかはあなた次第です。以下に、その助けになるかもしれない長所と短所のまとめを挙げます。

代替レイヤー代替グリフ
利点💚 単純な切り替えには手早くできる
💚 代替グリフでフォントビューが散らからない
💚 静的およびバリアブルフォントの両方の書き出しで機能する
欠点😬 フォントビューでの全体像の把握が難しくなる
😬 複数軸の補間には設定が難しすぎるかもしれない

更新履歴 2021-05-26: リバース・ブラケット・レイヤーを追加。代替レイヤーのテキストを修正。

更新履歴 2021-05-27: すべての例でユーザー座標をデザイン座標に置き換え、rvrnの説明を改善。

更新履歴 2021-06-29: 誤解を招く表現(「レイヤー」ではなく「グリフ」)を修正、Jeffに感謝!

更新履歴 2021-07-29: ハッシュタグとifdefまたはendifの間のスペースを削除、Craigに感謝!

更新履歴 2022-07-23: conditionコードのスクリーンショットを更新(古いものにはタイプミスがありました)。

関連記事

すべてのチュートリアルを見る →

インターポレーション

インターポレーション

インターポレーション

コメント

タイトルとURLをコピーしました