Проста сцена, відрендерене з використанням трасування шляху. Відмітною перевагою даного зображення є «м'якість» тіней і «гладкість» освітлення.
Трасування шляху (англ. Path tracing) - методика рендеринга в комп'ютерній графіці. яка прагне симулювати фізичне поведінки світла настільки близько до реального, наскільки це можливо. Трасування шляху є узагальненням традиційної трасування променів (англ. Ray tracing), алгоритм якої трассирует промені в напрямку від віртуальної камери крізь простір; промінь «відскакує» від предметів до тих пір, поки повністю не поглине або розсіється. Якість зображень, одержуваних за допомогою методу трасування шляху, як правило, краще, ніж якість зображень, отриманих іншими методами рендеринга, проте трасування шляху вимагає набагато більших витрат продуктивності.
Трасування шляху є найбільш простим, найбільш точним з фізичної сторони і найбільш повільним по продуктивності методом рендеринга. Трасування шляху природним способом відтворює безліч оптичних ефектів, які важко досяжні або взагалі недосяжні іншими методиками рендеринга: побудова тіней. глибина різкості (англ. depth of field), шевелёнка (англ. motion blur), каустика. ambient occlusion і непряме освітлення. Здійснення цих оптичних ефектів за допомогою трасування шляху набагато простіше, ніж за допомогою інших методик.
Виходячи з її точності і відсутності аппроксимаций і припущень (англ. Unbiased), трасування шляху використовується для генерації зображень, які потім використовуються як порівняльні зразки для оцінки якості рендеринга інших алгоритмів. Для того, щоб одержати високу якість зображень, згенерованих за допомогою трасування шляху, потрібно провести трасування дуже великої кількості променів; в іншому випадку з'являться графічні артефакти у вигляді шуму.
Рівняння рендеринга і його застосування в комп'ютерній графіці було представлено Джеймсом Кадзия (англ. James Kajiya) в 1986 році [1]. Ця презентація була першим описом алгоритму трасування шляху. Пізніше в цьому році Лафортюн (англ. Lafortune) запропонував багато удосконалень алгоритму, в тому числі шляхом двобічної трасування шляху [2].
У реальному світі безліч невеликих порцій світла випромінюються джерелами світла і поширюються по прямих лініях у вигляді променів крізь середу і від об'єкта до об'єкта, змінюючи свій колір і інтенсивність. Це «подорож» триває до тих пір, поки промені не будуть поглинені об'єктами, включаючи такі об'єкти, як людське око або камеру. Цей процес поширення променів симулюється трасуванням шляху, за винятком того, що промені трасуються навпаки, від віртуальної камери (спостерігача) до джерела світла. Це зроблено через те, що з тих променів, які виходять з джерела світла, лише дуже мала частина потрапляє на об'єктив віртуальної камери, тому розрахунок переважної більшості променів ніяк не впливає на одержуване віртуальною камерою зображення.
Така поведінка математично описано в рівнянні рендеринга. Це рівняння рендеринга намагаються вирішити алгоритми трасування шляху.
Трасування шляху не є простою трасуванням променів з необмеженою кількістю віддзеркалень променів (т. Е. З рекурсивної глибиною). У традиційній трасування променів світло обчислюється в момент безпосереднього перетину променя з дифузійної поверхнею. При трасуванні шляху новий промінь генерується випадковим чином всередині півсфери об'єкта і потім трасується до тих пір, поки не перетнеться з джерелом світла, що може і не статися. При трасуванні шляху шлях променя може перетнутися з безліччю дифузних поверхонь до того, як перетнутися з джерелом світла.
Псевдокод, який реалізує трасування шляху, може виглядати наступним чином:
У наведеному вище прикладі, якщо кожна поверхня закритого простору випромінюючи і відбила (0.5,0.5,0.5), то кожен піксель в зображенні матиме білий колір.
Двунаправленная трасування променів
Семпліровать інтеграл для точки можна за допомогою двох незалежних методів:
- Стріляти променями (Shooting rays) з джерел світла і створювати шляху в сцені. Шлях переривається випадковим числом кроків-відскоків променя. Потім світло прямує на проектований піксель результуючого зображення. Під час цього методу рендеринга мільйони шляхів створюються і на зображенні запам'ятовуються результати прорахунку шляхів, що вносять вклад.
- Збирати промені (Gathering rays) з точки на поверхні. Луч вистрілюється крізь пікселі зображення і скаче по сцені, поки не зустріне на своєму шляху джерело світла. Світло з джерела світла тоді надсилається у напрямку пікселів зображення. Процес створення шляху називається "семплінги". Одна точка поверхні зазвичай отримує від 800 семплів (до 3 тисяч). Фінальна картинка переводиться за допомогою арифметичних дій, не простим підсумовуванням семплів.
Двунаправленная трасування променів комбінує Shooting і Gathering в одному алгоритмі і це дає більш швидку збіжність зображенню (швидше і менше шуму). Ці 2 методи генерації шляхів трасуються незалежно і потім початок вистрілений шляху (shooting path) з'єднується з хвостом шляху збору променів (gathering path). Враховується загасання світла при кожному відскоку променя і запам'ятовується в пікселах зображення. Ця техніка здається на перший погляд парадоксально повільної, але це через те, що вважається відразу 2 шляхи. На практиці ж - навпаки, додаткова швидкість збіжності зображення компенсує уповільнення, що виникають із-за необхідності випускати нові і нові промені.
Для того, щоб прискорити конвергенцію (збіжність, зближення) зображень, двонаправлені алгоритми трасує шляху в обох напрямках. У прямому напрямку промені трасуються від джерела світла до тих пір, поки вони не стануть настільки слабкими, що їх не можна буде побачити, чи поки не потраплять на об'єктив віртуальної камери. У зворотному, т. Е. Стандартному загальноприйнятому напрямку, промені трасуються від віртуальної камери до тих пір, поки вони не зіткнуться з джерелом світла, або поки кількість їх відображень не перевищить певну межу. Такий підхід зазвичай приводить до такого зображення, яке сходиться набагато швидше, ніж при використанні лише одного напрямку.
ВІЛ і Гуібас дали більш точний опис двобічної трасування шляху [3]:
Ці методи генерують два подпуть: один - починаючи від джерела світла, а другий - від об'єктиву віртуальної камери. потім вони <методы> розглядають всі шляхи, які отримані шляхом з'єднання кожного префікса одного подпуть з кожним суфіксом іншого подпуть. Це веде до сімейства різних важливих методик вибірки, які потім комбінуються для мінімізації розбіжностей.
Оригінальний текст (англ.)
These methods generate one subpath starting at a light source and another starting at the lens, then they consider all the paths obtained by joining every prefix of one subpath to every suffix of the other. This leads to a family of different importance sampling techniques for paths, which are then combined to minimize variance.
Трасувальник шляху постійно проводить вибірку (англ. Sampling - семплинг) пікселів зображення. Зображення стає розрізняти тільки тоді, коли проведено кілька вибірок на один піксель, аж до 100 вибірок на піксель. Як правило, для звичайних зображень і для зменшення цифрового шуму до прийнятного рівня роблять близько 5000 вибірок. Однак для патологічних (англ.) Випадків кількість вибірок стає набагато більше. Процес рендеринга може зайняти години і дні в залежності від складності сцени і продуктивності апаратного і програмного забезпечення. Сучасні реалізації графічних процесорів обіцяють від 1 до 10 мільйонів вибірок в секунду, що робить можливим згенерувати щодо безшумне зображення прийнятної якості протягом декількох секунд або хвилин. Цифровий шум створює особливу проблему для анімації. створюючи, як правило, небажаний ефект «зернистості» зображення.
Група методів Metropolis light transport (англ.) Злегка змінюють раніше відтрасувати успішні шляхи і виробляє більш важливі для зображення вибірки першими. Це може привести до зниження шумності зображення і зниження кількості вибірок.
Досить важко справедливо оцінити рівень продуктивності рендерера. Один підхід полягає в підрахунку вибірок (семплів) за секунду, інший підраховує кількість шляхів, які можуть бути відтрасувати і доданими до зображення за секунду. Результати цих методів значно варіюються в залежності від сцени і залежать від «глибини шляху», тобто від того, скільки разів променю дозволяється відбитися від об'єкта, перш ніж він буде зупинений. Результат вимірювання продуктивності також сильно залежить від використовуваного апаратного забезпечення. Нарешті, один рендерер може виробляти багато низькоякісних вибірок, тоді як інший може вивести фінальне зображення швидше, використовуючи меншу кількість більш високоякісних вибірок.
Функції розподілу розсіювання
Зображення функцій розподілу двонаправленого розсіювання
Що відображають здатності поверхонь - кількість відбитого світла, його напрямок і колір, - моделюються з використанням двулучевой функції відбивної здатності. Еквівалентом перенесеного світла (світла, що пройшло через об'єкт) є функція двонаправленого поверхневого розсіювання відображення (англ. Bidirectional scattering distribution function). Трасувальник шляху може скористатися всіма перевагами складних, ретельно змодельованих або обчислених функцій розподілу, які визначають зовнішній вигляд ( «матеріал», «текстура» і «затененность» в термінах комп'ютерної графіки) об'єкта.