Об'єм легкого розповсюдження: Анізотропна фільтрація даних про об'єм


9

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

Короткий підсумок

Ви можете пропустити це, якщо вже знаєте, як працює алгоритм.

Алгоритм працює, зберігаючи інформацію про освітлення у вигляді сферичних гармонік у 3D-сітці, де спочатку дані у кожній комірці сітки надходять від надання розширеної тіньової карти ( відбивна карта тіней), що також включає глибину кольору та звичайну інформацію. Ідея полягає в тому, що по суті всі пікселі, які бачать джерело світла, є причиною першого відскоку непрямого освітлення, тому ви зберігаєте необхідну інформацію поряд із звичайним буфером глибини, який ви використовуєте для тіньового відображення, та вибираєте всі дані для ініціалізації 3D-сітки . Інформація в 3D-сітці потім ітераційно поширюється шляхом (для кожної ітерації) поширення інформації в одній клітині всім 6 її прямим сусідам (вгорі, внизу, ліворуч, праворуч, вгорі, внизу). Щоб освітлити сцену, використовуючи інформацію в сітці, ви застосуєте повний екран проходу над вашою сценою, і для кожного растерізованого пікселя у вас є доступна позиція світового простору растерізованої поверхні (наприклад, від G-буферів у відкладеному затіненні), тож знати, до якої комірки сітки належить певний піксель на екрані.

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

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

Проблема

При огляді осередків під час етапу освітлення використовується трилінійна інтерполяція (за допомогою апаратних фільтрів текстури) для плавної інтерполяції даних між центром клітини, її сусідніми клітинками та фактичною координатою текстури. По суті, ця інтерполяція імітує поширення освітлювальної інформації в центрі комірки до конкретних пікселів навколо центру, де інформація шукається. Це потрібно, тому що в іншому випадку освітлення виглядало б дуже грубо і потворно. Однак, оскільки трилінійна інтерполяція не враховує напрямок розповсюдження світла освітлювальної інформації, кодованої в комірці (пам’ятайте, це в сферичних гармоніках), світло може бути неправильно розповсюджений на шуканий піксель. Наприклад, якщо сияння, кодоване в комірці, поширюється лише у напрямку (1,0,0) ("

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

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

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

Актуальне питання

Автор пропонує форму ручної анізотропної фільтрації, щоб виправити це. Він дає градієнт випромінювання (я припускаю коефіцієнти SH, відібрані з поточної комірки) у напрямку до нормальної поверхні n як:

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

І держави

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

Мої питання:

В рівнянні функція c (x) здається коефіцієнтами SH в точці (x). Отже градієнт випромінювання, здається, обчислюється як звичайний числовий дериват, як зважена різниця коефіцієнтів SH в точках x - (n / 2) і x + (n / 2). Однак що таке c (x) в моєму контексті? В даний час я припускаю, що c (x) відноситься до трилінійно інтерпольованих коефіцієнтів при розташуванні поверхні (x), але я зовсім не впевнений, оскільки не знаю, як це повинно дати вам більше інформації про спрямованість розподіл коефіцієнтів SH.

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

Він згадує про використання «центральної схеми розрізнення» і посилається на ці слайди для центрального розрізнення коефіцієнтів SH, а також посилається на цей документ, який показує похідні градієнта, але зараз я не можу зробити з них жодних корисних висновків.

Відповіді:


4

Центральна відмінність була внесена папером AMD, коли вони робили деяку демонстрацію із кришталевим польотом у тунелі, з пам'яті.

The cФункція Не повинно бути що - то точно, просто ідея, наприклад, світність, так просто оцінити SH , використовуючи поточний нормальний.

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

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

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

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

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

Ви можете лише висмоктати його і спробувати пом'якшити проблеми, надавши LPV менш сильне заключне слово на кінцевому непрямому світлі, використовувати постійний термін з вагою (0,5?), І LPV може сприяти решти 0,5 непрямого світла. Також спробуйте реалізувати об'єм геометрії, це зменшить проблему. І нарешті центральна різниця.


як покращення понад 50% постійного навколишнього середовища, може бути використана методика під назвою "навколишній BRDF" (за допомогою Tri-Ace).
v.oddou
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.