Как масштабировать пиксельную графику без размытия в GM Studio?


9

Я создаю игру в Game Maker Studio, которая использует пиксельную графику. Когда я запускаю игру, все масштабированные текстуры действительно размыты. (Это не случается с маленькими.)

Например, это изображение

отлично :)

рендерится в игре так:

размытый :(

Есть ли способ изменить размер маленьких пикселей на большие, а не размытые ?


не используйте сжатие с потерями для текстур, вместо этого используйте bmp, gif или png, все они поддерживают хранилище без потерь
трещотка урод

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

примеры добавлены.
mpower

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

1
Если я правильно помню, у оригинального Spelunky (сделанного в Game Maker) была DLL, которая включала линейное масштабирование. Источник доступен по этой ссылке; посмотри.
Анко

Ответы:


13

Нашел решение с какого-то ресурса. Перейдите в «Глобальные настройки игры», затем перейдите к любому спойлеру платформы (например, «Windows» или «Android»), там выберите спойлер под названием «Графика» и отключите «Интерполировать цвета между пикселями». Радоваться, веселиться :)


Технически это работает, хотя пиксельная графика может измениться из-за увеличения с нецелым коэффициентом (например, 2,5x)
liggiorgio

Вы имеете в виду, что они не удосужились сделать это настройкой по умолчанию?!? Я только что проверил и что по умолчанию в Game Maker 8.0 по умолчанию. Это просто чокнутый .... Отличный ответ, кстати.
user64742

5

Никто не хочет иметь дело с необходимостью вручную масштабировать каждый спрайт; Мало того, что это неаккуратное рабочее пространство, но это очень непрофессионально. Я нашел решение, когда отключение интерполяции в глобальных настройках игры не работало.

texture_set_interpolation(false);

:) Я надеюсь, что это поможет вам в ваших будущих начинаниях.


Это лучшее решение, если вы нацелены на несколько платформ, вам не нужно нажимать «Интерполировать цвета между пикселями» для каждой отдельной платформы! Именно то, что я искал.
Логан Пикап

1

Для этого я обычно использую Photoshop или GIMP (масштаб / ближайший сосед)

Но чтобы сделать это в редакторе спрайтов GM: S, я использую команду Stretch вместо масштаба и задаю для нее Плохое качество. Это сохранит блочный видСнимок из игры, в которой я работаю над банкоматом, спрайт увеличен в самой GM: S

Выше я играю в банкомате, я так и сделал!


Хотя это работает для масштабирования в определенных разрешениях, но не для всех из них, GM также имеет привычку сжимать текстуры по умолчанию. Это также будет по-разному масштабироваться на разных разрешениях при использовании функции растяжения, это приведет к размытию, которое мы пытаемся избежать. Тем не менее, +1 для (Scale / Nearest Neighbor) упоминания.
Том Блю Пиддок

1

Отключите функцию масштабирования на вкладке "Фоны" на карте. Если он кажется не в масштабе, убедитесь, что ваша текстура на заднем плане имеет тот же размер, что и комната / карта, на которой вы находитесь.

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

При этом используются поверхности, поэтому, если вам нужна дополнительная помощь по этому вопросу, этот пост содержит много информации.


РЕДАКТИРОВАТЬ:

Возвращаясь к своим ответам, я понял, что это не совсем «нуля» и требует учебного содержания. Вот:

ШАГ 1 : Выберите нужный масштаб. Используйте представление для каждой комнаты и соответственно масштабируйте порт W и порт H. Так, например, если бы вы использовали шкалу 2 ... это выглядело бы так в редакторе комнат GM.

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

ШАГ 2. Создайте 3 сценария: screen_init, screen_begin и screen_end. Вот что входит в каждый из сценариев ...

Цитата из: screen_init

// screen base(view_wview and view_hview)
screen_x = 0;
screen_y = 0;
screen_w = 320;
screen_h = 240;
screen_scale = 2;

// create a surface for the whole screen to be drawn on
screen = surface_create(screen_w,screen_h);

// this will destroy the screen object if surfaces are not supported on the graphics card, reverting to the viewport method
if screen = -1{instance_destroy();}

Цитата из: screen_begin

// this draws the surface on the screen
surface_reset_target();
draw_clear(0);
draw_set_blend_mode_ext(bm_one, bm_zero);
draw_surface_stretched(screen,screen_x,screen_y,screen_w*screen_scale,screen_h*screen_scale);
draw_set_blend_mode(bm_normal);
screen_refresh();

Цитата из: screen_end

// this sets surface 'screen' as the drawing target for everything in the game, so all drawing will be done on this surface and not on the game screen
surface_set_target(screen);

ШАГ 3 : Теперь у нас есть сценарии, но куда они идут? Создать объект. Например, obj_screen, objScreen, o_screen или что-то еще, и сделайте следующее:

  • A) Поместите screen_initscript в событие Create.
  • B) поместите скрипт screen_begin в событие Begin Step.
  • C) Поместите скрипт screen_end в событие End Step.

Поместите этот объект в первую и первую комнату вашей игры, отметьте его как постоянный и убедитесь, что на нем нет дубликатов.

Вы сделали, и теперь есть хорошее, четкое масштабирование = D


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

Маловероятно, что студия Game Maker выполняет масштабирование с помощью алгоритма масштабирования с плохим масштабированием, который часто приводит к нежелательному размытию масштабирования. Используйте учебник, который я только что отредактировал в своем ответе, чтобы попробовать четкий фон с масштабированием.
Том Блю Пиддок

Вы рассматривали возможность предварительного масштабирования фоновой текстуры в графической программе?
Филипп

Два способа хороши. Сначала объедините некоторые скрипты. Вторая - это предварительное масштабирование изображений перед их использованием.
mpower

Отлично, рад, что это помогло.
Том Блю Пиддок

-2

Используйте, texture_set_interpolation(false)чтобы нарисовать их как есть.


Это может быть правильно, но не могли бы вы рассказать подробнее? Мы обычно ищем немного больше деталей в наших ответах.
Гнемлок
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.