Навіщо використовувати наметний фільтр для відстеження шляху?


12

99 рядків трекера шляху С Smallpt надає сітку субпікселів 2x2 для кожного пікселя, який він має намір вивести, а потім робить наметний фільтр для їх об'єднання.

Існує цікава презентація пояснити код тут , і він згадує наметове фільтр , але не пояснює , чому він там.

Чи може хтось пояснити, чому фільтр для наметів буде кращим у цьому випадку над розмиттям коробки (просто усередненням зразків)?

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

Відповіді:


13

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

Наметний фільтр (трикутний фільтр), безумовно, більше нагадує центральну вершину фільтра sinc, ніж фільтр коробки:

фільтри sinc, трикутник і вікно

Бікубічний фільтр (наприклад, Мітчелл-Нетравалі) міг би точніше фіксувати форму синк, включаючи перші два його негативні частки.

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

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

Між іншим, smallpt фактично використовує сітку 2x2 субпікселів і розміщує наметний фільтр на кожному субпікселі , а потім усереднює результати чотирьох субпікселів. Таким чином, загальний ефект, як цікаво, складається із суми чотирьох наметів, яка виглядає як піраміда з плоским верхом:

напіксельні фільтри для наметів

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


Я не можу не сказати подяки! Насправді я вперше розумію це як стратифікований відбір з чотирьох верств. І я роблю кількість "шарів" настроюваним, як 9, 16 ... Тепер я знаю, що це "трапецієподібний" фільтр (не так часто зустрічається в інших рендерінгах). І як кількість моїх "верств" має тенденцію до нескінченності, фільтр стає коробчастим фільтром, де я малюю лілею ... Цікаво!
хаосинка

3

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

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

Коли ви дивитесь на цю картинку, вона спочатку робить це на стовпці, а потім, наприклад, на рядку.

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

Якщо всі 4 бали знаходяться на фіксованих позиціях на рівній відстані від центру, то ви отримуєте рівно 25% внеску на всі бали, це те саме, що і усереднення.

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

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

Інтерполяція Bicubic надає вам більш плавний вигляд. Двомісні: введіть тут опис зображення

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

Що краще? Ну, це залежить від того, що вам подобається, і я не думаю, що буде величезна різниця.

Мої джерела: https://en.wikipedia.org/wiki/Reconstruction_filter#Image_processing

https://en.wikipedia.org/wiki/Bilinear_interpolation

https://en.wikipedia.org/wiki/Bicubic_interpolation

(Зображення з Вікіпедії та є загальнодоступним доступом)

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

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