Сложный Научный Вопрос |
May. 21st, 2017|12:06 am |
а никто знает, где лежат вкусные полезные алгоритмы для детектирования в мегатекстуре тайлов?
опишу: есть у нас уровень для 2д платформера. из себя он представляет ОГРОМНЫЙ битмап, на котором нарисовано. что руками, а что накидано пастой кусочков. как накидано было — неизвестно, остался только битмап. надо найти в битмапе эти повторяющиеся кусочки, и сделать из них тайлы. конечно, никакой регулярной сетки нет (то есть, тайлы могут быть накиданы с любой пиксельной позиции, и иметь любые размеры) — но тайлы не кручены и не масштабированы. цвета могут различаться на несколько битов, правда: так что тайлы надо искать с некоторой «перцептивной погрешностью». задача — эти тайлы понаходить как можно лучше, и сделать из них атлас тайлов. битмап труколорный.
я чую, что такую задачу уже давно кто-то решил (или хотя бы решал), и изобретать велосипед будет не очень умно. я нашёл только рассказы о том, как находить повёрнутые и покорёженые регулярности — что, конечно, очень круто, но явный overkill.
очевидно, что перебирать все возможные варианты — ни разу не решение. в виду отсутствия явной сетки прочитерить на ней тоже не выйдет. то есть, некая примерная сетка есть, потому что тайлы-то как-то кидали, — но её ж надо определить как-то.
можно, конечно, побить картинку на квадраты с неким шагом и размером, посчитать для них вэйвлеты, а потом заниматься только теми частями, которые более-менее похожи. но мне кажется, что есть решение намного лучше. так вот: никто не встречал? если да — то поделитесь, пожалуйста.
p.s.: на всякий случай уточню: это не про построение «карты проходимости», или чего-то подобного. это чисто для визуальной части: чтобы порезать мегатекстуру на меньшие куски, сделать из них атлас, и потом блитить эти куски. то есть, всякие «структуры уровня» не при чём, чисто вопрос компрессии картинки путём детекта повторяющихся частей.
p.p.s.: оказалось неочевидно, что никакого «заранее заданого набора тайлов» нет, конечно. есть битмап. и всё. программа должна сама выбрать то, что может являться тайлом, и сама нарезать атлас. иначе она нахуй ненужна.
тайл, конечно, может быть не один. найти их надо все, попробовать все, выбрать вариант, при котором получается наименьший выходной размер. |
|