Path tracer - многослойные материалы и выборка важности

12

В настоящее время я пытаюсь реализовать трассировщик пути Монте-Карло. Я провел некоторые исследования, и похоже, что общий подход к материалам заключается в использовании многоуровневой модели. Что-то вроде этого:

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

Когда свет попадает на поверхность, Френель говорит нам, сколько этого света отражается первым слоем и сколько идет на второй, и так далее.

Поэтому я сделал нечто похожее, но более простое: только один слой зеркальных и один слой рассеянных. Пропускания пока нет. Пока все хорошо, я использую простой взвешенный по косинусу brdf для моей диффузной модели, а модель Кука-Торранса - для моего зеркального отражения.

Теперь самое сложное: что мне делать, когда луч попадает на поверхность? Обычно я выбираю brdf, соответствующий материалу поверхности, выбираю направление падающего света, оцениваю brdf и делю на правильную функцию распределения вероятности.

Но здесь, поверхностное попадание эффективно соответствует нескольким материалам. Наивным способом справиться с этим будет выборка один раз для каждого попадания слоя. Но это, несомненно, является источником огромного снижения производительности, в результате чего мой путь фактически превращается в дерево.

Есть ли лучшее решение?

castan
источник
1
Разве вы не можете «монте-карло» материальные слои? Например, взвесьте каждый слой в соответствии с их отражательной способностью и выберите один случайным образом на основе этого. Более глубокие слои потребуют некоторого ослабления, основанного на сумме поглощения всех слоев над ними.
PaulHK
PaulHK Это именно то, что я делаю в своей трассировке пути, русской рулетке для каждого интерфейса между слоями, так что ветвления вообще нет. К сожалению, моя реализация еще не закончена, поэтому у меня нет информации о фактической производительности. Я основал свою реализацию на статье «Произвольно-слоистые микрогранечные поверхности» Андреа Вейдлиха и Александра Вилки, которая кажется более ограниченной, чем рамки Вензеля Якоба (на что указал Стефан в ответе), но которая способна генерации довольно хороших результатов и гораздо проще реализовать.
Кристиан

Ответы:

7

Wenzel Jakob и др. Представили структуру для слоистых материалов на SIGGRAPH 2014. Раздел 6.2 объясняет важность отбора проб. Если вы предпочитаете код над уравнениями, метод реализован в рендерере Mitsuba .

Стефан Вернер
источник
2
Обратите внимание, что метод Jakob et al. полагается на рендеринг табличных данных BSDF в некотором специализированном базисном представлении Фурье. Подробнее см. Также в соответствующем техническом отчете . Реализация с открытым исходным кодом также доступна в новейшей третьей редакции PBRT . Файлы BSDF могут быть созданы с помощью layerlab в Python.
Тициан