[Из песочницы] Расставляем точки над Ы
Готовлю сейчас текстуры с буквами для нашей игрушки со словами. А у таких игр есть одна особенность: не переведешь игру на какой-то язык — не видать покупок от носителей этого языка. Поэтому релиз игры будет локализован на 42 языка. Это много-много разных букв, каждая из которых обрабатывается в фотошопе и вставляется в текстуру, место в которой — на вес золота. Приходится вникать в устройство современных алфавитов, чтобы брать только те буквы, которые действительно нужны в современных словах.
Погрузившись в этот процесс, я открыл для себя, на сколько фраза «расставить точки над и» не полна. Точки расставляют далеко не только сверху.
Количество вариантов написания латинских букв в Юникоде поистине велико. Каких только черточек, точек и загогулин рядом с буквами там нет. Это, в основном, диакритические знаки, показывающие, что эту букву надо читать как-то иначе. Как правило, со временем, количество диакритических знаков в языках уменьшается. Люди стараются упрощать алфавит. Неужели, после столетий упрощения алфавитов все еще остались необычные варианты? Да, и еще какие!
Давайте начнем с буквы i. Фраза «расставить точки над И» родилась в средние века, когда писцы переписывали тексты курсивом — без отрыва пера. При этом:
- Буква i без точки (просто короткая палочка) сливалась с другими буквами, поэтому ее стали выделять точкой сверху.
- Так как слово часто писали слитно, то все точки расставлялись после написания основной части слова.
Так и зародилась эта фраза-пословица, которая означает завершенность какого-то действия или отсутствие недоговоренного и т.д. Давайте посмотрим, как пишутся слова с буквой i без точек и эти же слова, но уже с точками над i. Действительно ли есть смысл в этих точках?
Хотя писарям вряд ли доводилось писать именно эти слова, но точки явно помогают разглядеть коротенькие палочки. А бывают ли две точки над i? Да, во французском буква ï используется до сих пор.
В русском языке буква i употреблялась до реформы 1918 года. Более того, было время, когда ее писали с двумя точками! Получается, что в русском языке тоже расставляли точки над И. А вот еще один интересный момент: буква ы раньше состояла из двух букв: ъi. Поэтому можно сказать, что писцы расставляли точки и над буквой Ы!
Бывают такие языки, где приходится расставлять очень много точек. Среди языков, с которыми я имел дело, лидером по количеству точек сверху является финский. Вот смотрите:
Три слова и 26 точек над буквами! Но точки ставят не только сверху. Например, в каталонском языке точка может быть поставлена между буквами одного слова.
Сверху точку ставят, сбоку ставят, неужели не ставят снизу? Во вьетнамском ставят!
Вьетнамский язык, кстати, хорошо подходит в случае, если хочется порисовать у латинских букв много красивых закорючек. Ну не прекрасно ли?
Кроме точек существует еще множество других модификация букв, например, перечеркивание. Возможно некоторые буквы сами по себе не нравятся носителям языка и это отторжение выражается в зачеркивании. Смотрите сами:
Это конечно шутка, в каждом языке история появления перечеркнутых букв — своя.
В кириллице то же есть интересные модификации букв. Например, в казахском языке у некоторых согласных появляются ножки! Ножки есть и в русском алфавите у букв Д, Ц и Щ, но это как-то привычно, а вот несимметричная ножка у букв К и Н — непривычно.
Изучение алфавитов — на удивление увлекательное занятие. Как будто погружаешься в другие миры. Возможно в следующей жизни я бы вполне мог стать лингвистом, а пока мне надо «расставить все точки над Ы» — закончить подготовку текстуры 2048×2048 с буквами и доделать саму игру.
Комментарии (7)
3 октября 2016 в 09:03
+1↑
↓
Было бы интересно узнать ваше решение этой проблемы. Сохранили отдельно точку (и прочие закорючки) и уже при растеризации рисуете букву не одним глифом, а комбинацией из нескольких?3 октября 2016 в 09:10
0↑
↓
Пока решение «в лоб» — сохраняю все варианты букв. Так гораздо проще парсить их в игре. Но заполненность текстуры сейчас уже 90%. Скорее всего придется, что-то придумывать…3 октября 2016 в 09:16
0↑
↓
Я так понимаю, это какая-то онлайн игра, где пользователи могут друг с другом общаться? Иначе, можно для каждого языка хранить алфавиты в отдельных текстурах, даже удобнее будет. В принципе, даже если одновременно разные языки используются, нет проблем в хранении алфавитов в отдельных текстурах. Несколько лишних drawcall и переключений текстур принципиально не повлияют на производительность, а вот вам жизнь сильно упростят.3 октября 2016 в 09:28
0↑
↓
Да, несколько вариантов текстур — вариант для «маргинальных» языков (которых не много). Проблема в том, что будет масса пересечений для европейских языков, которые имеют общую основу из одинаковых букв. Одним их возможных путей оптимизации является выделение основы в отдельную «большую» текстуру, и создание нескольких мелких текстур — локализаций. Вот, как раз думаю об этом.3 октября 2016 в 09:41
0↑
↓
Если у вас уже есть поддержка отдельных текстур, зачем вообще беспокоиться о взаимопересечениях? Тем более, что начертание «одинаковых» букв сильно зависит от используемого шрифта. вот возьмёте в следующей версии другой набор шрифтов и начертание уже будет неправильным.
Но вот конкретно по вашей проблеме я в первом сообщении предложение выдвинул, что буквы «с особенностями» рисовать несколькими спрайтами. Но это предполагает чуть ли ни ручной препроцессинг и пользу от него вижу только в условиях критических ограничений на объём видеопамяти. Т.е. на современных PC даже заморачиваться с этим не стал бы.
3 октября 2016 в 09:36
0↑
↓
А зачем вообще весь этот велосипед с сохранением глифов в текстуру? Есть какие-то платформы, которые не могут сами нормально отрендерить текст? Или у вас какой-то особый шрифт?P.S. «Не ужели» → «Неужели»
3 октября 2016 в 09:43
0↑
↓
Дизайн игры требует оформления букв, которое не просто сделать программно, а вот в фотошопе — легко.