Понимание пиксельной графики в Unity 2d

10

Я изо всех сил пытаюсь понять основы пиксельной графики в Unity.

Я понимаю, что такое единица измерения, и что если я рисую свой спрайт с разрешением 16x16 пикселей, я должен установить PPU на 16.

Возьмите, например, долину звездной росы, на изображении ниже вы можете четко видеть, что игрок не квадратный. Создатель игры сказал, что он сделал все в 16x16, но тогда как же так много деталей в персонажах? Конечно, вы не соединяете несколько квадратов 16x16 вместе, чтобы сделать персонажа (как вы сделали бы с картой тайлов)?

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

Каков «общий» способ иметь дело с вещами, которые не квадратные, как символы на изображении. Вы просто делаете 16x32 спрайт и устанавливаете PPU на 16? Разве это не выглядит немного странно рядом со спрайтами 16x16? Вы обычно выбираете один размер (т.е. 16, 32, 64), а затем придерживаетесь этого для всего в игре?

Визуальная проблема, которую я видел, это то, что спрайт 32x32 выглядит очень неуместным (слишком острым) рядом со спрайтом 16x16.

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

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

Green_qaue
источник
2
PPU не имеет ничего общего с размерами текстур ваших спрайтов, он просто определяет масштаб, в котором они отображаются, относительно вашей мировой системы координат. Два спрайта с одинаковым PPU будут показывать одинаковую плотность пикселей (т.е. отображаемый размер каждого пиксельного блока будет одинаковым от одного спрайта к другому при прямом просмотре), даже если изображения имеют совершенно разные размеры. Так что я не уверен, что вы подразумеваете под «разве это не выглядит немного странно» - можете ли вы уточнить, какую именно визуальную проблему вы наблюдали?
DMGregory
@DMGregory Конечно, позвольте мне загрузить изображение
Green_qaue
1
Эффект, показанный на скриншоте примера, произойдет, если вы поместите два изображения вместе с разными значениями PPU (или если у одного изображения его пиксели удвоены / утроены в самой текстуре, или вы применили масштаб к одному изображению, но не к другому) , Если вы придерживаетесь одного постоянного значения PPU и не масштабируете свои спрайты, то у вас будет постоянная плотность пикселей
DMGregory
@DMGregory Итак, если мои плитки имеют размер 16x16, и я хочу, чтобы символ с большей детализацией (как вы можете видеть, у символа 16x16 выше очень мало деталей), например, 32x16, я должен создать спрайт 32x16 и оставить PPU равным 16 (то же самое). как плитка)? Или, например, если бы я хотел слона, то, возможно, это должно было бы быть 64x128, я бы тогда также установил его на 16 PPU?
Green_qaue
1
PPU - это количество пикселей в одном мировом блоке. Если вы всегда хотите, чтобы ваши пиксели были одинакового размера, вы всегда должны использовать одно постоянное значение PPU. (Это означает, что куст 16x16 и слон 64x128 с разрешением 16 PPU будут иметь одинаковую плотность пикселей, и слон будет занимать в 32 раза большую площадь экрана, чем куст). Это все, что вам было интересно?
DMGregory

Ответы:

16

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

Используя в качестве примера некоторые спрайты из Stardew Valley, мы можем видеть, что, хотя спрайты имеют разные размеры текстуры, они совпадают по согласованной сетке, потому что каждый пиксель рисуется одинакового размера.

Пример, показывающий два спрайта разных размеров с одинаковой плотностью пикселей.

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

В частности, для Unity это предоставляется вам как параметр Pixels Per Unit в инспекторе настроек импорта Sprite . Пока вы используете одно последовательное число здесь для всех ваших спрайтов, Unity будет автоматически обрабатывать их рисование в нужном размере в вашем мире, чтобы сохранить плотность пикселей - даже если они нечетного размера, а не с степенью двойки или точной кратно вашему размеру плитки. Так что в этом примере и кустарник, и персонаж, и все остальное в игре будет использовать PPU OF 16.

Точное число, которое вы выбираете, не имеет большого значения, важнее всего последовательность. Если бы мы хотели, чтобы каждая ячейка охватывала 2 единицы мира, чтобы при редактировании уровней мы могли легко привязываться к углам плиток (нечетным числам) и центрам плиток (четным числам), мы бы использовали вместо этого PPU, равный 8, для всех наших спрайтов.

Только не опускай слишком низко. Вы увидите, что в некоторых статьях рекомендуется, чтобы значение PPU равнялось 1, что означает, что спрайт в 256 пикселей будет охватывать 256 мировых единиц. Хотя это может не звучать тревожно, такие системы, как физика, настроены, предполагая, что большая часть вашего игрового процесса будет происходить в масштабах от десятых до десятков единиц, а слишком большой масштаб может привести к их плохому поведению. Попробуйте выбрать количество пикселей, которые имеют смысл в вашем игровом процессе, например, ширину вашего персонажа или плитки. Это также облегчит вашу математику при программировании и дизайне уровней (например, «Я хочу, чтобы этот персонаж правильно разбил 3 плитки, вот и все x + 3.0f»)

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

Еще одно предостережение: ничто из этого не определяет, насколько велики ваши спрайты на вашем экране. Это зависит от размера игрового окна / экрана и размера / угла обзора / угла обзора вашей камеры. Для 2D-идеального пикселя вам также необходимо убедиться, что высота вашего окна равна целому числу, кратному числу пикселей спрайта, которые видит ваша камера (ортографическая высота камеры x 2 x PPU)

Д.М.Григорий
источник