Сервис для создания текстур, которое объеденяет несколько изображений в одну текстуру.
Алгоритм размещает изображения по строкам, слева направо. Все изображения добавляются в текущую строку до тех пор, пока они помещаются по ширине атласа. Когда очередное изображение не помещается, создаётся новая строка ниже.
Высота каждой строки определяется самым высоким изображением, которое было размещено в этой строке. Следующая строка начинается сразу под предыдущей.
Алгоритм не учитывает форму пустых областей внутри строки — изображения просто выстраиваются последовательно.
Перед размещением все изображения сортируются по соответствующим параметрам. После сортировки используется тот же принцип, что и в обычном Shelf-алгоритме.
Сначала размещаются самые крупные изображения, затем более мелкие. За счёт этого строки формируются более равномерно, а пустые области между изображениями уменьшаются.
Сам процесс размещения остаётся построчным: слева направо, затем переход на новую строку.
Алгоритм поддерживает контур (профиль) верхней границы уже размещённых изображений — так называемый «skyline». Этот профиль представляет собой набор горизонтальных отрезков разной высоты.
Для каждого нового изображения алгоритм ищет позицию, где изображение может быть размещено на минимально возможной высоте, не пересекая уже занятое пространство. После размещения изображение изменяет профиль skyline.
Таким образом, изображения «укладываются» поверх друг друга, следуя текущему контуру свободного пространства.
Алгоритм рассматривает свободное пространство атласа как набор прямоугольных областей. Изначально весь атлас — это один большой свободный прямоугольник.
Когда изображение размещается, выбранная свободная область разбивается на несколько новых прямоугольников, представляющих оставшееся свободное пространство. Далее каждое новое изображение размещается в одну из доступных свободных областей.
На протяжении работы алгоритм постоянно обновляет список свободных прямоугольников, отслеживая, где ещё можно разместить изображения.
Алгоритм работает по принципу последовательных разрезов свободного пространства. После размещения изображения оставшаяся область делится прямым разрезом — либо горизонтальным, либо вертикальным.
Каждый разрез создаёт два новых прямоугольных участка свободного пространства. Затем алгоритм рекурсивно размещает изображения в этих участках, снова применяя разрезы.
Вся структура свободного пространства формируется только прямыми «разрезами», как будто атлас разрезают ножом.
Алгоритм разбивает атлас на регулярную сетку из ячеек фиксированного размера. Каждая ячейка представляет собой область, в которую может быть помещено одно изображение.
Размер ячейки выбирается заранее либо вычисляется на основе максимальных размеров изображений. Все ячейки имеют одинаковую ширину и высоту и располагаются по строкам и столбцам.
Изображения размещаются последовательно: слева направо по строке, затем переход на следующую строку сетки. Каждое изображение помещается внутрь одной ячейки, при необходимости с отступами.
Алгоритм не анализирует форму свободного пространства между изображениями. Если изображение меньше ячейки, неиспользуемая область внутри ячейки остаётся пустой.