XaeroX писал: В волатиле битмаповые шрифты, и вполне чёткие.
Это ж прошлый век. Современный движок с заготовленными картами шрифтов. Они как минимум должны при выборе группы/стиля/размера шрифта динамически растеризоваться.
XaeroX писал: В MacOS. Все шрифты волатилы растеризованы в MacOS.
Расскажи пожалуйста подробнее. Это утилита какая то?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro писал: И ещё сразу вопрос на засыпку, будет ли возможность подключать .ttf шрифты?
Ксаш налету генерит шрифты из ttf. А мыльные они совсем по другой причине - я масштабирую итоговую картинку, вместо того чтобы пересчитывать разрешение. То есть, для других point size будут сгенерены новые чёткие шрифты, просто на данный момент код отрисовки меню не делает запроса на них. То есть ещё раз - шрифты генерятся из ttf и кэшируются в виде растровых. Это всё происходит налету и прозрачно для пользователя.
Добавлено 08-03-2025 в 10:19:
Вы все наверное читали эти увлекательные заметки на Хабре и смешные рассказы на башорге, как наследование одних объектов от других приводило к совершенно удивительным и непредсказуемым эффектам. Ну из того, что запомнилось лично мне - в какой-то военной стратегии надо было сделать окружающую живность, типо свиней, коров и птиц. И их унаследовали от солдат. В результате чего хрюшки оказались патриотичными и переодически пытались атаковать неприятеля.
Ну так вот, можно сказать, что в XashNT теперь тоже есть такой класс.
Я унаследовал растровые шрифты от класса модели. Однако, благодаря изначально грамотно продуманной и хорошо спланированной архитектуре, это не просто сделано, чтобы заткнуть компилятор, который не хочет собирать проект, а напротив - сработало на композицию и наделило шрифты всеми свойствами полноценной модели. Теперь буквы шрифтов потенциально можно рендерить в 3D-пространстве, собирать для них освещение, трассировать буквы и символы, даже лайтмапу можно наложить.
Универсальный контейнер, в которой хранятся шрифты не отличается от таковых для хранения моделей и тоже наследует все их свойства.
То есть в данном случае всё получилось правильно.
Дядя Миша писал: То есть в данном случае всё получилось правильно.
Но они по прежнему мыльные
Добавлено 08-03-2025 в 16:32:
Цитата:
XaeroX писал: Да, в SDK волатилы будет утилита. Но смысл именно под макосью её запускать. Там встроенный в ось растеризатор работает через обвязку QT.
Блин, если я захочу такое сгенерировать, что мне нужно будет сделать?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Ну представь мне сидеть и под каждое разрешение вручную подбирать раскладку элементов в меню, этож с дуба рухнуть. Такого даже в винде и то нет. Ну хочешь - оно съедет в верхний левый угол и будет маленькое. Устроит тебя такое?
Дядя Миша писал: Ну представь мне сидеть и под каждое разрешение вручную подбирать раскладку элементов в меню, этож с дуба рухнуть. Такого даже в винде и то нет. Ну хочешь - оно съедет в верхний левый угол и будет маленькое. Устроит тебя такое?
А зачем вручную? У тебя якорей чтоле нет? И в процентах считать не умеет? Неужели нельзя высчитать какой процент на экране оно занимает, и из этого процента от разрешения получить нужное значение в пикселях и прочие скейлы и сдвиги? Ну или по тупому атлас в 2к генерить для всех разрешений. Тоже конечно мыльно будет, но не так сильно, жить можно.
В UI обязательно все элементы в процентах считать и якоря задавать. А то со сдвигами в пикселях там реально жопа будет. Вот тут можешь почитать про адаптивную верстку: https://unityhub.ru/guides/sozdanie...i-interfejsa_35
Цитата:
XaeroX писал: Ну грубо говоря - написать простейший растеризатор шрифтов в битмапы на Qt и запустить под макосью, и там сохранять картинки, а не под виндой.
А какая разница? Под виндой или макосью будет оно сохранять? Это же твой растеризатор.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro писал: Блин, если я захочу такое сгенерировать, что мне нужно будет сделать?
В браузере гугл хром создать канвас, настроить шрифты как тебе нужно, отрисовать через скрипт, сохранить в картинку. В гугл хром один из лучших растеризаторов, работает везде одинаково, делается не сложно.
FiEctro писал: Неужели нельзя высчитать какой процент на экране оно занимает, и из этого процента от разрешения получить нужное значение в пикселях и прочие скейлы и сдвиги?
Как я тебе переведу POINTSIZE в функцию от масштаба разрешения? Оно же нелинейное.
Добавлено 09-03-2025 в 10:43:
Это Кармаку легко было, у него шрифты с фиксированными отступами и все буквы квадратные.
Немного теоретической инфы выдам, чтобы вы поняли суть проблемы.
Итак, в Core Profile невозможно ничего нарисовать как прежде - забиндить текстуру, вызвать glBegin и погнали. Это в сущности невеликая проблема.
Когда я только-только начинал строить XashNT я уже исходил из того, что буду переводить его на Core Profile, поэтому у меня абсолютно весь рендеринг строится на VAO+VBO+IBO и на шейдерах. Но это справедливо только для трёхмерного рендеринга. Двухмерный в своё время я тоже перевёл на VAO+VBO, однако конвейер остался фиксированный. Не было у меня времени тогда с этим возиться, а ничего сложнее смены текстуры и задания цвета от двухмерных картинок не требовалось, да собственно, в рамках меню и худа - не требуется и по сей день. Хорошо, теперь проблема так сказать получила максимальный приоритет в рамках миграции на Core Profile и я её решаю. В 2D мы имеем дело с двумя сущностями: шрифты (под шрифтом разумеется что угодно, как буквы, так и набор именованных иконок), и просто картинки. Теперь, собственно, самая суть:
В новом ксаше абсолютно всё рисуется через систему материалов, кроме того, что рисуется через фиксированный конвейер. Поскольку в Core Profile этого функционала уже нет, нам очевидно следует перевести всё на систему материалов. И тут возникают известные трудности. Во первых материал, сам по себе не может существовать в вакууме. Он слинкован с сущностью, для которой он принадлежит, причём эта сущность непременно должна наследоваться от базового класса модели.
Тогда мы можем запрашивать для нашего материала кучу всяких полезных вещей - освещение, амбиент-кубы и протчее. То есть ситуации, когда материал не слинкован с моделью, попросту не предусмотрено.
Для шрифтов это требование довольно легко соблюсти - достаточно унаследовать класс шрифта от класса модели. Технически шрифт сам по себе и есть модель - он тоже использует юниформ-контейнер для хранения данных и всё такое. Тут проблем нет. А мелкие шероховатости для такой имплементации элементарно решаются в процессе отладки.
То есть система сразу заработает как надо, а если что-то вдруг будет не так, исправится после очередного бета-тестирования.
Совсем иная ситуация с рендерингом отдельно стоящих картинок.
Картинка очевидно не может быть сущностью, типа модели. Уже хотя бы потому что в материале этих картинок может быть сколько угодно загружено. Ну то есть, логическая нестыковка.
Поэтому я принял следующее решение: любые картинки будут загружаться как шрифты. То есть с тем же именем, создавать для себя уникальный материал ну и всё такое. И представлены будут как шрифт с одной буквой ну или с одной иконкой, если хотите.
К тому же, поскольку там целый набор взаимодействия с ректанглами, к этой сущности куда проще и удобнее прикрутить динамические текстуры с обновляемыми пикселями. То есть концепция достаточно стройная и надёжная. Но не без подводных камней, о которых я расскажу немного позже.