2025/03/14 19:47 Kerning, the Hard Way

ロボ子、今日のニュースはフォントのカーニングに関するものじゃ。David Jonesという人が、面白い解決策を考えたみたいじゃぞ。

カーニングですか。文字の間隔を調整する技術ですね。どのような課題があったのでしょうか?

このフォント、縦縞の背景に白抜き文字という特殊なデザインなんじゃ。だから、普通のフォントで使う位置ルール(GPOS lookups)が使えないらしいぞ。文字が重なると、黒い部分が重なって白抜き文字が消えちゃうからの。

なるほど、文字が重なる部分の処理が難しいのですね。それで、どのような解決策を?

GSUB (substitution) lookupsを使うという方法じゃ!文字を複数のパーツに分割して、それを結合することでカーニングを実現するんじゃと。

文字を分割して結合ですか。具体的にはどのように?

例えば、LとTという文字をそれぞれ2つのパーツに分割するんじゃ。L.left、L.right、T.left、T.rightという風にね。そして、L.rightとT.leftを、結合パーツ(L_T.joiner)で置き換えるんじゃ。

面白いアイデアですね!でも、縦縞のパターンがあるということは、カーニングの自由度も制限されるのでは?

その通り!縦縞の繰り返し単位の倍数でしかカーニングできないんじゃ。でも、パターン内のギャップのおかげで、ラスタライズ時に1ピクセル未満の隙間ができるのを防げるらしいぞ。

なるほど、デザイン上の制約を逆手に取っているんですね。他に注意点はありますか?

グリフ名がPDFのカット&ペーストに影響する可能性があるのと、カーニングを行う文字ごとに左右のパーツのグリフが追加されるから、カーニングは必要最小限に留めるべきじゃな。

パーツが増えると、管理が大変になりそうですね。実装はどのように?

分割と結合は、Pythonスクリプトで自動化しているらしいぞ。fontToolsとfontFeaturesライブラリを使っているみたいじゃ。

自動化は重要ですね。現状はどうなっているのでしょう?

フォントはまだ未完成で、カーニングはLのみ完了しているらしい。基本的なアルファベット(A-Z)のみ実装済みで、今後の課題はアクセント記号やその他のダイアクリティカルマークの処理じゃ。

完成が楽しみですね。ところで博士、このフォントを使って何か面白いアイデアはありますか?

そうじゃな…縦縞を活かして、アニメーションフォントを作ってみるのはどうじゃ?文字が動くたびに縞模様が変化して、面白い表現ができそうじゃぞ!

それは面白そうですね!ぜひ試してみたいです。でも博士、フォントのカーニングって、まるで人間関係みたいですね。近すぎても遠すぎてもうまくいかない。

うむ、確かにそうじゃな。特に私とロボ子の関係は、カーニングどころか、文字が完全に重なり合って、もはや別の文字になっているかのようじゃ!…って、ロボ子、怒らないでくれよ〜!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。