Я гуглил, как игры типа Clash of Clans рендерит свои войска, и кажется, что они предварительно рендерит 3D-модели в 2D-спрайт-листы до выполнения и рендерит эти 2-мерные изображения во время выполнения. Однако войска в Clash of Clans могут столкнуться в любом направлении.
В моей аналогичной игре, если бы я должен был создать изображение для каждой ориентации (0-360 градусов) для каждого типа войск (есть 18 типов) в каждом кадре в их анимации, они должны были бы производить огромное количество изображений. Я не могу себе представить, что это делают другие разработчики, так как я могу это сделать?
Ответы:
Как правило, есть менее 360 направлений. Обычный случай - 8 или 16. Анимации тоже довольно короткие.
Автоматизация - твой друг. Напишите скрипт Blender / 3DMax / etc для загрузки модели из списка, визуализации ее в каждом необходимом кадре и направлении изображения. Пометить изображения в соответствии с содержанием и обратиться к ним из игры.
Упакуйте все в текстурные атласы (так называемые спрайт листы) для более быстрого доступа.
В итоге вы получите несколько тысяч спрайтов, аккуратно упакованных в дюжину атласов. Не такое уж большое дело;)
Я не смог найти изображение из CoC, но вот Diablo II, в котором использовался тот же подход к анимации персонажей. Например, атака ближнего боя на Амазоне:
источник
Также имейте в виду низкое разрешение этих изображений. Есть еще несколько вещей, которые вы можете сделать, чтобы сэкономить место, хотя я не знаю, какие из них используются в Clash of Clans:
Вы можете смещать позиционирование войск в направлении стандартных направлений (N, E, S, W, NE, SE, SW, NW) чаще, чем нет, а затем оптимизировать только для стандартных направлений.
Вы можете сделать комбинированный подход, когда вы предварительно визуализируете только некоторые направления. Во время кадра вы можете визуализировать войска, которые не соответствуют существующему изображению, или использовать ближайшее изображение, если у вас заканчивается время.
По возможности используйте левую / правую симметрию, чтобы сократить количество сохраненных кадров пополам.
Вы можете расставить приоритеты для определенных анимаций, таких как ходьба и отдых, сохраняя больше направлений и кадров для них. Затем удалите приоритеты в других анимациях, таких как размах меча, где вы храните меньше направлений и кадров (я советую сохранять больше направлений для первого и последнего кадра свинга).
Вы можете подделать оставшиеся направления, используя ближайшее изображение, а затем растягивая его.
В целом, мы можем говорить о 18 единицах, до 8 направлений, возможно, 2 секунды анимации при 20 кадрах в секунду, в среднем 64x64 пикселей и около 2 байтов на пиксель. Это 18x2x20x64x64x2 = 50 МБ. Они также могут масштабировать количество направлений, разрешение и количество кадров в зависимости от возможностей устройства и количества единиц, используемых на карте.
источник
В дополнение к ответу @Kromster, обратите внимание, что изображения часто сильно сжимаются, а в больших «атласных» изображениях, где много повторяющихся элементов (например, пустой фон), сжатие является значительным. Таким образом, окончательный «размер» изображений - это не просто прямое умножение размера отдельного изображения.
источник
В качестве классического примера я предлагаю вам скачать оригинальный Doom, в котором использовались 2D-спрайты в псевдо-3D-среде. Спрайты имели 8 направлений лицом к лицу (относительно точки зрения игрока) и по памяти около 8 разных размеров по мере приближения. Это было очень заметно, но было достаточно приемлемо для игрового процесса. Конечно, в Clash или других играх с изометрическим просмотром нет необходимости учитывать расстояние.
источник