Как мне уменьшить пиксель арт?


14

Есть много алгоритмов для масштабируемых до пиксельной графики. (Я предпочитаю HQX , лично.) Но есть ли какие - либо заметные алгоритмы масштабировать его вниз ? Моя игра предназначена для работы с разрешением 1280x720, но если в нее играют с более низким разрешением, я все равно хочу, чтобы она выглядела хорошо.

Большинство дискуссий по пиксельной графике сосредоточены на масштабировании 320x200или 640x480масштабировании для использования в консольных эмуляторах, но мне интересно, как современные 2D-игры, такие как Monke Island Remake, могли бы хорошо выглядеть на низких разрешениях?

Конечно, игнорируется возможность иметь несколько версий ресурсов (например, mipmapping ).


Mipmapping не требует нескольких версий ресурсов; это может быть сделано во время загрузки контента автоматически OpenGL или DirectX. Это удовлетворит ваши цели?
Сет Бэттин

@SethBattin Я не уверен. Я думаю о запуске игры, созданной для 1280x720, например, 1024x576. Что используют OpenGL и DirectX для изменения масштаба, если я даю ему изображение размером 128x96, которое должно отображаться в формате 102x76? (это даже проблема округления, поскольку она должна быть 102,4x76,8 пикселей)
Майкл Стум

Mipmapping сильно размывает изображение. Вы не хотели бы этого для pixelart.
Кромстер говорит, что поддерживает Монику

5
Только к вашему сведению: Римейк Острова Обезьян не требовал сокращения. Игра работала на EGA и имела эффективный размер 320x200 пикселей. Нет необходимости создавать уменьшенные версии этого для мобильных устройств, поскольку оно уже меньше разрешения, которое эти устройства имеют в настоящее время.
Bummzack

2
Как выглядит твоя пиксельная графика? Вы просите нас ответить слепо.
aaaaaaaaaaaa

Ответы:


14

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

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

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

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

  3. Если расширение игры невозможно, заполните неигровые разделы экрана черным; либо полосы сверху и снизу, слева и справа, либо черная рамка. Это то, что делает iPad при запуске приложений iPhone в увеличенном режиме. Это также широко используется в эмуляторах.

  4. Откажитесь от сохранения верности пиксельной сетке. Но тогда вы должны прекратить использовать пиксельные ресурсы с острыми углами. Затем увеличьте / уменьшите масштаб с помощью билинейной (или оптимально бикубической, если ваша платформа поддерживает это) фильтрации. Это лучший выбор для максимизации использования экрана, сохраняя при этом пользовательский опыт во всех поддерживаемых разрешениях.

Для моей игры я выбрал вариант № 4, и я весьма удивлен тем, насколько хорошо он выглядит на устройствах от 320 пикселей по вертикали (старый Android 2.3) до 1536 пикселей по вертикали (iPad 2012 года с Retina Display). Исходные ресурсы рассчитаны на 600 пикселей по вертикали (первоначально для дисплея 800x600 на ПК с Windows). Хотя для последующих игр, я думаю, что лучшее логическое вертикальное разрешение составляет 720 пикселей.

В игре используется виртуальное высокое разрешение 600 пикселей, масштабированное до собственного разрешения устройства с билинейной фильтрацией. Это означает, что все Y-координаты в коде идут от 0 (вверху экрана) до 600 (внизу экрана).

Предполагается, что для горизонтального размера максимальная ширина составляет 1080 пикселей, что более чем достаточно для покрытия даже самых широких форматов 16: 9. Мои x-координаты центрированы, поэтому x = 0 является центром экрана, а x-координаты идут от -540 слева до 540 справа. Я проверяю, чтобы все было в диапазоне от -400 до 400 для поддержки самых узких дисплеев (4: 3)

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

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


Я в такой же ситуации, и это сводит меня с ума. Наша игра pixelart сделана для экрана высотой 600 пикселей. Но если я увеличу масштаб экрана до 720p (ПК), он получится действительно ужасным, слегка размытым. Я действительно не знаю, что здесь делать. Я также подумал о том, чтобы сделать большую карту для экранов 720p и сохранить пиксель-арт как есть, но у меня возникла та же проблема с экранами 1080p. Я думаю, что мы должны были сделать 360p пикселей (или меньше), поэтому у нас было бы идеальное масштабирование x2 и x3 для экранов 720 и 1080p. Сейчас уже слишком поздно для этого. Любая дальнейшая идея или совет?
Дамиан

8

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

Вот несколько причин, по которым вы могли бы сделать это ...

Сохраняет обработку работы

Если вы произвели программный масштаб во время выполнения, ваше программное обеспечение, вероятно, все равно создаст и кеширует иллюстрацию. Так почему бы просто не включить уменьшенные версии в комплект художественных активов? Я полагаю, что если загрузка будет больше, чем вы хотели, это может иметь значение, но вы сэкономите на некоторой загрузке процессора, записи на диск и т. Д.

Большой художественный контроль

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

Динамическое масштабирование не идеально

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

другие мысли

Вы также можете использовать гибридный подход с набором ресурсов для конкретного разрешения, которые используются там, где они есть, и общим набором, который динамически масштабируется, если не найдена версия для конкретного разрешения. Это немного похоже на то, как работает платформа Android. Некоторая информация об этом на http://developer.android.com/guide/practices/screens_support.html


0

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

В частности, Lanczos может быть интересным выбором, поскольку он обостряет изображение, возможно, сохраняя детали, которые иначе были бы потеряны при объединении нескольких пикселей в один. Очевидно, это происходит за счет возможного введения нежелательных артефактов.

Некоторые визуальные сравнения здесь: /gis/10931/what-is-lanczos-resampling-useful-for-in-a-spatial-context


3
-1, потому что масштабирование пиксель-арта (которое обычно делается вручную, например, « пиксель за пиксель» ) никогда не будет хорошо выглядеть ни с одним из этих алгоритмов. При подходе к ближайшему соседу вы потеряете важные линейные сегменты. С интерполяцией вы получите размытые изображения. Боюсь, что нет удовлетворительного ответа на вопрос ОП, кроме как сделать это вручную.
Bummzack
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.