Ghost2
Вот что даёт простая сортировка по высоте, по факту самый оптимальный результат. В случае шрифтов достаточно сортировать по size Y.
g-cont
> У меня наилучшие результаты получались вот с такой формулой:
Это то и так очевидно. Ты лучше расскажи как найти лучшее место для вставки ещё 1 спрайта хотябы за ln N
samrrr
> Это то и так очевидно. Ты лучше расскажи как найти лучшее место для вставки ещё
> 1 спрайта хотябы за ln N
Добавлять последовательно в новый атлас, как 100 или типа того наберется, то перестроить весь атлас.
betauser
> Добавлять последовательно
Ну ну, давай подробнее, что значит последовательно.
samrrr
> Ну ну, давай подробнее, что значит последовательно.
Ну первая мысль - это иметь несколько атласов на определенные размеры изображений. Например, первый картинка максимум 32x32, второй 64x64, третий 128x128. Выровненные сетки, не упакованные. Постепенно заполняем их. Как только принимаем решение, что пора бы уже паковать, то в дополнительном потоке клеим из них упорядоченный сет атласов. Как досчитается, переключаемся на него.
betauser
> Ну первая мысль - это иметь несколько атласов на определенные размеры
> изображений. Например, первый картинка максимум 32x32, второй 64x64, третий
> 128x128. Выровненные сетки, не упакованные. Постепенно заполняем их. Как только
> принимаем решение, что пора бы уже паковать, то в дополнительном потоке клеим
> из них упорядоченный сет атласов. Как досчитается, переключаемся на него.
Это делает применение атласов практически бессмысленным в моем случае. У меня целевая платформа - raspberry pi 3, там переключение текстур - долгая операция, поэтому в атлас лучше упаковывать так чтобы как можно реже переключать текстуры, а не так чтобы память экономить
Huldra
> Это делает применение атласов практически бессмысленным в моем случае. У меня
> целевая платформа - raspberry pi 3, там переключение текстур - долгая операция,
> поэтому в атлас лучше упаковывать так чтобы как можно реже переключать
> текстуры, а не так чтобы память экономить
Можно все атласы хранить в одной текстуре (или массиве текстур). Типа вот тут в левой верхней части у нас сетка для изображений 32x32, а вот тут левее для 64x64. С массивом текстур проще, т.к. третье измерение как дополнительная адресация.
Ну это про динамический случай. Статичный расчет один раз упаковали всё и ну и всё.
в 2048x2048 слишком много не вместить
samrrr
> Ты лучше расскажи как найти лучшее место для вставки ещё 1 спрайта хотябы за ln
> N
А смысл? Вон тебе выше атлас показали. Сколько там глифов? 150 штук? Много ты сэкономишь на суперпупер алгоритме?
g-cont
> Если бы они были однородны, тогда бы и упаковщик не понадобился. Для
> моноширинного шрифта, он к примеру не нужен.
+/- это значит что нет чрезмерно длинных картинок на фоне относительно квадратных.
samrrr
> Ты лучше расскажи как найти лучшее место для вставки
У меня никаких идей по оптимизации формирования атласов. Только тупой перебор.
betauser
Чем ты нагенерил свои глифы, что они 70% пустого места имеют? Я вон в freetype получал нормальные глифы без пустого места. https://gitlab.com/nikitasamoukov/genglyphs
samrrr
> Чем ты нагенерил свои глифы, что они 70% пустого места имеют? Я вон в freetype
> получал нормальные глифы без пустого места.
> https://gitlab.com/nikitasamoukov/genglyphs
Это NeoAxis Engine! 70% пустого места непонятно где нашлось, между буквами нужно отступ для мипов, чтобы в 3D рисовать.
betauser
> Это NeoAxis Engine! 70% пустого места непонятно где нашлось, между буквами
> нужно отступ для мипов, чтобы в 3D рисовать.
тогда уж сразу sdf делать без всяких мипов.
Aroch
> тогда уж сразу sdf делать без всяких мипов.
У меня например для sdf тоже куча пустого прострнаства для всяких эффектов (тень, свечение, другие эффекты). Пример атласа:
Атлас генерится на лету прямо в рантайме (и даже не на этапе загрузки уровня, а прямо на этапе рендера). Т.е. игре нужно отрисовать новый глиф, которого еще нету, код: 1. Достает глифы в виде кривых из шрифта 2. Аппроксимирует кучей отрезков 3. Выделяет место под этот глиф в атласе 4. Генерит sdf прямо в атласе по нужному месту
И на фпс это не сказывается никак.
p.s. Еще один атлас:
Который так же генерится на лету. Ресурсы подгружаются заранее, но в текстуру атласа данные попадают непосредственно перед рендером. И самая тяжелая операция тут - копирование в этот самый атлас, а отнюдь не выделение места в атласе. И даже при этом всём на рендере это не сказывается никак.