Godot не имеет Pixel Perfect.
Я думал что нашёл движок с хорошим пиксельартом, и всё было хорошо пока я случайно
не обнаружил, что в зависимости от размеров экрана (даже в FullScreen режиме)
появляются пиксели разных размеров.
Опять придётся искать движок, который идеально хорош для пиксельарта. Либо ждать, когда поправят это в годоте.
- 04 мая 2019, 04:31
- 00
Ещё решил потестить Love2D с его аддоном Push, в LowRes примере, тоже самое, в зависимости от того насколько окно растянуто, настолько и проявят себя косяки с пикселями(
На конкурс я точно не делаю игру с пиксельартом... Хотя планировал)
Теперь дело за юнити, потестирую там пиксельарт, хоть юнити совсем не предназначен для пикселей.
Но если там будет равномерный размер пикселей, то ок!
У юнити можно но только с танцами с бубном иначе кошмар... (насколько знаю)
мне это и не понравилось у Юнити, приходится плагины использовать, а в годот очень удобный интерфейс для 2д и пиксельарта, но оказывается там тоже есть свои сюрпризы (не pixelperfect)
Юнити умеет в пиксель-перфект и там даже тайловый движок есть встроенный, и 2d физика
В Годоте местами намного удобнее есть вещи (например встроенный 2д патфайндинг, и пиксельарт легче замутить, только вот оказывается он не пиксельперфектный и это плохо, придётся всё ещё на юнити пилить)
Ну как я и говорю, на видео дополнительный плагин нужно устанавливать,
при чём у него до сих пор (preview) статус, то есть не до конца допиленный.
Но всё равно, пока что лучший вариант, из доступных.
жаль мой "программист" на людум не знал об этом видео...
Зато в Pico-8 и Tic-80 всегда идеальный пиксельарт, что несомненно радует, кроме одного - ограниченный объём информации.
Возможно тут ещё проблема в том, что я использовал нарезание по регионам. И ещё пивот менял,
но как тогда с этим быть, ведь нужно и точку отсчёта (ось) менять и на регионы большой спрайт пилить.
Ну в принципе в зависимости от того, как окно растянуто - это действительно может проявляться. Если размер окна не будет нацело делиться на размер твоего изображения. Если у тебя картинка 64 на 64, а ты при растяжении размер окна поставишь 100 на 100, то естественно, что у тебя будут не совсем ровные пиксели. Идеальный pixel perfect - это только в том случае, если увеличенный размер изображения нацело делится на исходный. Чисто математически.
Это можно сделать программно, чуть увеличивая чёрную рамку вокруг, подгоняя всё изображение.
Сейчас тестирую юнити и там неплохо с pixelperfect благодаря плагинам. Жаль в годоте пока не нашёл идеальный способ, там работать с 2д намного приятнее, чем в юньке.
Ну можно, конечно, но это как повезет. Зависит от того насколько твой целевой размер отличается от ближайшего "идеального".
Вообще нужно просто представлять на каких мониторах будет это дело играться, и заранее делать размер твоего исходного пиксельарта таким, чтобы его можно было "идеально" отмасштабировать. Но при этом ещё предусмотреть все вот эти приколы с черными рамками, если монитор будет с немного другим соотношением сторон.
В идеале, мне бы автоматический вариант, с чёрной рамкой, то есть как ни крути окно и как ни выставляй размеры, но хотелось бы чтобы пиксельарт всегда был идеальный и соотношение сторон статичное.
В годоте это всё есть вроде как, но оказывается, иногда пиксели меняют размер, этот артефакт меня расстроил( буду делать пока на юнити пиксельарт игру.
Чудес не бывает. Возьми размер своей картинки и умнож на 2, на 3, 4 и так далее. Только эти размеры будут pixel-perfect, и никакие другие. Дальше уже надо смотреть какой размер ближайший к размеру монитора (в меньшую сторону), а потом уже рамку добавлять. Только так. Но проще заранее делать игру под такой размер, который легко идеально масштабируется под типичные мониторы.
Я знаю вот такие варианты пиксель-перфект:
1) коэффициент масштабирования - всегда целое число, а не автоматом растяжение; при этом или рамки из чёрного цвета или дополнительного арта, или разный обзор камеры на разных разрешениях; тут попадались всякие примеры скриптов, например: пост.
если ты делаешь именно целочисленное масштабирование (задай размер окна вручную и проверь, даже без скриптов), и при всех вариантах настроек всё равно идут искажения, то тогда "годот не умеет пиксель-перфект"
ещё один момент, что есть такие базовые разрешения (исходные 1:1, в которых нарисован арт), которые хорошо масштабируются идеально сразу на несколько популярных разрешений
2) читерский, как в Shovel Knight, когда кажется, что перфект, но слегка не перфект: см. именно этот комментарий, а не пост.
тут основная суть в том, что неровности размеров, которые видно на твоей картинке, будут плавно размазаны по всем пикселям
3) с поддержкой вращения спрайтов. чтобы спрайты можно было красиво крутить (само собой, нарушая каноны пиксель-арта), нужно масштабировать не весь экран-текстуру, а отдельно каждый спрайт. Вот в этой статье написано, как поменять эти режимы в Годоте.
Спасибо) Скачал пару решений и потестил универсальные разрешения,
вот при 320*180 пикселей не искажается картинка, если на полный экран растянуть,
но может на других мониторах будет не так всё гладко.
Это, скорее, мера, чтобы уменьшить количество мониторов, где нужны полоски по краям. А для остальных надо всё равно предусмотреть добавление полосок.
Конкретно в этом примере виноват не движок. Ни один движок не умеет скейлить на 125%, 147% или 190% без потери качества. Пиксель пёрфект бывает только на 100%, 200%, 300% и т.д. Годот еще хорошо сделал.
ну это да, только например в Unity с pixelperfect плагином, как ни крути окно, но всегда пиксели равномерные, так что это можно реализовать... но не хотелось бы использовать тяжеловесную Юнити для простых проектов(
Не, не. Ты что-то не так делаешь. Попробуй выводить картинку как она есть, а масштаб настраивать через Camera2D, с определенными целочисленными значениями зума. Правда в фулл скрине не юзал, но в оконном режиме при любых размерах у меня все пучком.
Вообще подобная проблема встречалась ранее очень часто, но в марте этого года редузо ее исправил.
спасибо за камеру) только у меня всё равно не выходит пиксельперфект,
А можешь, пожалуйста, прислать пустой проект с примером?
или хотя бы подсказать как настраивать, может я что-то делаю не так...
У меня значения такие: disable и ignore. Вот статью посмотри: Тыц
спасибо)