Як зменшити масштаб піксельного зображення?


14

Є багато алгоритмів для масштабованих до піксельної графіки. (Я віддаю перевагу hqx , особисто.) Але чи існують якісь помітні алгоритми, щоб їх зменшити ? Моя гра призначена для роботи з роздільною здатністю 1280x720, але якщо вона буде грати з меншою роздільною здатністю, я все-таки хочу, щоб вона виглядала добре.

Більшість піксельних мистецьких дискусій зосереджуються навколо 320x200або 640x480збільшують масштаб для використання в консольних емуляторах, але мені цікаво, як сучасні 2D ігри, як Monkey Island Remake, можуть виглядати добре на нижчих роздільних здатностях?

Звичайно, ігноруючи можливість наявності декількох версій активів (тобто міповідтворення ).


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

@SethBattin Я не впевнений. Я думаю про запуск гри, зробленої для 1280x720, наприклад, 1024x576. Що OpenGL та DirectX використовують для масштабування, якщо я надаю йому зображення розміром 128x96 і повинно відображатися у форматі 102x76? (що навіть є проблемою округлення, оскільки вона повинна становити 102,4x76,8 пікселів)
Michael Stum

Mipmapping сильно розмиває зображення. Ви б не хотіли цього для pixelart.
Кромстер

5
Просто FYI: Остров мавп Рімейк не потребував зменшення масштабу. Гра працювала на EGA та мала ефективний розмір 320x200 пікселів. Не потрібно створювати зменшені версії цього пристрою для мобільних пристроїв, оскільки це вже менше, ніж роздільна здатність цих пристроїв на сьогодні.
bummzack

2
Як виглядає ваше піксельне мистецтво? Ви просите нас відповісти сліпотою.
aaaaaaaaaaaa

Відповіді:


14

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

На мою думку, ви можете зробити кілька речей (деякі - ексклюзивні, а інші - ні)

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

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

  3. Якщо розширення гри неможливо, заповніть неігрові розділи екрану чорним кольором; або смуги вгорі і внизу, зліва і справа, або чорна рамка. Це те, що робить iPad під час роботи додатків iPhone у збільшеному режимі. Це також широко використовується в емуляторах.

  4. Відмовтеся від збереження вірності піксельної сітки. Але тоді вам доведеться припинити використання піксельних зображень із гострими кутами. Потім підвищуйте / зменшуйте масштаб за допомогою білінеарної (або оптимально бікубічної, якщо ваша платформа підтримує її) фільтрації. Це найкращий вибір для максимального використання екрану, зберігаючи при цьому користувацьку роботу, схожу в усіх підтримуваних резолюціях.

У своїй грі я закінчив робити варіант №4, і я дуже здивований тим, наскільки добре це виглядає на пристроях від 320 пікселів на вертикалі (старий Android 2.3) до 1536 пікселів на вертикалі (iPad 2012 року з дисплей сітківки). Оригінальні активи розраховані на 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

Зміна розміру простіше, ніж зміни розміру, тому що ви вибираєте інформацію для викидання, а не вигадувати нову (і, можливо, неправильну) інформацію для заповнення прогалин. Зважаючи на це, вам, мабуть, тут не потрібно нічого особливого, і більшість стандартних алгоритмів перекомпонування з царини обробки зображень повинні працювати досить добре для зменшення розміру зображення: білінеарного, гауссового, ланцоського тощо.

Зокрема, Ланцо може бути цікавим вибором, оскільки він різко збільшує зображення, можливо, зберігаючи деталі, які в іншому випадку можуть бути втрачені при поєднанні декількох пікселів в один. Очевидно, це пов'язано з можливим введенням небажаних артефактів.

Деякі візуальні порівняння тут: /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.