На зображенні нижче показано два спрайти, відображені з точковим відбором зверху:
- Лівий череп не має обертання / масштабування, застосованих до нього, тому кожен піксель ідеально співпадає з фоном.
- Правий череп обертається / зменшується, і це призводить до отримання більших пікселів , які вже не розташовані по осі .
Як я міг розробити піксельний шейдер, який би відображав трансформований спрайт праворуч з пікселями, вирівняними по осі, такого ж розміру, як і решта сцени?
Це може бути пов’язано з тим, як масштабування спрайту реалізовувалось у старих іграх, таких як Monkey Island, адже саме цього я намагаюся досягти, але з додаванням обертання.
Редагувати
Відповідно до пропозицій якDoD, я намагався вирішити проблему як пост-процес. Найпростіший підхід полягав у тому, щоб спочатку відобразити до окремої цілі візуалізації (зменшити вибірку відповідно до потрібного розміру пікселів), а потім підняти її масштаб під час повторного візуалізації. Він вирішив мої вимоги вище.
Спочатку я спробував це зробити, Linear -> Point
і результат був такий:
Немає спотворень, але результат виглядає розмитим, і він втрачає більшість кольорів, що виділяються. На мою думку, це порушує ретро-вигляд, який мені потрібен.
Вдруге я спробував, Point -> Point
і результат був такий:
Незважаючи на спотворення, я думаю, що це може бути досить гарним для моїх потреб, хоча це виглядає краще як нерухоме зображення, ніж у русі.
Щоб продемонструвати, ось відео ефекту, хоча YouTube відфільтрував пікселі з нього:
Однак я залишаю питання відкритим ще на кілька днів, якщо хтось придумає краще рішення проб, яке підтримує чіткий вигляд, зменшуючи при цьому кількість спотворень при переміщенні.
SpriteBatch
вимагає використання негайного режиму, тому проблем не варто. Я піду з цим :)