Що таке технічне визначення поняття "спрайт-дозування"?


17

Платформа та мова агностично, як визначається обробка спрайту? Схоже, існує безліч різних технік зменшення обсягу роботи під час малювання, і що вони часто забиваються "дозуванням". Мені здається, що справжня відповідь може не бути, але, можливо, хтось тут знайшов щось, чого я не маю.

Відповіді:


14

Технічно "пакетне" введення декількох дій та їх даних в одну структуру даних, щоб все це можна було виконати одразу, а не окремо.

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

Дозація особливо корисна для спрайтів через смішно невелику кількість даних на спрайт; чотири вершини та чотири текстові координати. Тож накладні витрати на невеликий пакет пропорційно великі.


1
+1 для згадування проблеми затримки; Це той самий принцип, що стосується мережевого трафіку та дискового вводу / виводу - в загальному випадку дуже мало великих партій козиряє безліччю невеликих партій.
Максим Мінімус

9

Дозатор Sprite - це метод подання декількох спрайтів до GPU за допомогою одного дзвінка виклику.

Жоден з інших відповідей не вказує на реальний сенс цього: мінімізація змін стану та подання команд GPU. Якщо у вас є 100 спрайтів, які я малюю, кожен має свою текстуру, апаратне забезпечення може обробляти лише один спрайт за один раз. Десятки і навіть тисячі ядер шейдерів в кінцевому підсумку ледве використовуються, і GPU витрачає занадто багато часу на налаштування свого стану візуалізації для текстурних комутаторів.

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

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

Тоді спрацьовування партії спрайтів робить саме це: розміщення якомога більшої кількості ваших спрайтів в одному VBO, використовуючи єдиний атлас, який подається до GPU за допомогою одного дзвінка на виклик, максимізуючи використання GPU.

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


-1: Мінімізація змін стану не є «сутністю» дозування. Це просто вимога, що випливає із структуризації OpenGL. (Це сенс тексту атласів, але про них не запитували.) Питання конкретно запитує визначення "платформи та мови агностично".
API-Beast

Тож метод малювання всього резервного буфера спочатку вирішує цю проблему як? Невже дані все ще одночасно не обробляються одним зображенням в пам'яті, а потім висуваються на передній буфер? Я думаю, що моє розуміння повинно бути дефектом.
Bloodyaugust

4
Містер Біст: це не має нічого спільного з OpenGL або будь-якою платформою чи мовою. Так реально працює саме обладнання, на всіх платформах та всіх графічних API, що використовують будь-яку мову.
Шон Міддлічч

6

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.