見出し画像

Fontgenマニュアル

最初に

 これはfontgen(https://github.com/Yanrishatum/fontgen)のREADME.mdを日本語化したものです。

Fontgen

 Msdfgenに基づくヒープ用のフォントラスタライザー。主な対象はSigned Distance Field(SDF)を使用したフォントのラスターライゼーションの自動化。

使用方法

 これまでのところ、ツールはHashlink VMとWindowsのみでビルドされていますが、適切な構成を使用すればMac/LinuxやHXCPP/Eval/HLCでも動作するはずです。
 現在、コマンドラインインターフェイスはコンフィグファイルとロガースイッチに限定されています。
 WindowsではHLはmsdfgen.dllammer_msdfgen.hdllを参照する必要があるため、現在の作業ディレクトリまたはPATHにある必要があることに注意してください。

警告:一部の画像ビューワはPNG仕様に適切に従ってないため、ラスタライズされた画像の一部が真っ白で表示されます。これは特定のデコーダの問題であり、ファイル自体は正しいです。
※影響を受ける既知のビューア:XNView、FastStone Image Viewer

注意:32-bit Hashlinkを使用してください。

一般的な使用方法とコンフィグファイルの構造

ツールの実行方法:hl fontgen.hl <入力ファイル> [スイッチ]

 ※入力ファイルにはフォントのラスタライズパラメータを記述するJSONオブジェクトまたはオブジェクトの配列が含まれている必要があります。

{
    "input": String,
    "inputs": Array<String>,
    "output": String,
    "mode": SDFMode,
    "dfSize": Int,
    "charset": Array<CharsetConf>,
    "options": Array<ProcessorOption>,
    "fontSize": Int,
    "padding": { "top": Int, "bottom": Int, "left": Int, "right": Int },
    "spacing": { "x": Int, "y": Int },
    "packer": {
    "size": Int,
    "width": Int,
    "height": Int,
    "pot": Bool,
    "exact": Bool,
    "sort": String,
    "algorithm": String,
    "heuristic": String,
    "useWasteMap": String
},
    "template":String
}
  • input:JSONファイルに対するTTF/OTFファイルへの相対パス。inputsが存在する場合は任意です。

  • inputs:JSONファイルに対するTTF/OTFファイルへの相対パスの配列。出現順に代替フォントとして使用できます。inputが存在する場合は任意です。

  • svgInput:SVGシェイプから作成されたグリフを使用してフォントを生成するための記述。詳細については「SVG入力記述形式」を参照。

  • output:JSONファイルに対して.fntファイルの出力パス。

  • mode:グリフが生成されるモードを記述。可能な値はmsdf、sdf、psdfおよびrasterです。MSDFはRGBチャンネルを利用することで最高の精度を提供し、他のチャンネルは全てグレースケール画像を生成します。

  • dfSize:ピクセル単位の距離フィールド範囲。ラスターモードの場合は省略できます。

  • charset:次の優先順位でラスタライズする必要がある文字を記述する配列:
    1. Charset.hxに記載されているUnicodeブロック文字セット(またはエイリアス)を探そうと試みる。
    2. Stringがファイルを示している場合、その内容を解釈しようと試みる。
    3. ファイルが有効なXMLファイルの場合、ラスタライザーはテキストを含む全てのノードに存在する文字を使用(属性とコメントは無視)。
    4. ファイル内容をラスタライズする文字リストとして使用。
    5. ラスタライズする文字リストとしてStringを使用。
     さらに、配列の入れ子もサポートされています。

  • fontSize:希望のフォントサイズ(ピクセル単位)

  • padding:オプションでデフォルトは0。テクスチャ上のグリフ追加のパディング(空き)をピクセル単位で記述。

  • spacing:オプションでデフォルトは1。テクスチャ上のグリフ間の間隔をピクセル単位で記述。

  • options:追加の構成フラグのオプションのリスト。以下「処理オプション」参照。

  • template: メイン設定で定義されていない場合に継承される「デフォルト」値を含むオプションのファイル名。

パッカー(packer)設定

 オプションのパッカー設定により、アトラス作成を微調整できます。

  • size:幅と高さを同じ値に設定するショートカット。デフォルトの最大アトラスサイズは4096x4096です。

  • width:出力アトラスの最大幅(ピクセル単位)。アトラスが指定されたサイズになることを保証するものではないことに注意。

  • height:出力アトラスの最大の高さ(ピクセル単位)。

  • pot:出力画像の寸法は2のべき乗になります。この操作は最大サイズをオーバーライドでき(例えば最大サイズ122pxでは128pxの画像を出力可能)、コンテンツのパッキングは2のべき乗の境界ではなく、定義されたサイズの境界内で行われることに注意してください。デフォルト:false。

  • exact:出力画像が常に指定されたサイズになるようにします。
    デフォルト:false。

  • sort:パッキング前のグリフのソート機能を設定します。名前の前に - をつけるとソート結果が逆になります。
    利用可能な値:width、height、area、perimeterとchar.。デフォルトは -height です。

  • algorithm:パッキングアルゴリズムを選択できます。利用可能な値を以下に示します。デフォルトは max-rect です。

    • guillotine:ギロチンアルゴリズムを使用します。現在は構成できず、BestLongSideFitとMaximizeArea ヒューリスティックを使用します。

    • naive-shelf:単純なシェルフ会うごリズムを使用します。

    • shelf:シェルフアルゴリズムを使用します。デフォルトのヒューリスティックはBestAreaです。空費マップの使用を許可します。

    • simple-max-rect:簡素化されたMax Rectsアルゴリズムを使用ます。

    • skyline:Skyline アルゴリズムを使用します。デフォルトのヒューリスティックはMinWasteFitです。

    • max-rect:Max Rectsアルゴリズムを使用します。デフォルトのヒューリスティックはBestLongSideFitです。

  • heuristic:一部のアルゴリズムに使用する正確なヒューリスティックを指定します。大文字と小文字を区別します。

    • shelf:どのシェルフを選択するかを決定。

      • Next:新しい四角形は常に最後に開いているシェルフに追加

      • First:各シェルフに対して各長方形を順番にテストし、最初に収まる場所に詰めます

      • BestArea:残りのシェルフの面積が最小シェルフを選択

      • WorstArea:残りのシェルフの面積が最大シェルフを選択

      • BestHeight:長方形が収まる最小シェルフ(高さの点で)を選択

      • BestWidth:パッキング後に利用できる水平方向のシェルフスペースが最小シェルフを選択

      • WorstWidth:パッキング後に水平方向のシェルフスペースが最も多く残るシェルフを選択

    • skyline:優先挿入位置を指定:

      • BottomLeft

      • MinWasteFit

    • max-rect:挿入時にどの四角形が優先されるかを指定:

      • BestShortSideFit

      • BestLongSideFit

      • BestAreaFit

      • BottomLeftRule

      • ContactPointRule

    • useWasteMap:一部アルゴリズムの空費マップの使用を有効または無効にします。

コンフィグ例についてはtest/config.json参照。

スイッチ

  • info:処理の進行状況のログを有効にします。

  • nowarnings:処理警告のログを無効にします。

  • timings:各ステップの処理タイミングをログに記録します。

  • printmissing:TTFファイルには存在しないが、文字セットで必要とされた全ての文字の印刷を有効にします。

  • silent:全てのログ記録を抑制します。

  • verbose:すべてのログ記録を有効にします。

  • help:ヘルプファイルを出力して終了します。

  • stdin:標準入力軽油でJSON設定を渡すことができます。現在の作業ディレクトリはフォント検索ルートパスとしてみなされることに注意。

  • sharedatlas:全てのコンフィグで共有テクスチャを有効にします。間隔設定とテクスチャファイルは最初のコンフィグから取得されます。

処理オプション

 全ての処理オプションをスイッチとして使用して、全てのコンフィグで有効にすることができます。
例: -allownonprint

  • allownonprint:U+00からU+1FとU+7F(DEL)の範囲の非印刷文字のラスタライズを有効にします。デフォルトでは無効になっており、グリフの欠落に関する警告は生成されいません。

  • r8raster:ラスターモードを使用する場合、アルファを使用せずにグレースケールラスター化を強制。

.fntファイルの追加

 このツールはデコーダがフォントのレンダリングに必要なパラメータを決定できるようにする、使用されるSDFメソッドを説明する追加の行を.fntファイルの末尾に追記します。SDF記述子は次のように表現されます:

sdf mode=<mode> size=<dfSize>

 一部のパーサーは行の順番に依存しており、infoブロックとcharsブロックの間に挿入すると壊れる可能性があるため、これはファイルの最後に配置されます。

SVG入力記述子

 svgInputの値はキーが文字、値がこの文字の外観の形状を取得する場所であるペアを持つオブジェクトである必要があります。説明にはsvgファイルの名前とsvgファイル内のパスノードの(オプション)id属性が含まれます。InkscapeでSVGファイルを編集する場合、「編集」メニューから利用できる「XMLエディタ」パネルでID属性を割り当てることができます。1つのパスノードからのみ1つの文字を生成できます。時計回り/反時計回りの方向はポスがホール(hole)かフィル(fill)かを定義します。
例: {"s":"drawing.svg:star", "d":"drawing.svg:donut", "a":"drawing.svg:a"}

最後に

 翻訳は必要と思われる部分のみ行っています。この形式が使用されているのは今のところWartales(Shiro Games)ぐらいですが、今後増える可能性もありますので自身の覚書の意味も含めて日本語化しました。

内容が気になりましたらぜひサポートをお願いします。そのサポートが継続の力になります。よろしくお願いします。