@Grigosis

2.5D изометрия, как отсортировать спрайты?

Карта локации и объекты на ней - это рендер( то есть карта локации в 2D), а персонажи, которые будут по ней перемещаться будут в 3D. камера изометрическая. Теперь вопрос, какой самый простой способ сделать так, чтобы персонаж заходя за спрайт здания - был за ним(то есть спрайт закрывал 3D модель персонажа), а стоя перед зданием - был впереди(3D перс находился поверх спрайта). При том, что стандартная тема с сортировкой в Юнити не работает т.к форма зданий и объектов не соответствует расположению по горизонтали.
  • Вопрос задан
  • 140 просмотров
Пригласить эксперта
Ответы на вопрос 1
@MarkusD
все время мелю чепуху :)
Самым простым, и самым ненадежным, методом сортировки объектов в изометрии является рядная сортировка.
При такой сортировке вся локация выводится по вертикальным или горизонтальным рядам сверху-вниз.
Проблемы с такой сортировкой начинаются буквально сразу же, как только объекты сцены перестают занимать полностью весь тайл.
Например в Red Alert 2 или Tiberian Sun пехота занимает четверть тайла. При вертикальной или горизонтальной рядной сортировке пехота по бокам тайлов будет накрываться тайлами соседних рядов.
В тех же RA2 и TS есть очень высокие здания. При горизонтальной рядной сортировке такие здания будут накрываться другими тайлами.

Более сложным методом сортировки будет топологическая сортировка. Чтобы выполнить эту сортировку, сперва надо построить граф затенения, в которым учитывается высота и положение по оси Z объектов на сцене.
В изометрии оси координат развернуты таким образом, что их проекции образуют между собой равные углы по 120°. Этот момент показывает сравнительно простой механизм определения затенения.
Любой объект сцены достаточно описать своим AABB и посчитать пересечения многоугольника проекции этого AABB с такими же многоугольниками проекций AABB других объектов сцены дальше от камеры.
Получается, что в графе затенения записаны все отношения между объектами сцены, кто кого затеняет. И объекты, которые никого не затеняют, являются первыми в списке вывода на экран. Дальше выводятся те объекты, которые затеняют уже выведенные объекты.

Больше деталей можно найти в самых разных статьях на приведенную тему. Например: [1], [2], [3].
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы