Adaptive MSDF

私がSqueak仲間に入れてもらったきっかけの一つは、ビットマップのテキストしかなかったSqueakを改良して、TrueTypeフォントを使ったテキストが使えるようにしたことではないかと思っているわけではあります。

最近は3Dグラフィックスのプログラミングをしているのですが、我々のシステムでも、読みやすいテキストが必要ということで、世の中の人が使っているMultichannel Signed Distance Fieldというやつに基づくテキストを実装して見ました。

ところで、この手法は文字サイズが小さくなると読みにくくなるという問題が知られています。他の人もアダプティブレンダリング方法を切り替えて、サイズが小さい時はあらかじめ作っておいたビットマップをテクスチャとして使う方法に切り替えているわけなのですが、具体的にその情報をどこにしまっておこうかなと思っていたところ、例によって賢い同僚が「MSDFはRGBしかつかっていないのだから、Aチャネルにしまっておいて、shaderで切り替えて使えば良い」と言ってくれました。なんとシンプルで賢いのか。

というわけで、早速その手法を実装すると、期待通りにズームインしてもズームアウトしても読みやすいテキスト部品が作れました。これで心置きなくスクリプティングシステムを作っていけます。めでたしめでたし。