Антизгладжування / фільтрування у програмі Tracing Ray


20

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

У пошуках Інтернету я знайшов два дещо різні методи для цього:

  1. Створюйте зразки, як вам потрібно, і зважте результат за допомогою фільтра
    • Один із прикладів - PBRT
  2. Створіть зразки з розподілом, рівним формі фільтра


Створіть і зважте

Основний процес:

  1. Створюйте зразки, як вам завгодно (випадкові, стратифіковані, з низькою невідповідністю і т.д.)
  2. Зсув промінь камери за допомогою двох зразків (x і y)
  3. Візуалізуйте сцену промінням
  4. Обчисліть вагу, використовуючи функцію фільтра та відстань вибірки по відношенню до піксельного центру. Наприклад, фільтр для коробки, фільтр для наметів, фільтр Гаусса тощо) Фільтруючі форми
  5. Нанесіть вагу на колір із візуалізації


Створіть у формі фільтра

Основна передумова - використовувати вибір зворотного перетворення для створення зразків, які розподіляються відповідно до форми фільтра. Наприклад, гістограма зразків, розподілених у формі Гаусса:
Гістограма Гаусса

Це можна зробити точно, або ввібравши функцію в дискретний pdf / cdf. smallpt використовує точний зворотний cdf фільтр для наметів. Приклади методу бінінгу можна знайти тут


Запитання

Які плюси і мінуси кожного методу? І навіщо ви використовувати одне над іншим? Я можу придумати кілька речей:

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

Генерування у формі фільтра може підтримувати лише позитивні форми фільтру (тобто немає Мітчелла, Катмулла Рома чи Ланцоса), оскільки у вас не може бути негативного PDF-файлу. Але, як було сказано вище, це легше здійснити, оскільки не потрібно відстежувати будь-яку вагу.

Хоча, врешті-решт, я думаю, що ви можете розглядати метод 2 як спрощення способу 1, оскільки він по суті використовує неявну вагу фільтру Box.


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

Можливо? Лемме трохи
поспішає

1
Гаразд, якщо ви відстежуєте нулі функції, ви можете abs () виводити в pdf. Тоді під час вибірки ви можете перевірити, чи маєте ви негативний характер. Приклад коду тут: gist.github.com/RichieSams/aa7e71a0fb4720c8cb41
RichieSams

Відповіді:


9

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

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

У статті вони також експериментували з фільтром Мітчелла, беручи проби з abs () фільтра, а потім зважуючи кожен зразок або +1, або -1, як пропонує @trichoplax. Але це в кінцевому підсумку збільшило дисперсію і було гірше, ніж метод 1, тому вони роблять висновок, що метод 2 корисний лише для позитивних фільтрів.

Незважаючи на це, результати цієї роботи можуть не бути загальноприйнятними, і це може бути дещо залежно від сцени, який метод вибірки є кращим. Я написав допис у блозі, який досліджував це питаннянезалежно в 2014 році, використовуючи синтетичну "функцію зображення", а не повну візуалізацію, і знайшов метод 1, щоб отримати більш візуально приємні результати за рахунок більш вирівнювання країв з високою контрастністю. Бенедікт Біттерлі також прокоментував цю посаду, яка повідомила про подібну проблему зі своїм рендером (надмірний високочастотний шум навколо джерел світла при використанні методу 2). Крім того, я виявив, що головна відмінність методів полягала в частоті звуку, що виникає: метод 2 видає шум більш високої частоти, "розмір пікселя", тоді як метод 1 видає шум "зерна", що становить 2-3 пікселі, але амплітуда шуму була однаковою для обох, тому який тип шуму виглядає менш погано, мабуть, питання особистої переваги.


Спасибі! Це великі ресурси. Отже, зрештою, є 3 методи? 1. Створити та зважити за допомогою бризок 2. Створити та зважити без бризок 3. Створити у формі фільтра
RichieSams

Чи знаєте ви про будь-які документи, блоги та ін., Які вивчають, як паралелізувати створення та вагу з бризканням? У верхній частині моєї голови ви можете мати мутекс на плитку або зробити кожен піксель атомарним.
RichieSams

2
@RichieSams Я не знаю, чому ви використовуєте "генерувати та зважувати без бризок" - це, здається, було б гірше в будь-якому випадку, ніж вибірка важливості фільтра. Я припускав, що "генерувати і зважувати" передбачає бризки. Що стосується паралелізації бризок, вгорі моєї голови, одним із способів було б розділити зображення на плитки, але надати кожній плитці межі 2‒3 пікселів, щоб зафіксувати бризки, що перетинають край плитки. Потім, в остаточному проході, додатково складіть облямівану плитку разом у кінцеве зображення.
Натан Рід
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.