Метод фотонних карт

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Метод фотонних карт (англ. photon mapping) — один з найбільш універсальних та поширених алгоритмів рендерингу, який вирішує завдання інтегрування рівняння рендерингу. Алгоритм складається з трьох частин: трасування фотонів, побудови фотонної карти і збору освітленості[1].

Ефекти

[ред. | ред. код]

Каустика

[ред. | ред. код]
Каустика світла, яке пройшло через фужер

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

Дифузне відбиття світла

[ред. | ред. код]

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

Підповерхневе розсіювання

[ред. | ред. код]

Підповерхневе розсіювання — це ефект, коли світло входить в матеріал і розсіюється, перш ніж поглинається або відбивається в іншому напрямку. Підповерхневе розсіювання може точно бути змодельоване з використанням фотонних карт. Цей метод стає повільним для матеріалів, які сильно розсіюються. Функція розподілу двонаправленого розсіювання[en] є більш ефективною в таких ситуаціях.

Алгоритм

[ред. | ред. код]

Трасування фотонів

[ред. | ред. код]

Фотони в цьому методі — це частинки, що переносять деяку дискретну порцію світлової енергії. На початковому етапі фотони випромінюються з джерела світла відповідно до розподілу світлової енергії цього джерела. Наприклад, відомо, що точкове або сферичне джерело світла (наприклад, сонце) випускає світло ізотропно в усіх напрямках. Джерела світла у вигляді плоского майданчика мають косинусоїдальний розподіл, що набуває максимуму в напрямку, який збігається з нормаллю до площини джерела і нуль за напрямками, якщо лежить в цій площині[1].

В процесі трасування фотони вдаряються об різні поверхні моделі (сцени). Залежно від властивостей матеріалу, з ними можуть відбуватися різні події: фотон може відбитися розсіяно (тобто у випадковому напрямку), дзеркально, змінити напрямок при перетині поверхні або поглинутися. Рішення про те, яка з подій відбувається з фотоном, приймається на підставі властивостей матеріалу поверхні та статистичного методу методу Монте-Карло[1]. Лише при розсіяному відображенні, запис про фотон зберігається в списку.

Побудова фотонної карти

[ред. | ред. код]

На основі списку фотонів, отриманого після етапу трасування фотонів, проводиться побудова фотонної карти у вигляді деякої структури просторового розбиття. Цей етап допоміжний та служить для того, щоб на наступному кроці в довільній точці простору можна було знайти k найближчих фотонів. Якби фотони просто залишалися в списку, то k найближчих фотонів щоразу довелося б обчислювати переліченням, що частіше недоцільно. Для зберігання фотонів зазвичай використовується спеціалізований варіант К-вимірного дерева[1].

остаточне зображення
остаточне зображення
фотона карта
фотона карта

Збір освітленості

[ред. | ред. код]

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

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

Для обчислення рівняння рендерингу безпосередньо метод фотонних карт зазвичай не застосовують, оскільки це потребує багато ресурсів (зазвичай необхідно як мінімум кілька мільйонів фотонів для отримання прийнятного результату), зображення виходить шумне та спостерігається характерний ефект — потемніння країв. Потемніння країв спостерігається через те, що на границях поверхні збір освітленості відбувається лише з половини сфери, а результат ділиться на площу поверхні всієї сфери. Щоб усунути шум і прибрати темні краї, необхідно застосовувати метод фінального збору або алгоритм побудови опуклої оболонки, який ще в кілька разів уповільнює швидкість фотонних карт[2].

Фінальний збір

[ред. | ред. код]

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

Оптимізація

[ред. | ред. код]
  • Щоб уникнути випромінення непотрібних фотонів, початковий напрямок вихідних фотонів часто обмежується. Замість того, щоб просто відправляти фотони в випадкових напрямках, вони направляються в сторону відомого об'єкта, який є бажаним маніпулятором фотону, або фокусом, або розсіювачем світла. Є багато інших уточнень для алгоритму: наприклад, вибір кількості фотонів для відправки, а також де і в який шаблон їх відправити. Здавалося б, випромінення фотонів у більшій кількості в певному напрямку призведе до більш високої щільності фотонів, що будуть зберігатися в фотонній карті навколо позиції, в яку фотони потрапили. Вимірюючи цю щільність, значення опроміненості буде неточне. Це так, проте алгоритм, який використовується для обчислення, не залежить від оцінок опромінення.
  • Для оптимізації якості зображення, зокрема, каустик, Йенсен рекомендує використовувати фільтр конуса. По суті, фільтр дає вагомий вклад фотонів в сяйві в залежності від того, як далеко вони знаходяться від променя на поверхні перетинів. Це може привести до більш чіткішого зображення.
  • Відображення зображення простору фотонів досягає продуктивності в реальному часі шляхом обчислення першого і останнього розсіювання з використанням растеризатору графічного процесора.

Примітки

[ред. | ред. код]
  1. а б в г Christensen, N. J.; Jensen, H. W. (2000), A Practical Guide to Global illumination and Photon Maps, Siggraph 2000
  2. Kato T., Saito J. (2002), "Kilauea": parallel global illumination renderer

Див. також

[ред. | ред. код]

Посилання

[ред. | ред. код]