Масштабирование моего пиксельного арт-платформера с 720p до 1080p

12

Я разрабатываю пиксельный 2D-платформер для ПК и смартфонов, но застрял в технической проблеме.

Я выбрал разрешение плитки 32x32 и разрешение спрайтов 64x64. Уровни разделены на разделы, которые я называю «экранами», и на каждом экране у меня есть плитки размером 40x22,5, приблизительно 40x23, поэтому минимальное разрешение составляет 1280x720.

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

Возникает проблема: разрешение 1280x720 не очень высокое. На HD-мониторах окно будет небольшим, и если я увеличу разрешение в 2 раза, оно будет в 2560x1440, и окно будет намного больше, чем реальный HD-монитор. Если я пробую размеры от 1280x720 до 2560x1440, графика начинает заикаться или деформироваться.

Как я могу решить эту проблему? Есть ли решение, которое не требует от меня перерисовки всех плиток и спрайтов в формате 16x16?

Ксаргон Ван
источник
Является ли уменьшение разрешения, но перемещение камеры по экрану приемлемым выбором дизайна? т.е. разрешение теперь 640 x 360, но ваши экраны все еще 1280x720, но вам нужно перемещаться по комнате, вроде Metroid или Axiom Verge?
lozzajp
Вы находитесь на неправильном месте, даже если это 2d игра, вам нужно определить камеру. Таким образом, камера определяет разрешение просмотра, поля зрения и углы, и вы просто представляете данные на камеру. Таким образом, ваша игра не зависит от выбора
Yosh Synergi
Просто пытаюсь быть уверенным в чем именно проблема. Вы хотите сказать, что, поскольку ваш дисплей карты 1280X720 меньше, чем, скажем, дисплей монитора 1920X1080, вы хотите увеличить масштаб отображения карты до максимально полноэкранного? Я в замешательстве, так как рисование плиток 16X16 не решит проблему (насколько я понимаю) в любом случае.
RobM
@DMGregory, если вы можете предоставить мне несколько примеров с артефактами в масштабировании при использовании дробного масштабирования, это было бы здорово, поскольку я не могу представить один сценарий, где, когда я масштабирую изображение в обоих направлениях одинаковое количество, не важно, если количество целое или дробное число, что артефакты появляются. Под артефактами я подразумеваю вещи, которых там быть не должно, что отличается от размытия, происходящего до высокого масштабирования без достаточного количества пикселей.
Йош Синерги

Ответы:

16

Для тех, кто интересуется, почему это проблема пиксельной графики, вот небольшой пример использования сцены из Super Mario World:

Пример масштабированной сцены пиксельной графики с отображением артефактов

Если мы просто масштабируем пиксельную игру с 720 до 1080 во время выполнения (как это делает обычная игровая камера), мы получаем артефакты из-за нецелого соотношения пикселей экрана на исходный тексель. Проверьте несоответствие в числах из масштабного примера справа, и как искаженный лист и ухо Марио выглядят.

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

Использование режима фильтрации, который смешивает смежные пиксели, позволит избежать пульсации, но вместо этого размывает и размывает пиксельную графику, так что это также не очень желательно.


К сожалению, соотношение 1.5x между 720p и 1080p является худшим сценарием, с которым мы можем столкнуться.

Как вы заметили, масштабирование 1х слишком мало, а 2х слишком велико, с одинаковой шириной поля в обоих направлениях, и между ними нет целого коэффициента масштабирования с целыми числами .

Ваши варианты сводятся к:

  • Делайте масштаб 1x , показывая вашу игру в окне на 1/3 меньше экрана, добавляя декоративные рамки, если вам нужно заполнить пространство.

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

      (например, дает ли это игрокам на некоторых устройствах несправедливое преимущество или позволяет им находить секреты, которые они не должны так легко увидеть?)

  • Увеличьте в 2 раза и обрежьте свою сцену , чтобы игрок видел меньше сцены за раз (примерно 3/4, насколько они могли видеть раньше).

    Это также может повлиять на игру, например. из-за того, что игроку трудно увидеть места, в которых он должен совершить двойной прыжок.

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

      Если вы решите пойти по этому пути, попробуйте поделиться некоторыми подробностями вашего игрового процесса и текущей камеры, а также примером сцены. При этом мы могли бы помочь отрегулировать поведение камеры, чтобы компенсировать (или ваша игра может быть просто плоской требует большей видимости)

  • Создайте альтернативные активы с другим разрешением . (Да, это много работы, но дает вам больше возможностей для контроля внешнего вида игры)

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

    • Как вы заметили, перерисовка всех ваших активов в половину размера ( 16x16 плиток, 32x32 символа ) позволит вам обрабатывать 720p в 2x масштабе и 1080p в 3x масштабе с таким же количеством плиток, которое вы видите сейчас. Тем не менее, вы можете найти маленькое разрешение плитки более ограниченным визуально.

    • Вы также можете нарисовать альтернативный набор «большого формата», который на 150% больше ( 48x48 плиток, 96x96 символов ), который будет обрабатывать 1080p в масштабе 1x. (Вы использовали бы свои существующие активы для 720p или 1440 и т. Д.). Увеличенное разрешение должно помочь вам сохранить верность вашего текущего искусства, поэтому вам не нужно жертвовать стилем и деталями, которые у вас есть сейчас.

      Пример перерисовки актива в масштабе 150%

    • Третий вариант - нарисовать только немного меньший набор активов ( 24x24 плитки, 48x48 символов ), который может обрабатывать 1080p в масштабе 2x, и опять же может означать меньшую потерю деталей, чем вдвое все размеры ваших активов.

      Все три из этих опций позволят вам сохранить ваши кадры и игровой процесс одинаковыми при 720 и 1080, но за счет примерно в два раза больше ресурсов.

Так что, к сожалению, здесь нет легкой победы, просто разные компромиссы.

ДМГригорий
источник
2
Вы упоминаете о сохранении оригинального масштаба и использовании декоративных рамок. В зависимости от контекста, это может быть идеальным местом для размещения элементов графического интерфейса, таких как оценка и жизнь. Если эти границы достаточно велики для правильного размещения такой информации, это может сделать ее менее похожей на «наполнитель» и более «наполненной контентом» и относящейся к игре.
Гнемлок
3

Разработка специально для @ DMGregory опции создания альтернативных активов в разных разрешениях:

Лучшее из известных мне решений - это, вероятно, наименее полезный для вас данный момент: разрабатывайте свои художественные ресурсы в векторном формате и растеризуйте их по мере необходимости позже. Это не волшебная пуля; большую часть времени вы обнаружите, что вам нужно сделать небольшую модификацию ручной работы после растеризации.

Следующий лучший вариант, который я знаю, это попробовать различные алгоритмы масштабирования изображения, в частности, алгоритмы масштабирования пиксельной графики . Как и раньше, это не панча; Выбор конкретного алгоритма масштабирования зависит от контекста. Он имеет такое же отношение к «ощущению» вашей игры, как и к самому искусству, и даже при хорошем согласовании алгоритма и искусства вам, вероятно, придется настроить некоторые спрайты вручную.

В обоих случаях идея состоит в том, чтобы использовать инструмент для выполнения основной работы за вас и сосредоточить усилия человека на оставшихся деталях. Как сказал @DMGregory, «здесь нет легкой победы, просто разные компромиссы».


Редактирование относительно дробного масштабирования: большинство алгоритмов масштабирования пиксельной графики увеличиваются только на целые числа. Если не считать собственного собственного алгоритма масштабирования, вам, вероятно, понадобится объединить увеличение и уменьшение, чтобы получить искомое изменение в 1,5 раза. Для справки приведем результат объединения алгоритма scale3x для увеличения масштаба и алгоритма fant для уменьшения на 50%:

Оригинал:

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

Чешуйчатый:

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

Pikalek
источник
К сожалению, большинство алгоритмов масштабирования пиксельной графики, которые я обнаружил, все еще имеют тенденцию обрабатывать только масштабирование целых чисел (обычно 2x, 3x, 4x), поэтому они мало помогают в случае 720-> 1080. (Может быть, можно использовать 3-х пиксельное масштабирование, а затем уменьшить вдвое ...? Не уверен, будет ли это выглядеть лучше или хуже, чем прямое
повышение
Действительная точка. Немного отредактировал, чтобы заняться этим. Я также наткнулся на этот шейдер, который поддерживает дробное масштабирование .
Пикалек
+1 к векторному решению. Вы должны сделать свои активы действительно большими и менее масштабными.
Марк Авен