Ваша проблема в 1D называется Bin Packing. Возможно, это хорошее начало для вашего поиска.
Обратите внимание, что проблема, которую вы хотите решить, действительно сложна (это NP-сложная задача). Так что вам не нужно искать оптимальное решение, а какой-то умный эвристический алгоритм.
Я думаю, что динамическое программирование снизу вверх возможно для упаковки 1D, но не для 2D случая.
Можно подумать об упрощении вашей проблемы, решив только одномерную задачу, ограничив ее, например, разрезанием текстур на несколько кусков (переменного размера) в одном измерении.
Другая возможность - использовать метаэвристическую оптимизацию, например, эволюционные алгоритмы или оптимизацию роя частиц.