2015-10-11 6 views
0

Я разрабатываю игру на C с использованием SDL2, и моя проблема в том, что игра FullHD и имеет длинные анимации символов (180 кадров), которые генерируют очень большие спрайты. У меня есть спрайт, который равен 7326x7250px, поэтому я должен разбить на шестнадцать 2048x2048 пикселей, чтобы я мог играть на планшетах (их максимальный размер текстуры на нижней границе 2048x2048).Анимация с Spritesheet vs Видеореклама

Учитывая эту проблему, я подумал, было бы лучше сохранить анимацию в видеофайлах и загрузить каждый декодированный кадр в графический процессор. Я знаю, что накладные расходы на декодирование видеокадра и накладные расходы на переключение текстур на графический процессор (с шестнадцатью текстурами 2048x2048 я смог сохранить их в одном массиве текстур, сохраняя состояние GPU во время анимации). Кто-нибудь пробовал это и добился успеха?

ответ

1

Использование видеофайлов таким образом принесло бы в жертву простоту, производительность, качество изображения и удивительную память (вам нужно будет транслировать часть видео, преобразовать его в растровое изображение, затем загрузить это растровое изображение на графическую карту) ,

Достаточно то, что единственным преимуществом будет меньший размер файла, который, как я думаю, не стоит ни одного из этих наказаний, не говоря уже о всех их вместе. У вас все еще будет одно и то же ограничение текстуры (возможно, SDL2 api скрывает эту деталь реализации при использовании видео, но все равно это ограничение)

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

0

Я не верю, что это «настоящий» вопрос, поэтому я не буду давать «настоящий» ответ. Я бы пошел с SVG, файлы были бы очень маленькими, вы просто нарисовали их на поверхностях или текстурах SDL в любом размере, в котором вы нуждаетесь. SDL не поддерживает SVG изначально, поэтому изучайте такие библиотеки, как Cairo.

Для вашего удобства я указываю вам эту статью на rendering SVG graphics with libSDL, написанную разработчиком Tux Paint. Это должно помочь вам понять общую идею.

+0

Благодарим вас за ответ. На самом деле это не реальный вопрос, я больше ищу об обсуждении альтернатив огромным спрайтам. Я не знал о графической анимации SVG на SDL. Спасибо за головы, однако, аниматор в моей команде использовал After Effects для создания анимации, поэтому у меня есть только доступ к изображениям или видеофайлам: / –