Спрайт (комп'ютерна графіка)
Спрайт — двомірне зображення, що застосовується в комп'ютерній графіці.
Частіше за все — растрове зображення, що вільно переміщується по екрану[1]. Спостереження за спрайтом під невідповідним кутом приводить до розкриття ілюзії. Тобто легше за все сприймати спрайт, як проекцію, що переміщуються в просторі так, що різниця не помітна.
Billboard — спрайт, постійно повернений обличчям до камери (по аналогії з рекламними щитами на автодорогах, які повернені під найбільш вигідним кутом).
Impostor — спрайт, який замінює тривимірну модель на великій відстані.
Слово спрайт походить від англ. Sprite — фея, ельф. Чи означає це поняття об'єкт комп'ютерної графіки. Але в більш вузькому сенсі спрайт є кілька картинок, які поєднані в одну.
Використовується спрайт в наступних системах:
- графічних (спрайт у вигляді комп'ютера);
- веб-системах, CSS (з'єднують групу файлів в один, щоб інтернет-сторінки швидше завантажувалися і швидкість роботи інтернету не знижувалася);
- оптимізаційних (забезпечують більш легке і економічне створення тривимірних елементів).
Виділяють два види спрайту: такий, який завжди звернений лицьовою стороною до камери, і спрайт, який виступає як заміна моделі з трьома вимірами при великих відстанях.
Походження терміну
Слово «спрайт» було вигадане в 1970-ті роки одним працівником компанії Texas Instruments: їх нова мікросхема TMS9918 могла апаратно показувати невелике зображення поверх нерухомого фону[2].
Спрайти у двовимірній графіці
З початку під спрайтами розуміли невеликі зображення, які виводилися на екран з використанням апаратного прискорення. На деяких машинах (MSX 1, NES) програмне відмальовування приводило до певних обмежень, а апаратні спрайти цього обмеження не мали. Внаслідок зі збільшенням центрального процесора, від апаратних спрайтів відмовились, і поняття «спрайт» розповсюдилось на всіх двовимірних персонажів. В тому числі, в відеоіграх Super Mario та Heroes of Might and Magic вся графіка спрайтова.
До апаратно прискорених спрайтів повернулись в середині 1990-х років — коли розвиток мультимедіа та вибухове підвищення роздільної здатності та глибини кольору потребувало спеціалізованих процесорів в відеоплаті. Саме тоді, вийшов DirectDraw. DirectX 8 ввів загальний API для дво- і тривимірної графіки, і в сучасних спрайтових іграх двовимірні спрайти виводяться так само, як і тривимірні — як текстурований прямокутник.
Спрайт у тривимірній графіці
У перших тривимірних іграх, наприклад, Wolfenstein 3D (1992) і Doom (1993), персонажі відображались за допомогою двовимірних малюнків, що змінюють розмір в залежності від відстані до них.
На 3D-акселераторах
На 3D-акселераторах застосовується така техніка: об'єкт малюється у вигляді площини з накладеною на неї текстурою з прозорими областями. Ця технологія застосовується в трьох випадках.
Оптимізація
Спрайти можуть застосовуватися для оптимізації графічного ядра, коли відображення тривимірної деталізованої моделі занадто складне і може привести до сильного падіння швидкості рендеринга. Такими є:
- Об'єкти, присутні в сцені у великій кількості і які, якби були тривимірними, мали б велику кількість граней і дуже сильно впливали б на продуктивність — наприклад, публіка, трава тощо.
- Віддалені об'єкти, які поблизу малюються полігональними моделями.
Спецефекти
Деякі спецефекти (наприклад, вогонь) виконуються спрайтами, бо полігональний вогонь погано виглядає. Порівняйте, наприклад, вибухи в Quake II і Unreal Tournament.
Для більшої правдоподібності зображення використовується велика кількість порівняно маленьких спрайтів (так звана система частинок).
Відео в реальному житті
Зрідка спрайт застосовуються для додавання в гру живого фото або відео. Наприклад:
- Живі актори, наприклад в realMyst.
- Важелі управління в симуляторах літаків, поїздів тощо, сфотографовані в реальній кабіні. Варто зауважити, що в деяких спрайтових іграх, таких, як Rise of the Triad, спрайти фотографувалися з акторів, а не з моделей, іграшок або малюнків. Поява шейдерів частково знімає потребу в живій зйомці — багато нюансів фотозображення вже можна передати полігональними моделями в реальному часі.
CSS-спрайт
Застосовуються в інтернеті. Кілька зображень розташовуються в одному графічному файлі. Для того, щоб вирізати з файлу потрібний шматок, застосовується CSS — звідси назва технології. CSS-спрайти економлять трафік і прискорюють завантаження — браузеру буде потрібно запитувати менше файлів.
«Руйнування ілюзії»
Спостереження спрайту під відповідним кутом призводить до руйнування ілюзії. Залежно від математичного апарату рендеринга (рушія), руйнування може відбуватися двома способами.
«Ефект портрета». Спрайтовий об'єкт постійно тримається до спостерігача нормаллю до поверхні, що призводить до того, що він візуально «повертається» весь час до нього «обличчям». У невеликих межах це непомітно, але при погляді, скажімо, на монстра зверху він може виявитися «лежачим на спині» на горизонтальній підлозі і при цьому перебирати ногами, та ще й бігти у потрібному напрямку, не змінюючи більш ніж дивної пози. Для боротьби з цим ефектом застосовуються набори з великого числа спрайтів, знятих з різних напрямків, які підміняють один одного в залежності від кута спостереження, але момент переходу від спрайту до спрайту також вельми помітний.
«Ефект Єльцина». Названий через схожість спрайту з картонними портретами першого президента РФ, призначеними для фотографій-сувенірів і встановлюваними в людних місцях в 90-ті роки, що збіглися з розквітом спрайтових ігор. Виникає, якщо спрайт не повертається нормаллю до поверхні до спостерігача, видаючи «площинність» об'єкта навіть при невеликих змінах кута спостереження. Характерний для апаратно-рендерених спрайтів, введених у полігональний рушій як допоміжні.
Виведення спрайтів
В іграх спрайтами є зображення героя, супротивника, різних рухливих предметів. Фон також може складатися з рухомих або нерухомих спрайтів. Якщо вони мають однаковий розмір і розташовані на рівномірній сітці, вони називаються «тайлами» (англ. tile — плитка).
На ігрових консолях і більшості домашніх комп'ютерів кінця 1970-х — початку 1990-х спрайти підтримуються на апаратному рівні й виводяться відеоконтролером над зображенням фону. Це дозволяє дуже швидко «виводити» спрайт в потрібне місце екрану, просто вказавши координати, а також позбавляє від необхідності відновлювати фон під спрайтом. Недоліком такого підходу є велика кількість непереборних обмежень, що накладаються на кількість відображуваних спрайтів на екрані і на одному рядку растра, а також на розміри спрайтів. Серед безпосередньо конкурентних із ZX Spectrum комп'ютерів, що мають апаратну підтримку спрайтів, такі комп'ютери, як Atari (8-бітна лінійка), Commodore 64 і MSX.
На ZX Spectrum і деяких інших домашніх комп'ютерах 1980-х, також входили в нижню цінову категорію, а також на всіх вітчизняних побутових комп'ютерах, апаратна підтримка спрайтів відсутня. Вони виводяться програмно, шляхом використання часу процесора. Висновок спрайтів є ресурсомістким завданням. Швидкість виведення спрайтів сильно залежить від їх розмірів і кількості, але обмеження на розміри і кількість спрайтів на екрані та на рядку растра відсутні.
Однією з основних труднощів, що виникають при виведенні спрайтів на ZX Spectrum, є позиціювання по горизонталі з точністю до пікселя, бо у відеопам'яті кожні вісім сусідніх по горизонталі точок представлені бітами одного байта. Для економії пам'яті може використовуватися один екземпляр спрайту і зрушуватися на потрібну кількість пікселів при виведенні. Для збільшення швидкодії в пам'яті може зберігатися вісім (або менше) заздалегідь зсунутих примірників спрайту. Для дзеркального відображення спрайту по горизонталі також може використовуватися або повільне відображення в процесі виведення, або заздалегідь підготовлені копії.
При виведенні спрайти можуть накладатися на все, що існує у вигляді зображення різними способами. При накладенні за допомогою логічних операцій типу OR або XOR відбувається сильне спотворення графіки. Для усунення цього ефекту використовуються так звані «маски». Основне 1-бітове зображення спрайту вказує, які пікселі повинні бути намальовані, а 1-бітове зображення маски вказує, які пікселі повинні бути стерті перед виведенням. Таким чином, спрайт з маскою є 2-бітове зображення. Маски можуть малюватися художником вручну і зберігатися в пам'яті, подвоюючи обсяг пам'яті, необхідної для зберігання спрайтів. Для економії пам'яті маски можуть генеруватися програмно на основі зображення спрайту за потреби (але не в процесі виведення), або зберігатися зі зниженим дозволом. Бо висновок спрайтів з масками повільніший, ніж без масок, в іграх в залежності від ситуації деякі спрайти можуть не використовувати маски — в грі Exolon спрайт героя і деяких великих об'єктів мають маски, а спрайт осколків вибухів і невеликих супротивників виводяться без масок.
Для економії пам'яті в деяких іграх використовувалися трюки — так, в грі Renegade спрайти персонажів складалися з двох частин, при цьому нижня частина тіла була однаковою для всіх персонажів.
Через обмежені можливості по відображенню кольору спрайт на ZX Spectrum бувають кольоровими тільки при великому графіку і виведення, як в іграх Astro Marine Corps або Savage. В інших випадках спрайти або монохромні і забарвлюють фон у свій колір (ефект клешінга), або не мають власного кольору, забарвлюючись в колір фону.
Графіка спрайтів може створюватися в графічних редакторах загального призначення, але з огляду на наявність певної специфіки (маски, анімація) були створені спеціалізовані редактори спрайтів.
Див. також
- Кадрування
- Microsoft Agent
Примітки
- sprite definition — Dictionary — MSN Encarta. Архів оригіналу за 25 травня 2009. Процитовано 21 лютого 2015.
- Karl Guttag Conference on Delphi TI Net — Google Groups