(2D)ゲームのベクターベースのフォントとビットマップフォントの違いは?


7

私は多くのゲームがビットマップフォントを使用していることを知っています。ビットマップフォントと比較した場合のベクターベースのフォントレンダリング/操作の利点はどれですか。どのシナリオで最も重要ですか。

この質問に答えるときは、2Dゲームに重点を置いてください。

必要に応じて、いずれかのアプローチを使用するゲームの例を含めてください。

編集: 問題についての経験がある場合は、個人的な好みも含めてください。

考慮すべきいくつかの要因:

  • ゲームで使用されるテキストの量
  • テキストのスケーリング
  • グリフのオーバーレイとアンチエイリアス
  • 一般的なレンダリング品質
  • フォントの色とスタイル
  • ユーザーインターフェイスの要件
  • ローカリゼーション/ Unicode
  • テキストの折り返しとフォーマット
  • クロスプラットフォーム展開
  • 2D対3D

バックグラウンド:

PCをターゲットにした、2Dのシンプルな落下ブロックゲームを開発しています。レベル、スコア、メニューボタンのテキストラベルを追加したいと思います。私はFreeTypeを内部で使用するSFMLを使用しているので、ベクターベースの機能をプロジェクトで簡単に利用できます。

私の見解では、単純なゲームのフォントサイズは変化しないことが多く、ビットマップフォントの方がクロスプラットフォームの問題(フォントフォーマットとフォントレンダリングの品質)の方が簡単です。しかし、ここでいくつかの重要なポイントを見逃していないかどうかはわかりません。特に、最終的なゲームの外観を磨きたいからです。


2
重要な注意:SFMLはFreeTypeを使用してフォントをロードしますが、テクスチャに事前レンダリングするため、実際のレンダリングはビットマップフォントで行われます。これにより、両方のスタイルの長所と短所を組み合わせることができます。
jv42

1
@ jv42:主に、それはあなたに短所を与えます。


1
@JoeWreschnigええ、はい。ただし、レンダリングの速度と処理に必要な時間を除きます。
jv42

私がこれまで取り組んできたすべてのプロゲームは、使用された生成ビットマップを使用していました。これは、それが利用可能な唯一の手法であったか、グラフィックアーティストがそれらをほとんど微調整できるためです。
jv42

回答:


7

ビットマップフォント

利点:

  • OpenGL、DirectX、DirectDraw、さらにはGDI +であっても、既存のコードベースに統合できます。

  • 速い。テクスチャアトラスを使用すると、1回のパスですべてのテキストをレンダリングできます。

  • アーティスト管理。テクスチャアトラスは、手続き的に生成する(フォントスタイルをテクスチャにレンダリングする)か、ファイルからロードすることができます。アーティストは、ゲームを中断することなく、グリフの外観を微調整できます。

短所:

  • 静的テキストにのみ役立ちます。アニメーションテキスト(ポップアップ、回転、スケーリングなど)を使用している場合、さまざまなフォントスタイルをすべて管理するのは面倒です。

  • メモリーホッグ。Arial 12、16、24を太字、斜体、またはその両方で使用する場合は、3(サイズ)* 3(スタイル)= 9のテクスチャマップになります。別のフォントを追加すると、18の異なるテクスチャマップがあります。Unicodeのサポートを追加すると、サイズごとに1024x1024のテクスチャが表示されます。主にモバイルプラットフォームでの問題。

ベクターベースのフォント

編集:私はこれをあまり明確にしませんでしたが、ベクターベースのフォントの一般的な実装は、それらをテクスチャアトラスにレンダリングし、ビットマップのように使用することです。これにより、ビットマップフォントと同じ速度の利点が得られます。

利点:

  • 簡単操作。グリフのコントロールポイント間でラスタライズしているため、これらのコントロールポイントを自由に変形できます。アーティストにとって非常に柔軟です。

短所:

  • スロー。変換を考慮する場合、それは、各制御点を変換し、それらの三角形のセットをラスタライズする必要があることを意味します。

  • 実装が難しい。グリフをラスタライズすることは正しく行うのが困難です。

他の人はこれをどのように行うのですか?

このページを見てください:

http://www.microsoft.com/typography/OTSPEC/TTCH01.htm

これが、MicrosoftがWindows 95以降で解決した方法です。基本的に:

  • フォントデザイナーがアウトラインを提供します(ベクターベース)
  • すべてのポイントサイズ(8、10、12など)に対して、一連のグリッドフィッティング指示が追加されます

これは、ビットマップの速度と組み合わせたベクターベースのフォント(操作が簡単)の利点を提供します。

最後に、3番目のオプションを確認することをお勧めします。

https://steamcdn-a.akamaihd.net/apps/valve/2007/SIGGRAPH2007_AlphaTestedMagnification.pdf


3
クラップこれは、私が入力しているすべてのことでしたが、恐ろしい「1つの新しい答え」ポップアップが表示され、この素晴らしい答えが表示されました...!:)
ロイT.

今日あなた、明日私。;)
knight666

2
「グリッドフィッティング指示」(通常は「ヒンティング」と呼ばれます)は、ベクターフォントのレンダリングを遅くする原因の1つです。パフォーマンスをさらに犠牲にして、表示品質を向上させます。

1
「テクスチャへのレンダリングは最適化です。」-現実的には、今日、最初にテクスチャにレンダリングする必要があるものをレンダリングするには。最初にテクスチャにレンダリングせずにOpenGLと相互運用する適切なTrueTypeフォントレンダラーについては知りません。(つまり、制御点を頂点シェーダーにフィードし、フラグメントシェーダーにラスタライズとヒントの処理を任せます。)頂点シェーダーとフラグメントシェーダーに(TT互換ではない)スプラインを処理させると、興味深い作業がいくつかありますが、一般的ではありません。そしてかなり進んだ。

2
私がやったことは、これが重複している質問への私の回答に記載されています。(そして、私が "did"と言ったときは、 "本を一度読んだ"ではなく、 "店に行ってこれを行っているゲームを購入できる"という意味です。)

1

ビットマップフォントよりもベクター/トゥルータイプフォントを使用する利点は、アプリケーション内の柔軟性が大幅に高まることです。フォントを任意のサイズで描画し、斜体にし、太字にして、いくつかの派手な変換効果を追加すると、すべて最高の品質になります。

多くのプロフェッショナルなベクターフォントが世に出ており、それらの多くは数千のグリフと多くのメタデータを持っているため、非ASCII文字列の表示を処理するのに非常に有益であり、翻訳に役立ちます。

パフォーマンスの違いは、グリフを正しくキャッシュしていれば、フォントのロード中にのみ表示されます。(ただし、SFMLレンダーコードは最適化されていません。ただし、グリフの読み込みとキャッシュは適切に行われます。)

FreeTypeには独自のラスタライザとフォントローダーがあり、システムラスタライザを使用しないため、品質とフォントフォーマットは問題になりません。


柔軟性についてのあなたのポイントを見ることができます。しかし、異なるプラットフォームではフォントのレンダリングに違いがあり、プラットフォーム間で正確な寸法を実現するのが難しいと思います。ビットマップフォントを使用すると、フォントがまったく同じに見え、常に同じピクセル数を占有することがわかります。
jmp97

いいえ、Freetypeはすべてのプラットフォームとデバイスで同じです。同じフォントと同じサイズを使用すると、同じ結果が得られます。同じ種類の信頼性があります。
API-Beast
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.