@SkyDreamer

Рендер шрифтов в игре: как?

Начну с того, что я делаю свою мультиплеерную игру, с задумкой, преферансом и благородными дамами. И застопорился я на рендере шрифтов... Нашел я в интернете два варианта - векторный шрифт и заранее подготовленный шрифт. Но у них есть минусы:
У первого варинта - хоть шрифт и масштабируется, может быть куча шрифтов, но... Это тяжело, большая нагрузка на видеопамять. И более весомый - такой шрифт можно отображать только в интерфейсе, что для меня не приемлимо.
Второй вариант - нельзя масштабировать, все символы, которые я хочу отображать, должны быть заранее отрендерены в текстуру, а мне нужно обеспечить как можно больше языков.
Но при поисках я нашел упоминание про технологию alfa-testing, вроде бы от Valve.
Может кто-нибудь рассказать о ней?
  • Вопрос задан
  • 3069 просмотров
Решения вопроса 1
@RPG
Первый вариант в принципе не практичен. Не видел ещё реального проекта, который бы так делал.

Технология alpha-testing имеет более популярное название Signed Distance Field (SDF). Но для качественного рендера шрифта с антиалиасингом нужны шейдеры (что в большинстве случаев уже не проблема даже на смартфонах). Это действительно хорошая технология, позволяющая рендерить шрифты любого размера, имея всего одну растровую текстуру, подготовленную специальным образом.

Если требуется поддержка всех языков - лучшим решением всё-таки будет рендер-на-лету в текстуру из векторного шрифта TTF с динамической упаковкой символов по мере надобности (это умеет библиотека freetype-gl). Заранее сгенерировать могучую текстуру конечно можно, но это не всем пользователям понравится, да и ненароком можно упустить какие-то символы...

Ссылки по теме:
Что такое SDF - раскрытая тема на геймдеве - www.gamedev.ru/code/forum/?id=175763
OpenSource программа генерации растровых шрифтов, включая Distance Field (она моя, но не сочтите за рекламу:) - https://github.com/scriptum/UBFG/
Библиотека рендера TTF в OpenGL - https://code.google.com/p/freetype-gl/
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы