Как я могу реализовать предварительно рендеринг 2D спрайтов, которые могут смотреть в любом направлении?

28

Я гуглил, как игры типа Clash of Clans рендерит свои войска, и кажется, что они предварительно рендерит 3D-модели в 2D-спрайт-листы до выполнения и рендерит эти 2-мерные изображения во время выполнения. Однако войска в Clash of Clans могут столкнуться в любом направлении.

В моей аналогичной игре, если бы я должен был создать изображение для каждой ориентации (0-360 градусов) для каждого типа войск (есть 18 типов) в каждом кадре в их анимации, они должны были бы производить огромное количество изображений. Я не могу себе представить, что это делают другие разработчики, так как я могу это сделать?

Кайл Лин
источник
2
Кстати, техника, на которую вы ссылаетесь, называется «Billboarding».
Weckar E.

Ответы:

45
  1. Как правило, есть менее 360 направлений. Обычный случай - 8 или 16. Анимации тоже довольно короткие.

  2. Автоматизация - твой друг. Напишите скрипт Blender / 3DMax / etc для загрузки модели из списка, визуализации ее в каждом необходимом кадре и направлении изображения. Пометить изображения в соответствии с содержанием и обратиться к ним из игры.

  3. Упакуйте все в текстурные атласы (так называемые спрайт листы) для более быстрого доступа.

В итоге вы получите несколько тысяч спрайтов, аккуратно упакованных в дюжину атласов. Не такое уж большое дело;)

Я не смог найти изображение из CoC, но вот Diablo II, в котором использовался тот же подход к анимации персонажей. Например, атака ближнего боя на Амазоне:

введите описание изображения здесь

Кромстер говорит, что поддерживает Монику
источник
4
Баланс мощности рендеринга / времени по сравнению с объемом памяти и временем загрузки.
М. Мимпен
3
Что такое "атлас"? Любая ссылка?
BЈовић
7
@ BЈовић Ищите «Текстурный атлас». Это очень распространенная концепция.
Кромстер говорит, что поддерживает Монику
2
Возможно, стоит отметить, что в ходе обсуждения этой методики разработчиками Blizzard North они в основном пришли к выводу, что это была странная мера упущения, чтобы справиться с неловким моментом в возможностях графики для ПК, и даже тогда это не было в конечном итоге это того стоит. Было интервью по этому поводу, и в итоге потребовалось так много времени, чтобы перерисовать все, что общий вывод заключался в том, что это не очень хороший подход (и их следующая игра определенно будет 3D).
KRyan
1
@KRyan хорошее дополнение! Я предполагаю, что это было из-за большого количества NPC и снаряжения в D2. Для CoC и мобильных платформ это другой баланс.
Кромстер говорит, что поддерживает Монику
8

Также имейте в виду низкое разрешение этих изображений. Есть еще несколько вещей, которые вы можете сделать, чтобы сэкономить место, хотя я не знаю, какие из них используются в Clash of Clans:

  • Вы можете смещать позиционирование войск в направлении стандартных направлений (N, E, S, W, NE, SE, SW, NW) чаще, чем нет, а затем оптимизировать только для стандартных направлений.

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

  • По возможности используйте левую / правую симметрию, чтобы сократить количество сохраненных кадров пополам.

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

  • Вы можете подделать оставшиеся направления, используя ближайшее изображение, а затем растягивая его.

В целом, мы можем говорить о 18 единицах, до 8 направлений, возможно, 2 секунды анимации при 20 кадрах в секунду, в среднем 64x64 пикселей и около 2 байтов на пиксель. Это 18x2x20x64x64x2 = 50 МБ. Они также могут масштабировать количество направлений, разрешение и количество кадров в зависимости от возможностей устройства и количества единиц, используемых на карте.

Питер - Унбан Роберт Харви
источник
2
Вы также можете переключаться с рекламных щитов на 3d модели, если приближаете к определенному объекту - так что это 3d рядом, а затем используете более быстрый 2d, когда у вас просто много бегает на заднем плане. Хотя плавное управление переходом может быть сложным.
Тим Б
@TimB Что особенно хорошо, потому что вы в конечном итоге рендеринг с высоким разрешением и использование изображений для низких разрешений.
Питер - Унбан Роберт Харви
2

В дополнение к ответу @Kromster, обратите внимание, что изображения часто сильно сжимаются, а в больших «атласных» изображениях, где много повторяющихся элементов (например, пустой фон), сжатие является значительным. Таким образом, окончательный «размер» изображений - это не просто прямое умножение размера отдельного изображения.

afaulconbridge
источник
5
Сжатие работает по-другому для графических процессоров, чем для jpegs, особенно для мобильных графических процессоров в устройствах, для которых было написано Clash of Clans. en.wikipedia.org/wiki/S3_Texture_Compression Другими словами: пустой фон на 100% не имеет отношения к сжатию текстур.
Питер - Унбан Роберт Харви
-2

В качестве классического примера я предлагаю вам скачать оригинальный Doom, в котором использовались 2D-спрайты в псевдо-3D-среде. Спрайты имели 8 направлений лицом к лицу (относительно точки зрения игрока) и по памяти около 8 разных размеров по мере приближения. Это было очень заметно, но было достаточно приемлемо для игрового процесса. Конечно, в Clash или других играх с изометрическим просмотром нет необходимости учитывать расстояние.

Грэхем
источник
Там не было разных размеров. Рендеринг только что сделал наивное соседнее масштабирование вверх / вниз по мере необходимости.
R ..
@R .. Спасибо за исправление. Прошло несколько лет с тех пор, как я играл в нее! :)
Грэм
1
Извините, но это не отвечает на вопрос «Как я могу реализовать ..» вообще.
Кромстер говорит, что поддерживает Монику
@Kromster Итак, на вопрос «как мне это реализовать?» Я не отвечаю на вопрос с кратким обзором классической игры, в которой она реализована (8 углов вместо 360), и отмечаю, что как они это сделали, особенно Легко увидеть, когда вы играете, так как ОП, очевидно, не может сказать в Clash? И отмечаете различия между этим общим случаем и частным случаем изометрического представления? Я свободно признаю, что это не так хорошо, как ваш ответ, но есть разница между менее качественным ответом и отсутствием ответа на вопрос.
Грэм