Як точно обчислити покриття перекриваються аналітичних кривих?


10

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

Як би це було обчислено, якби ви дбали про повну точність? Навіть складніше, як ви точно обчислюєте покриття для перекриття не полігональних форм, як криві? Чи є якийсь момент, коли у вас немає іншого вибору, окрім як повернутися до багатошарових та стохастичних прийомів?

Відповіді:


10

Насправді немає хорошого способу зробити це ефективно аналітично для всіх кутових справ. Більшість або всі комерційні 2D-рендері, які намагаються зробити аналітичний обчислення покриття, роблять передбачувані помилки, яких не мають мультисемплінг-методи.

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

зображення

Зображення 1 : Двигун візуалізації плутає покриття і робить тонкий білий контур там, де не має бути контуру.

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

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

Як це зробити аналітично

Аналітична сцена

Зображення 2 : Припустимо, у вас є ця сцена, вибухнув вигляд справа

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

Те, що вам потрібно зробити, - це розділити сцену так, щоб кожна фігура усувала те, що знаходиться під іншим:

введіть тут опис зображення

Зображення 3 : Вам потрібно вирізати основи.

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

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

Пам'ятайте:

  • Розрахунок AA потрібно робити в лінійному кольоровому просторі та перетворювати назад, щоб використовувати простір.

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

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