Відсікання (комп'ютерна графіка)
Відсікання (англ. clipping), у комп'ютерній графіці, є способом для вибіркового включення, або відключення операцій рендерингу в межах визначеної області інтересу. З точки зору математики, відсікання може бути описане у термінах конструктивної геометрії. Алгоритм рендерингу малює лише ті пікселі, які потрапляють у поле зору спостерігача. Лінії та поверхні за межами об'єму видимості видаляються.[1]
Відсікання використовується для підвищення швидкодії рендерингу. Вдало обране відсікання дозволяє процесу рендерингу заощадити час і обчислювальні потужності шляхом пропуску розрахунку пікселів, яких не видимі для користувача. Про пікселі, що будуть зображені, кажуть, що вони знаходяться в межах області відсікання. Про пікселі, що не будуть намальовані або розташовані за межами області видимості, кажуть, що вони «відсічені».
Відсікання в 2D графіці
У двовимірній графіці область відсікання може бути визначено таким чином, що відображатимуться пікселі лише в межах вікна або кадру. Області відсікання також можуть застосовуватися для вибіркового контролю рендерингу пікселів задля естетичних або художніх цілей. У багатьох реалізаціях фінальна область відсічення — це композиція (або перетин) однієї або декількох визначених додатком фігур, або будь-яким обмеженням апаратного забезпечення.
Як приклад застосунку, розглянемо програму для редагування зображень. Застосунок користувача може виконати рендеринг зображення у вікно перегляду. Коли користувач використовує масштабування і прокрутку для перегляду частини зображення, застосунок встановлювати межі відсікання так, що пікселі поза областю видимості оброблятися не будуть. Крім того, віджети з графічним інтерфейсом можуть накладатись, і віконний інтерфейс може приховати деякі пікселі початкового зображення. У цьому сенсі, область відсікання є композицією області відсікання визначеної користувачем і області відсікання визначеної пристроєм, що втілюється програмним забезпеченням і апаратною реалізацією системи.[2] Застосунок може скористатися інформацією про відсікання, щоб скоротити час розрахунку сцени, зберегти обчислювальні ресурси та пам'ять, уникаючи розрахунку пікселів, які знаходяться поза областю видимості.
Відсікання у 3D графіці
У тривимірній графіці термін «відсікання» може використовуватись для опису багатьох пов'язаних між собою функцій. Зазвичай, «відсікання» належить до операцій на площині, які працюють з прямокутними формами, а «відкидання» відноситься до більш загальних методів відбору елементів сцени. Ця термінологія не є чітко визначеною, тому точне використання може відрізнятись у різних джерелах.
Елементи моделі сцени містять у собі геометричні примітиви: точки, або вершини; відрізки лінії, або ребра; полігони, або грані; і більш абстрактні об'єкти, такі як криві, сплайни, поверхні й навіть текст. У складних моделях сцен, окремі елементи можуть бути вибірково відключені (відсічені) з деяких причин, серед яких — видимість в межах області перегляду (визначення прихованої поверхні), орієнтація (визначення невидимої поверхні), затемнення іншими сценами або елементами моделей (оклюзії вибраковування, відсікання у глибину). Існують складні алгоритми для ефективного виявлення і виконання відсікання. Багато оптимізованих методів відсікання покладаються на конкретну логіку апаратного прискорення, яку забезпечує графічний процесор (GPU).
Поняття відсікання може бути розширене до більшої розмірності за допомогою методів абстрактної алгебраїчної геометрії.
Ближнє відсікання
Окрім проекції вершин та 2D-відсікання, для коректної растеризації тривимірних примітивів потрібне ближнє відсікання. Це пов'язано із тим, що вершини, можуть проектуватися за областю видимості. Ближнє відсікання гарантує, що всі використані вершини мають дійсні 2D координати. Разом із глибинним відсіканням ближнє відсікання також допомагає запобігти переповненню значень буфера глибини. Деякі апаратні засоби раннього відображення текстур (із використанням прямого відображення текстур) у відеоіграх страждали від ускладнень, пов'язаних із близьким відсіканням та УФ-координатами.
Оклюзивне відсікання (Z— або глибинне відсікання)
У 3D комп'ютерній графіці, «Z» часто належить до осі глибини в системі координат системі координат з центром у початку координат вікна перегляду: «Z» використовується взаємозамінно з «глибиною», і концептуально відповідає відстані до «віртуального екрана». У цій системі координат «X» і «Y» відносяться до звичайної декартової системи координат, створеної на екрані користувача, або у вікні перегляду. Ця область перегляду визначається геометрією піраміди огляду, і параметризує поле зору.
Z-відсікання, або глибинне відсікання, належить до методів, які вибірково відображають певні об'єкти сцени на основі їх глибини щодо екрана. Більшість графічних інструментів дозволяють розробнику вказати глибину сцени: «поблизу» чи «далеко». І відображатимуться лише частини об'єктів між цими двома площинами. Розробник додатків може використовувати цей метод для візуалізації інтер'єру тривимірного об'єкта на сцені. Наприклад, медична візуалізація може використовувати цей метод для відображення органів всередині людського тіла. При розробці відеоігор інформація про відсікання може бути використана для прискорення логіки гри.[3] Наприклад, висока стіна або будівля, що закриває інші ігрові сутності, може заощадити час графічного процесора, який інакше витрачався б на трансформацію та текстурування предметів у тильних областях сцени. Програма орієнтована на максимальну продуктивність може використовувати ту саму інформацію про відсікання, щоб заощадити час процесора, оптимізуючи ігрову логіку для об'єктів, які гравець не бачить.[4]
Важливість відсікання у відео іграх
Вибір надійної стратегії відсікання має важливу роль при розробці відеоігор, щоб максимізувати частоту кадрів і якість зображення. Незважаючи на чіпи графічного процесора, які з кожним роком стають тільки швидшими, перетворення, текстурування і затінення полігонів сцени залишається обчислювально дорогим, особливо завдяки множинним текстурам та ефектам затінень, які є поширеними сьогодні. Отже, розробники відеоігор повинні працювати в межах певного «бюджету» з багатокутників, які можна відтворити для кожного відеокадру.
Для максимізації візуальної складової гри, розробники надають перевагу естетичній складовій, а не апаратному обмеженню на кількість полігонів. Оптимізація, дозволяє покращити продуктивність, та скористатися перевагами прискорення графічного процесора, який покращує дії гравця.
Оптимізація відсікання може пришвидшити візуалізацію поточної сцени, економлячи використання часу і пам'яті для візуалізації в межах можливостей апаратного забезпечення. Програмісти часто розробляють розумні евристичні алгоритми, щоб пришвидшити процес відсікання, оскільки іноді обчислювально заборонено використовувати трасування прямими, або трасування променів, щоб зі 100 % точністю визначити, які полігони не знаходяться в полі зору камери. Структури даних, такі як дерево октантів, R*-дерева та ієрархії обмежувальних об'єктів можуть бути використані для розділення сцени на відтворені та не відтворені області (дозволяючи засобу відтворення відхиляти, або приймати цілі вузли дерев, де це доречно).
Оптимізація оклюзії з точки зору геометрії може призвести до появи артефактів, якщо сцена містить поверхні, що відбивають світло. Поширеним методом є віддзеркалення відображення, який може додатково використовувати наявні оцінки оклюзії для поточної піраміди огляду, або, якщо продуктивність графічного процесора дозволяє, є метод розрахунку нової карти оклюзії з окремого положення камери.
З історичних причин деякі відеоігри використовували алгоритм виявлення зіткнень з однаковою логікою та апаратним прискоренням як тест на оклюзію. Як результат, неспеціалісти неправильно вживали термін «кліп» (та його антонім «режим noclip») для позначення виявлення зіткнень.
Алгоритми
- Алгоритми відсікання ліній:
- Коена-Сазерленда
- Ліанга–Барського
- Швидке відсікання
- Кіруса — Бека
- Ніколла-Лі-Ніколла
- Скала
- O(lg N) алгоритм
- Алгоритми відсікання полігонів:
- Грейнера-Хормана
- Сазерленда-Ходжмена
- Вайлера-Атертона
- Вотта
- Техніки рендерингу
Див. також
- Булеві операції над полігонами
- Bounding Box
- Простір кліпу
- Ефект туману
- Відсікання захисної смуги
- Визначення прихованої поверхні
- Обрізка дерева рішень
- Видимість (геометрія)
Додаткова література
- GPU Gems: Efficient Occlusion Culling[5]
- Відсікання у Java AWT: java.awt.Graphics.clipRect JavaDoc[2]
- Відсікання у UIKit for iOS (2D): UIRectClip
- Відсікання у SceneKit for iOS (3D): SCNCamera (Adjusting Camera Perspective)
- Відсікання у OpenGL: OpenGL Technical FAQs: Clipping, Culling, and Visibility Testing[6]
Примітки
- Bertoline, Gary; Wiebe, Eric (2002). Fundamentals of Graphics Communication (вид. 3rd). McGraw-Hill. с. G-3. ISBN 0-07-232209-8. Процитовано 4 січня 2015.
- java.awt.Graphics.clipRect. Oracle. 2014.
- Sekulic, Dean (2004). Efficient Occlusion Culling. GPU Gems. Pearson. Архів оригіналу за 5 червня 2013. Процитовано 2 січня 2015.
- Sekulic, Dean (2004). Efficient Occlusion Culling. GPU Gems. Pearson. Архів оригіналу за 5 червня 2013. Процитовано 2 січня 2015.
- Sekulic, Dean (2004). Efficient Occlusion Culling. GPU Gems. Pearson. Архів оригіналу за 5 червня 2013. Процитовано 2 січня 2015.
- Paul Martz (2001). Clipping, Culling, and Visibility Testing. OpenGL.org. Процитовано 2 січня 2015.