ゲームはアジアのユニコードテキストのレンダリングをどのように処理しますか?


8

私は現在、ゲームエンジンにテキストレンダリングを実装している最中です。AngelCodeのBMfontを使用してフォントテクスチャを生成し、OpenGLで各文字のテクスチャクワッドをレンダリングすることにしました。これは、FreeFont(特にFreeMono)でサポートされているすべてのグリフをレンダリングする場合でも、日本語をレンダリングしようとするまではうまくいきました(私の選択した日本語フォントはGoogleが提供するNotoです)。

FreeMonoでサポートされているすべてのグリフを16pxでレンダリングすると、1024x1024の8ビットテクスチャが1つ生成されます。能登日本語でサポートされているものをすべて同じサイズでレンダリングすると、テクスチャの数は13倍になり、このサイズではほとんどのグリフが窮屈すぎて判読できません(日本語を読むことはできませんが、できれば、まだこのテキストを読むのに多くの問題があります)。

私の質問は2つあります。

1)ゲームやモバイルアプリは、小さな日本語のテキストをどのように処理しますか?彼らは漢字のサブセットに固執しますか、特別なフォントを使用しますか、それとも最小フォントサイズはありますか?

2)ゲームは通常、日本語、中国語、韓国語、およびその他の言語で必要とされる非常に多くのグリフをどのように処理しますか?彼らはFreeType(または類似のもの)を使用してテキストをオンザフライでレンダリングしますか?

注:私はメイリオ(私のゲームで使用するためのライセンスを持っていません)を試してみましたが、結果は16pxではるかに読みやすくなりました(まだ窮屈です)が、すべてに適合するには14のテクスチャが必要でした。

回答:


6

私はfreetypeライブラリ(http://www.freetype.org/)を使用してfreetypeフォントからグリフをロードし、次にビンパッキングを使用して、ランタイム中にグリフテクスチャ/アトラスを生成します。これは、freetype-glが行う方法と似ています(https ://code.google.com/p/freetype-gl/)。

ゲームが初期化されると、ASCII範囲の印刷可能な文字でグリフアトラスを生成します。このアトラスはゲーム中に変更されません。ASCII以外の文字には追加のアトラスが使用されます。

文字列が描画のためにキューに入れられるたびに、まだロードされていないグリフがあるかどうかを確認します。このようなグリフが見つかった場合は、グリフアトラスをダーティとしてマークし、レンダリングする前にグリフアトラスを再生成します。アトラスがいっぱいの場合、ASCII以外のグリフは、一定の時間/フレームの間使用されていないと削除されます。

オンザフライでグリフをロードしてグリフアトラスを再構築することにより、特定のオーバーヘッドが発生しますが、その一方で、フォントでサポートされているどのグリフもこのシステムで使用できます。

それから、私はまだテキスト以外の多くのものを描いていません...


5

私が取り組んだゲームでは、中国語、日本語、韓国語(まとめてCJKと呼ばれます)で使用される文字のサブセットを、ゲームでテキストを表示するために必要な文字だけに制限しました。

つまり、考えられるすべてのキャラクターを詰め込むことを試みたわけではありません。ローカリゼーションチームからCJKテキストのデータベースを取得し、それを渡して、テキスト内で少なくとも1回発生したすべてのUnicodeコードポイントを見つけ、BMFont構成ファイルを生成して、これらの文字のアトラスをレイアウトしました。(すべて自動化されていたため、新しいlocドロップを取得するたびに、必要に応じて文字とフォントのリストを再生成できました。)

ご想像のとおり、これにより必要な文字数が大幅に減少します。また、DXT1を使用してフォントビットマップを圧縮しました。これは、テキスト(アンチエイリアス処理されている場合でも)に非常に適しています。BMFontには、画像の4つのカラーチャネルすべてを個別のページとして使用するオプションもあります(したがって、ページあたりの文字数が4倍になります)が、圧縮ではうまく機能しないため、最終的には使用しませんでした。

フォントサイズはわかりません。CJKを読んでいて、小さすぎるかどうかを教えてくれる友達がいない場合は、CJK字幕付きの映画を見て、テキストの大きさを知ることができます。


入力いただきありがとうございます。ユーザーがテキストの入力を許可されている場合はどうなりますか?たとえば、プレーヤーの名前を入力したり、オンラインゲームのチャットボックスを入力したりします。
ハイドンV.ハラッハ2014

@ HaydnV.Harachええ、テキストの入力は問題です。チャットの場合、1000の最も一般的な漢字、またはそのようなものに制限することが機能する可能性があります。これらの言語について詳しく知っている人に、それが実行可能かどうか尋ねる必要があります。プレーヤーの名前については、FreeTypeで一度レンダリングし、ビットマップをキャッシュしてレンダラーで追加の「キャラクター」として使用できます。
ネイサンリード
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.