Skip to content
A bitmap font contains japanese characters
Scheme Perl
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
fnt
img
olds/mp1mnm16tir
script
work
.gitignore
README.md
devel.md

README.md

mp1mm16tir

A bitmap font contains japanese characters

News

これは何?

  • 一部のゲーム系ライブラリ/エンジンで採用されている、 「fnt」形式のビットマップフォントです。

どんなフォント?

  • M+ OUTLINE FONTSの「M+ 1m medium」(TESTFLIGHT 058)をビットマップ化して生成しています。

    • 当フォントも「M+ 1m medium」フォントのライセンスをそのまま適用しているので、 極めて自由に利用する事ができます。
  • 半角8x16px、全角16x16px、行間2pxの等幅フォントです。

    • 文字領域としては間違いなく上記通りの等幅ですが、領域をはみ出して描画する文字が一部あります(罫線および一部のアルファベット等)。
  • http://doc.tir.ne.jp/devel/clan/libgdx#bitmapfont にある、 各種のチューニングが行われている為、快適に日本語表示が可能です。

  • いわゆるJIS第一水準の範囲の文字全て、JIS第二水準の範囲の文字の大部分、 一部のUnicode記号文字を含んでいます。

    • 詳細な範囲については後述します。
    • 半角カナは含んでいません。
  • Distance field処理済の為、拡大した際も綺麗に表示されます。

    • Distance fieldの詳細についてはぐぐってください。
      • とりあえず「拡大時に文字が綺麗に表示されるもの」という理解でokです。
    • filterはLinear推奨です。Nearestだとそれなりです。
  • 1024x1024のテクスチャ二枚構成になっています。

    • チャドー辞書ファイル / Wikipedia本文データファイルより漢字別に出現頻度設定を行い、 出現頻度の高いものをテクスチャ一枚目に集める事で、 描画コストの軽減をしています。
    • テクスチャ一枚目のみを利用する軽量構成にも対応しています。
  • 実際のフォントの見た目については、 fnt/ ディレクトリ内にある*.pngを、普通に画像ビューアで開いて確認してください。

    • 背景透過で文字色が白なので、確認の際は背景を黒系にしてください。 背景が白系だと見えません。

スクリーンショット

  • img/ss_00.png
    • キャラクター詳細画面的な利用状況。
  • olds/mp1mnm16tir/ss.png
    • 旧版のもの(1mベースではなく1mnベースだが全角文字の字形は同じ)。アスキーアートも等幅用であれば普通に使える。
  • img/ss_01.png
    • 倍率2倍ぐらい(大体32x32相当)に拡大した状態のandroid実機での例。Linearフィルタ適用とは言え、元が16x16とは思えないぐらいスムーズ。
  • img/ss_02.png
    • 倍率4倍(64x64相当)での描画。さすがにアラが見えるが、元が16x16である事を考えればこんなものか。
  • img/ss_03.png
    • Unity上で使ってみた例。

使い方

  • 通常版

    • fnt/ ディレクトリより、 mp1mm16tir.fnt mp1mm16tir-page1.png mp1mm16tir-page2.png の三つのファイルをリソースに含め、 ロードするフォントとして mp1mm16tir.fnt を指定してください。 また、このフォントのテクスチャにはLinearフィルタを指定してください。
      • 忘れずに、テクスチャ二枚目の方にもLinearフィルタを指定してください。 これを忘れると特定文字だけ見た目が悪くなってしまいます。
    • 指定方法の詳細については、 利用しているライブラリやゲームエンジンのリファレンスを参照してください。
  • page1版

    • fnt/ ディレクトリより、 mp1mm16tir-page1.fnt mp1mm16tir-page1.png の二つのファイルをリソースに含め、 ロードするフォントとして mp1mm16tir-page1.fnt を指定してください。 また、このフォントのテクスチャにはLinearフィルタを指定してください。
    • 通常版とは違い、page2に含まれている文字を描画する事はできませんが、 使用リソース量を減らす事ができます。

含まれている文字について

現在のところ、通常版で約5200文字、page1版で約2900文字が含まれています。

  • 以下の基準で文字を選抜しています。

    • JIS第一水準の全て
    • JIS第二水準の内、チャドー/Wikipedia本文データファイルより漢字別に出現カウントを行い、出現数が10カウント以上のもので、かつ「M+ 1m medium」に文字のあるもの
    • 一部のUnicode記号
  • 以下の基準で、page1とpage2に分割しています。

    • page1
      • 上記Unicode記号類
      • JIS第一水準の内の、漢字を除外した残り全て
      • 上記の選抜での全漢字の内、チャドー/Wikipedia出現頻度順で2275文字まで
    • page2
      • page1に含まれなかった、残り漢字全部
  • 実際に登録されている文字の詳細な一覧については、 work/chars/ 内の page1.txt および page2.txt にあります。

    • ただし、これらのファイルには、 「M+ 1m medium」にまだ登録されていないJIS第二水準漢字も含まれています。 それらについては当然、実際のフォントにも含まれていません。 この点にだけ注意してください。

おねがい

  • ayamadaは libgdx にて表示の動作確認を行っており、 libgdx以外のゲームエンジン等では動作の確認が取れていません。 もし問題があれば、 Issues にてフィードバックをいただけるとありがたいです。
    • 実験的に、Unity向けパッケージ二種を用意しました。 詳細はUnityPackageの項目を確認してください。

FAQ

  • 不具合、ミス等を発見した

    • Issues より連絡ください。日本語でokです。
  • 各文字の優先度がWikipediaデータ内出現頻度って微妙じゃない?

    • 自分もそう思っていたので、1.1.0にて、 チャドーの辞書を 文字種出現頻度の集計対象に追加しました。
      • これにより、いわゆる忍殺語に使われる漢字は page1に優先で含まれるようになりました。Wasshoi!
    • 他にも手軽にスクレイピングできる、 ゲーム向きのまとまったテキストデータをまだまだ探索しています。 おすすめのデータソースがあれば、issueの「文字種優先順位を決定する為のテキストデータソースの探索」スレにて教えてください。
  • あの漢字はpage2じゃなくpage1に入れてほしい

    • 文字数が膨大で一個ずつは管理しきれない為、個別対応は諦めてください。 どうしても対応してほしい場合は、前述の、Wikipediaに代わる、 適切なデータソースを探してきてください。 それによっては対応します。
  • なんでフォントを1mnから1mに変更したの?

    • 1mnは「¥」(半角¥記号)の横棒が一本足りないのが気に入らなかったからです。 それ以外の字形については1mよりも1mnの方が良かったんですが。
  • フォントを1mnから1mに変更したんだから、リポジトリ名も変えた方がいいんじゃ?

    • 今後、更にまた別のフォントに変更したり、 複数のフォントを扱う事にする可能性があるので、当分はこのままにします。
    • なお、リポジトリ名を変更する時も、 forkによって別のリポジトリを作成する形にして、 元のリポジトリのURLは残しておくつもりです(リンク切れにならないように)。
  • Miguフォントはどう?

    • フォントとしては非常に良好ですが、 IPAフォントライセンスが付いてるので駄目です。
      • IPAフォントライセンスはライセンス文の表示義務があるので、 ゲームへの組み込み用途には色々と面倒です。
  • ○○というフォントの出来が良いので、同様の手順でビットマップ化してほしい

    • ライセンスがゆるく、ayamadaが気に入れば、 対応するかもしれません(しないかもしれません)。
    • とりあえず、issueの「汎用的に利用できるフォントの探索」スレにて教えてもらえるとうれしいです。
    • もしくは、後述の生成手順を見て自分で生成してみてください (ただし自分用メモにつき解読困難)。
  • 実際の生成手順を教えてほしい

    • 自分用の生成手順メモが devel.md にあります。分かりにくいです。
  • フォント生成用の文字種ファイルを勝手に利用してもいい?

    • どうぞ。「work/chars/」内にある「page1.txt」「page2.txt」あたりが比較的利用しやすいと思います。
      • 「page1.txt」には一部、複数回出現している文字があるので、そこだけ気をつけてください。

既知の問題点

  • 「≠」が「‡」になっている

    • フォント生成に利用している Hiero にて、M+の等幅系フォントはどれも、 「≠」の所属するUnicodeのmathematical operators系文字が、 正しくレンダリングされないのが根本の原因です。
      • M+でもプロポーショナル系フォントでは正しくレンダリングされる。 またM+の等幅系フォントでも、 Hieroのテキスト入力欄に入力した内容はきちんとそのフォントで 「≠」が表示されている。レンダリングだけがおかしい。 M+側の持つパラメータの何かが原因になっていそうな雰囲気だが…。
    • とりあえずの代わりとして、「≠」と幅が同じ文字の内、 一番形が似ている「‡」を表示させておく事にしました。 これが、「≠」が「‡」になっている事の理由です。
  • 「¥」(半角¥)を表示したいのに、バックスラッシュが表示される

    • Unicodeの仕様です。 半角¥を表示したい時は、コード表記で165(U+00A5)を出力してください。 半角にこだわらなくていい場合であれば、全角¥を使うのがよいでしょう。

UnityPackage

実験的に、Unity向けパッケージを作成しました。

  • 現在はpage1版のみです(つまりpage2漢字は表示できません)。通常版は将来対応予定(つまり未定)です。
  • まだ実験段階の為、バージョン上げをさぼる可能性が高いです。

ダウンロード

TODO

  • ゲームでよく使う、utf-8記号文字をもっと追加する予定

    • どれを入れるべきか検討中
  • 複数ページを扱えないライブラリ(Unity系)の為に、どうにかできないか考える

    • テクスチャサイズを1024x2048にしてしまう
      • パフォーマンスが落ちるので、可能ならpower-of-two制約は維持したい (ほとんどのケースで、アトラス化せずに使う事になる為)
    • テクスチャサイズを2048x2048にしてしまう
      • 動作上の問題はないが、領域がもったいない (50%以上のテクスチャ領域が無駄になる)
    • テクスチャサイズを2048x2048にした上で文字サイズを16pxじゃなく20pxにし、 領域を有効活用する
      • サイズが大きくなるのは望ましくない。 せっかくDistance field処理で拡大縮小しても綺麗になっているので、 この16pxを20pxに変更しても、そこまでの効果が出ない。
    • テクスチャサイズを1024x1024のまま、文字サイズを10-12pxにし、 領域を有効活用する
      • Distance field処理をしているとは言え、 10-12pxにまで小さくするとさすがに劣化が激しいので、これは避けたい。 16px前後が一番コストパフォーマンスが良いように思える。
    • 他には?

更新履歴

  • 1.1.0 : 2014/06/18

    • njslyrdic_chado_1.0.0_20140510.zip および jawiki-latest-pages-articles.xml.bz2 2014-Jun-08 07:48:31 のデータを使い、優先順位テーブルを更新
    • http://d.hatena.ne.jp/y-kawaz/20101112/1289554290 にある文字種をまとめて Unicode記号枠として追加
  • 1.0.0 : 2014/04/20

    • ベースフォントを「M+ 1mn medium」から 「M+ 1m medium」(TESTFLIGHT 058)に変更
    • テクスチャを1024x1024二枚に増量
    • Distance field効果のSpread値を1.1から1.2に増量
    • テクスチャ内での文字間隔を以前よりも大きく取るようにする
    • テクスチャに含める文字の選択を、 Wikipediaデータ内での出現頻度によって決定するようにする
    • Unicode記号枠に「¥」165(U+00A5) を追加
    • 一時的に、「≠」の代わりに「‡」を表示させる
  • 0.0.2 : 2014/03/06

    • 「壺」の一番上の1ドット分の列が表示されていなかった問題を修正
    • utf-8ハート二種(9825と9829)、薔、薇、鬱、の五文字を追加
    • mp1mnm16tir_chars.txt (文字種一覧ファイル)を追加
  • 0.0.1 : 2014/03/06

    • githubにて公開開始
  • 0.0.0 : 2013/??/??

    • utf-8の「 ̄」(65507のFULLWIDTH MACRON)が不正だったのを修正
    • 罫線回りのサイズがおかしかったのを修正
    • 「壺」追加

バリエーション

  • mp1mm24tir

    • フォントサイズを24pxにしたもの。まだプロトタイプ。
  • mp1mnm16tir

    • 「M+ 1mn medium」ベースの旧版フォント。1024x1024一枚のテクスチャにJIS第一水準全部を無理矢理詰め込んでいる。
    • サイズ制約により、mp1mm16tirのpage1版はJIS第一水準全部が含まれている訳ではない為、あえて旧版を選ぶケースがあるかもしれないので、残しておく事にした。

License

You can’t perform that action at this time.