Вибір відбиття чи заломлення у відстеженні шляху


14

Я намагаюся реалізувати заломлення та передачу в моєму трасовому трасі, і я трохи не впевнений у тому, як це здійснити. По-перше, деякий фон:

Коли світло потрапить на поверхню, частина її відбиватиметься, а частина буде заломлена: введіть тут опис зображення

Скільки відбивається світла проти заломлюється рівнянь Френеля введіть тут опис зображення

У рекурсивному проміньку променів простою реалізацією було б знімати промінь для відбиття та промінь для заломлення, а потім зробити зважену суму за допомогою Френеля.

R=Fresnel()T=1RLo=RLi,reflection+TLi,refraction

Однак у трасування шляху ми вибираємо лише один шлях. Це моє питання:

  • Як вибрати, чи відображати чи переломлювати не упереджений спосіб

Першою моєю здогадкою було б вибір випадковим чином на основі Френеля. Ака:

float p = randf();
float fresnel = Fresnel();
if (p <= fresnel) {
    // Reflect
} else {
    // Refract
}

Це було б правильно? Або мені потрібно мати якийсь коефіцієнт корекції? Оскільки я не веду обох стежок.


російська рулетка
v.oddou

Відповіді:


6

TL; DR

Так, ви можете це зробити так, просто потрібно розділити результат на ймовірність вибору напрямку.

Повний відповідь

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

Почнемо спочатку з деякого тла. Якщо ви дозволите BSDF - не лише BRDF - у своєму інструменті простеження шляху, вам доведеться інтегруватись через всю сферу, а не лише позитивну півкулю. Зразки Монте-Карло можуть бути згенеровані різними стратегіями: для прямого освітлення можна використовувати BSDF і вибірку світла, для непрямого освітлення єдиною значущою стратегією зазвичай є вибірка BSDF. Самі стратегії вибірки зазвичай містять рішення про те, яку півкулю потрібно взяти для вибірки (наприклад, чи обчислюється відбиття чи заломлення).

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

Для вибірки BSDF ситуація набагато цікавіша. Випадок, який ви описали, стосується ідеальної поверхні Френеля, де є лише два напрямки, що сприяють (оскільки Fresnel BSDF насправді є лише сумою двох дельта-функцій). Ви можете легко розділити інтеграл на суму двох частин - одну рефлексію та одну для заломлення. Оскільки, як ви вже згадували, ми не хочемо йти в обох напрямках у відслідковуванні шляху, ми мусимо вибрати його. Це означає, що ми хочемо оцінити суму чисел, вибравши лише одне з них. Це можна зробити за допомогою дискретної оцінки Монте-Карло: виберіть одне з доданків випадковим чином і розділіть його на ймовірність його вибору. В ідеальному випадку ви хочете, щоб імовірність вибірки була пропорційною додаткам, але оскільки ми не знаємо їх значень (нам не доведеться оцінювати суму, якби ми їх знали), ми просто оцінюємо їх, нехтуючи деякими чинниками. У цьому випадку ми ігноруємо кількість вхідного світла і використовуємо лише коефіцієнт відбиття / пропускання Френеля як наші оцінки.

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

Li(ωi)F(θi)P(ωi)=Li(ωi)F(θi)F(θi)=Li(ωi)

ωi=(ϕi,θi)Li(ωi)F(θi)P(ωi)F(θi)

У випадку складніших моделей BSDF, таких як теорія мікрофайтів, вибірка є дещо складнішою, але ідея розділити цілий інтеграл на кінцеву суму підінтегралів і використовувати згодом дискретний Монте-Карло також може бути застосована.


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

1
@trichoplax: Так, але в цьому абзаці я описував техніку відбору проб просто для (діелектричного) Френеля BSDF - ідеально гладкої поверхні, яка є сумою двох дельта-функцій Дірака. У такому випадку ви вибираєте один із напрямків з певною дискретною ймовірністю. У випадку недельтового (кінцевого) BSDF, ви генеруєте напрямки відповідно до функції щільності ймовірності. На жаль, випадки дельти та недельта повинні оброблятися окремо, що робить код трохи безладним. Більш детальну інформацію про вибірки мікросхем BSDF можна знайти, наприклад, у Walter et. ін. [2007] папір.
ivokabel

2
@RichieSams: Walter et. ін. [2007] в основному все ще є найсучаснішим для діелектричних шорстких поверхонь, але для того, щоб він працював добре, потрібен хороший відбір проб, який нещодавно був опублікований документом Heitz та D'Eon в 2014 році "Важливість відбору проб BSDF на основі мікрофайлів використовуючи розподіл видимих ​​норм ". І зауважте, що це модель з однорозсіюванням, яка нехтує взаємовідбиттями між мікрофайлами, роблячи її помітно темною для більш високих значень шорсткості. Дивіться моє запитання "Компенсація втрат енергії в моделях BSDF з однорозсіюючим мікророзміром" для більш детальної інформації.
ivokabel

5
Просто хотілося б зазначити, що якщо ви вибрали ймовірність = fresnel () у запропонованому запитанні, тоді, коли ви поділяєте на ймовірність, ви скасуєте коефіцієнт Френеля, який, як правило, помножиться. Отже (у дискретному випадку з двома Dirac) ) ви закінчуєте внесок променя, не включаючи жодного фактора Френеля. Це стандартна теорія вибірки важливості, але я подумав, що зазначу це як потенційно заплутану проблему.
Натан Рід

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