Чтобы обеспечить некоторый контекст, у меня есть несколько световых карт для разных объектов в 3D-сцене, которые я хочу упаковать в одну текстуру. Световые карты являются квадратными и имеют разные размеры, которые не обязательно имеют силу двух (хотя это ограничение может быть включено, если оно обеспечивает лучшее решение). Размер полученной текстуры произволен, но должен быть как можно более квадратным. Я должен оставаться идеальным пикселем и не могу использовать поворот. Скорость не вызывает беспокойства, это не используется в критическом по времени приложении.Упаковка произвольных квадратов в прямоугольник
Основной алгоритм я нашел over at GameDev.SE будет работать следующим образом:
- Сортировка лайтмапы по районам, начиная большие
- Переход через выходной текстуры [фиксированной ширины или увеличивать, как желаемая] в порядке сканирования растра
- Место лайтмапа на первое возможное положение
- Повторите со следующей Lightmap до сделано
Хотя это звучит разумно и легко реализовать, я задаюсь вопросом, является ли этот алгоритм хорошим выбором для моих целей или если есть еще более простое решение. В частности, меня интересует:
- Могу ли я использовать только квадратные текстуры?
- Есть ли способ заранее вычислить оптимальные квадратные размеры вывода?
- Могу ли я в значительной степени использовать только «силу двух» текстур?