[Из песочницы] Расставляем точки над Ы

8816df59a76046fe9cc635e6502ab6ca.jpg
Готовлю сейчас текстуры с буквами для нашей игрушки со словами. А у таких игр есть одна особенность: не переведешь игру на какой-то язык — не видать покупок от носителей этого языка. Поэтому релиз игры будет локализован на 42 языка. Это много-много разных букв, каждая из которых обрабатывается в фотошопе и вставляется в текстуру, место в которой — на вес золота. Приходится вникать в устройство современных алфавитов, чтобы брать только те буквы, которые действительно нужны в современных словах.

Погрузившись в этот процесс, я открыл для себя, на сколько фраза «расставить точки над и» не полна. Точки расставляют далеко не только сверху.

Количество вариантов написания латинских букв в Юникоде поистине велико. Каких только черточек, точек и загогулин рядом с буквами там нет. Это, в основном, диакритические знаки, показывающие, что эту букву надо читать как-то иначе. Как правило, со временем, количество диакритических знаков в языках уменьшается. Люди стараются упрощать алфавит. Неужели, после столетий упрощения алфавитов все еще остались необычные варианты? Да, и еще какие!

Давайте начнем с буквы i. Фраза «расставить точки над И» родилась в средние века, когда писцы переписывали тексты курсивом — без отрыва пера. При этом:

  • Буква i без точки (просто короткая палочка) сливалась с другими буквами, поэтому ее стали выделять точкой сверху.
  • Так как слово часто писали слитно, то все точки расставлялись после написания основной части слова.

Так и зародилась эта фраза-пословица, которая означает завершенность какого-то действия или отсутствие недоговоренного и т.д. Давайте посмотрим, как пишутся слова с буквой i без точек и эти же слова, но уже с точками над i. Действительно ли есть смысл в этих точках?

e99a9b90ed2c4cbb9ef59a417d910623.jpg
Хотя писарям вряд ли доводилось писать именно эти слова, но точки явно помогают разглядеть коротенькие палочки. А бывают ли две точки над i? Да, во французском буква ï используется до сих пор.

c821248d818e49f1aada74915630f005.jpg
В русском языке буква i употреблялась до реформы 1918 года. Более того, было время, когда ее писали с двумя точками! Получается, что в русском языке тоже расставляли точки над И. А вот еще один интересный момент: буква ы раньше состояла из двух букв: ъi. Поэтому можно сказать, что писцы расставляли точки и над буквой Ы!

Бывают такие языки, где приходится расставлять очень много точек. Среди языков, с которыми я имел дело, лидером по количеству точек сверху является финский. Вот смотрите:

f66f08d00507482792eecaf2531b4012.jpg
Три слова и 26 точек над буквами! Но точки ставят не только сверху. Например, в каталонском языке точка может быть поставлена между буквами одного слова.

c28301b855ed457fa6f12bbac0ba0888.jpg
Сверху точку ставят, сбоку ставят, неужели не ставят снизу? Во вьетнамском ставят!

9468893b22a04ed8a55fdb3b4b2e23d4.jpg
Вьетнамский язык, кстати, хорошо подходит в случае, если хочется порисовать у латинских букв много красивых закорючек. Ну не прекрасно ли?

1c4687a0b4ae4be69a0a58e954ad27be.jpg
Кроме точек существует еще множество других модификация букв, например, перечеркивание. Возможно некоторые буквы сами по себе не нравятся носителям языка и это отторжение выражается в зачеркивании. Смотрите сами:

9f7fa31ee13b423fa68c5189d2f8174e.jpg
Это конечно шутка, в каждом языке история появления перечеркнутых букв — своя.

В кириллице то же есть интересные модификации букв. Например, в казахском языке у некоторых согласных появляются ножки! Ножки есть и в русском алфавите у букв Д, Ц и Щ, но это как-то привычно, а вот несимметричная ножка у букв К и Н — непривычно.

a7917a091b6047f7a095b1904c667430.jpg
Изучение алфавитов — на удивление увлекательное занятие. Как будто погружаешься в другие миры. Возможно в следующей жизни я бы вполне мог стать лингвистом, а пока мне надо «расставить все точки над Ы» — закончить подготовку текстуры 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

      Дизайн игры требует оформления букв, которое не просто сделать программно, а вот в фотошопе — легко.

© Habrahabr.ru