Skip to content

itschillipill/texture_atlas

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Texture Atlas

Сервис для создания текстур, которое объеденяет несколько изображений в одну текстуру.

Описание алгоритмов сборки текстур:

Shelf (полочный алгоритм)

Алгоритм размещает изображения по строкам, слева направо. Все изображения добавляются в текущую строку до тех пор, пока они помещаются по ширине атласа. Когда очередное изображение не помещается, создаётся новая строка ниже.

Высота каждой строки определяется самым высоким изображением, которое было размещено в этой строке. Следующая строка начинается сразу под предыдущей.

Алгоритм не учитывает форму пустых областей внутри строки — изображения просто выстраиваются последовательно.

1 и 2. Sorted Shelf (полочный с сортировкой по высоте и площади)

Перед размещением все изображения сортируются по соответствующим параметрам. После сортировки используется тот же принцип, что и в обычном Shelf-алгоритме.

Сначала размещаются самые крупные изображения, затем более мелкие. За счёт этого строки формируются более равномерно, а пустые области между изображениями уменьшаются.

Сам процесс размещения остаётся построчным: слева направо, затем переход на новую строку.

3. Skyline

Алгоритм поддерживает контур (профиль) верхней границы уже размещённых изображений — так называемый «skyline». Этот профиль представляет собой набор горизонтальных отрезков разной высоты.

Для каждого нового изображения алгоритм ищет позицию, где изображение может быть размещено на минимально возможной высоте, не пересекая уже занятое пространство. После размещения изображение изменяет профиль skyline.

Таким образом, изображения «укладываются» поверх друг друга, следуя текущему контуру свободного пространства.

4. MaxRects

Алгоритм рассматривает свободное пространство атласа как набор прямоугольных областей. Изначально весь атлас — это один большой свободный прямоугольник.

Когда изображение размещается, выбранная свободная область разбивается на несколько новых прямоугольников, представляющих оставшееся свободное пространство. Далее каждое новое изображение размещается в одну из доступных свободных областей.

На протяжении работы алгоритм постоянно обновляет список свободных прямоугольников, отслеживая, где ещё можно разместить изображения.

5. Guillotine

Алгоритм работает по принципу последовательных разрезов свободного пространства. После размещения изображения оставшаяся область делится прямым разрезом — либо горизонтальным, либо вертикальным.

Каждый разрез создаёт два новых прямоугольных участка свободного пространства. Затем алгоритм рекурсивно размещает изображения в этих участках, снова применяя разрезы.

Вся структура свободного пространства формируется только прямыми «разрезами», как будто атлас разрезают ножом.

6. Grid

Алгоритм разбивает атлас на регулярную сетку из ячеек фиксированного размера. Каждая ячейка представляет собой область, в которую может быть помещено одно изображение.

Размер ячейки выбирается заранее либо вычисляется на основе максимальных размеров изображений. Все ячейки имеют одинаковую ширину и высоту и располагаются по строкам и столбцам.

Изображения размещаются последовательно: слева направо по строке, затем переход на следующую строку сетки. Каждое изображение помещается внутрь одной ячейки, при необходимости с отступами.

Алгоритм не анализирует форму свободного пространства между изображениями. Если изображение меньше ячейки, неиспользуемая область внутри ячейки остаётся пустой.

Реализованные:

1. Sorted Shelf (по высоте)

2. Sorted Shelf (по площади)

About

A Dart poject for creating a texture atlas

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors