うどんてっくメモ

技術的なメモをまったりと

【Unity】TextMeshProで一部の文字だけ精度を上げて綺麗に描画したい時の工夫

TextMeshProでUIを作成していて「どうしてもこの部分は大きいサイズで綺麗に文字を見せたい」というケースは多々あると思います。
TextMeshProを使用する場合、文字の精度はFontAssetにおけるテクスチャ上での文字のサイズを表すSampling Point Sizeに依存します。 小さめのSampling Point Sizeで設定したFontAssetを使用しても大きいサイズの文字は描画可能ですが、その綺麗さに影響します。
次の画像を見ればエッジのがたつきなどがわかるかと思います。

これに対応するにはSampling Point Sizeを上げたFontAssetを使用すれば良いのですが、当然必要となるテクスチャのサイズも上がってしまい、メモリへの懸念が大きくなります。 特に、すべての文字出力に使うフォントで文字サイズを上げるとなるとそれ相応のテクスチャのサイズ拡大が見込まれます。
源ノ角ゴシックこちらのサイトに乗っている文字を全て載せた場合を検証した所、4KテクスチャでSampling Point Sizeは31、8Kというサイズまで上げてようやくSampling Point Sizeは84となりました。

そうすると、通常使いするFontAssetをいじらずに調整したくなってきます。このような場合、特定の部分のみに使用する文字だけを集約したFontAssetを利用するという工夫が可能です。
限られた文字のみであれば、大きいSampling Point Sizeでもテクスチャのサイズを抑えられます。Fallbackには通常使いするFontAssetを指定しておけば、想定外の文字が表示されることも防止できます。

使用する文字が限定できること、開発上使用する部分の設定に気を使うこと、開発途中で文字が増えたら対応することなど、色々と制約も存在しますが、覚えておいて損はないテクニックです。 演出の都合など、どうしても大きい文字を出したいケースなどで使ってみてください。