解像度に依存しないテキストのレンダリング


11

ゲームで解像度に依存しないテキストを描画する方法が必要です。つまり、テキストを拡大表示して、ピクセルアーティファクトを表示しないようにする必要があります。

誰も私がそれについてどうやって行くことができるかについて何か提案をすることができますか?


ラスタライズされたフォントではなく、ベクターベースのフォントのメソッドを調べる必要があると思います。私はその問題の専門家ではないので、私は答えを知っているだろう誰かに任せます。
レイデイ

回答:


7

これを行うには、3つの一般的な方法があります。アーティファクトを完全に排除することではなく、無制限のメモリまたはプロセッサ時間がない限り不可能ですが、既存のコードおよびターゲットプラットフォームに適合するようにアーティファクトを最小限に抑える方法です。

まず、フォントラスタライザ(通常はFreeType)を使用して、拡大するときに必要なサイズでフォントをラスタライズします。これはスクリーンショットでは見栄えがよくなりますが、非常に遅くなります。サイズをキャッシュすることで速度の低下を解決できますが、その場合、メモリが非常に消費されます。また、静的な表示でグリフを適切に表示するには、グリフを不均一にスケーリングする必要があるため、動きがあまりよくありません。それでも、十分なメモリを備えたプラットフォーム(PCなど)を使用していて、スケールが10pxから30pxなどの小さな範囲に制限されている場合はオプションです。この方法は、それだけで多くのキャンディーを受け入れることもできません。

次に、テキストをメッシュとして保存できます。GLTTのように、これを行うためにいくつかのライブラリが存在しますが、独自に作成することもできます。これでピクセルアーティファクトはなくなりましたが、3Dゲームの他のメッシュと同じように、非常に近くでズームインすると、ポリゴンアーティファクトが生じます。頂点シェーダーを適用したり、メッシュを他の世界の描画とインターリーブしたりできるため、メッシュテキストは目の保養になります。メモリとCPUがかなり軽量で、標準のメッシュであるため、コストを簡単に測定できます。通常のスプライトベースの2Dレンダリングパイプラインに統合するのは面倒です。

3番目に、距離フィールドをピクセルシェーダーと組み合わせて使用できます。これは現在人気のある比較的新しい手法で、シンプルなシェーダーを使用して既製のテクスチャをサンプリングし、ビデオカードの「無料」バイリニアフィルタリングを使用してグリフをきれいに拡大します。それは他の方法と比較してほとんど、そして簡単に予測できるメモリを使用します-フォントごとの文字セットごとに0.5MBから1MBのテクスチャ。スプライトベースであるため、スプライトベースのレンダリングパイプラインにうまく適合します。各グリフはテクスチャ化されたクワッドです。ピクセルアーティファクトは生成されますが、テクスチャをスケーリングする他の方法と比較するとごくわずかです。ピクセルシェーダーが利用できない場合の固定機能のフォールバックもありますが、テキストは非常にエイリアス化されます。サンプリングはピクセルシェーダーで行われるため、アウトラインやシャドーイングなど、安くて見栄えがします。


3

シェーダーを使用して解像度に依存しない曲線をレンダリングすることについて、LoopとBlinnによるMicrosoft Researchの研究記事もあります。提示されている手法を使用して、解像度に依存しない方法でTrueTypeテキストをレンダリングすることをお勧めします。


1

曲線と線の組み合わせからフォント文字を作成する必要があります。次に、実行時に適切な詳細レベルでジオメトリに変換します。

幸い、ほとんどのフォントはすでにベジエ曲線から作成されています。曲線データを取得するには、標準のWindows GetGlyphOutline()関数を使用してそれらを抽出するだけです。

PInvokeなしでC#からその曲線データを取得できるかどうかはわかりません。


1
このクロスプラットフォームを作成し、PInvokeのことを気にしないために、GetGlyphOutlineが読み取るデータ(このSOの質問を参照)をいくつかのカスタム形式にダンプするツールを記述して、カスタム保存されたグリフデータを単にロードするための、ゲームコード内のいくつかの単純なファイルI / O。
Ricket

0

あなたはfreetypeを見てみたいかもしれません。あなたのプラットフォームで利用できるのか、ライセンスが適用できるのかはわかりませんが、True-Typeやその他のベクターフォントをレンダリングするためのかなり優れたオープンソースライブラリです。私は、フォントを美的に楽しい方法でレンダリングするために、巧妙な弁護士のコードをかわす必要があったと思います。真のタイプの方法は、標準の単純なアンチエイリアスを使用する場合のように重要なフォント機能(垂直やセリフなど)がぼやけないように、レンダラーにヒントを提供するために曲線上のバイトコードを含みます。その技術は特許を持っているので、フリータイプの人々は仕事をする何か他のものを考え出さなければならなかった、そしてアップルの恐ろしい弁護士獣(私は思う)を呼び出さなかった。とにかく、法的なことはさておき、フリータイプを調べてみてくださいhttp://freetype.sourceforge.net/index2.html

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.