Этот вопрос несколько связан с этим .
Как уже сказал Алан, следование действительному пути света через каждый слой приводит к более физически точным результатам. Я буду основывать свой ответ на статье Андреа Вейдлиха и Александра Уилки ( «Произвольно многослойные микрогранечные поверхности» ), которую я прочитал и частично выполнил. В статье авторы предполагают, что расстояние между двумя слоями меньше радиуса элемента дифференциальной площади. Это предположение упрощает реализацию, поскольку нам не нужно рассчитывать точки пересечения отдельно для каждого слоя, фактически мы предполагаем, что все точки пересечения над слоями - это одна и та же точка.
Согласно статье, две проблемы должны быть решены, чтобы сделать многослойный материал. Первый - правильно выбрать слои, а второй - найти результирующую BSDF, сгенерированную комбинацией множества BSDF, найденных вдоль пути выборки.
ОБНОВЛЕНИЕ: На самом деле я принял другой метод для реализации оценки этой многоуровневой модели. Хотя я придерживался идеи рассматривать точки пересечения как одинаковые точки вдоль слоев, я по-разному рассчитал выборку и окончательный BRDF: для выборки я использовал обычную трассировку лучей, но через слои (используя русский язык). Рулетка для выбора между отражением / преломлением, когда это так); для окончательной оценки BRDF я просто умножаю каждый BRDF, пройденный по пути луча (взвешивая падающие лучи в соответствии с косинусом падающего луча).
отбор проб
На этом первом этапе мы определим фактический путь света через слои. Когда луч света движется из менее плотной среды, например воздуха, в более плотную среду, например стекло, часть его энергии отражается, а остальная часть передается. Вы можете найти количество энергии, которое отражается через уравнения отражения Френеля . Так, например, если коэффициент отражения Френеля данного диэлектрика равен 0,3, мы знаем, что 30% энергии отражается, а 70% будет передаваться:
Когда луч света движется от более плотной к менее плотной среде, применяется тот же принцип, который описывается коэффициентом отражения Френеля. Однако в этом конкретном случае полное внутреннее отражение (также называемое МДП) может также произойти, если угол падающего луча выше критического угла. В случае МДП 100% энергии отражается обратно в материал:
Когда свет попадает на проводник или диффузную поверхность, он всегда будет отражаться (являясь направлением отражения, связанным с типом BRDF). В многослойном материале полученный световой путь будет совокупным результатом всех этих возможностей. Таким образом, в случае трехслойного материала, предполагая, что первый и второй слои являются диэлектриками, а третий слой диффузным, мы можем, например, получить следующий путь света (фактически дерево):
Мы можем смоделировать этот тип взаимодействия с использованием рекурсии и взвешивания каждого светового пути в соответствии с фактическим коэффициентом отражения / пропускания в соответствующих точках падения. Проблема, связанная с использованием рекурсии в этом случае, состоит в том, что число лучей увеличивается с глубиной рекурсии, концентрируя вычислительные усилия на лучах, которые по отдельности могут почти ничего не вносить в конечный результат. С другой стороны, совокупный результат этих отдельных лучей на глубоких рекурсивных уровнях может быть значительным и не должен отбрасываться. В этом случае мы можем использовать «Русскую рулетку» (РР), чтобы избежать ветвления и получить вероятностные концевые световые пути без потери энергии, но за счет более высокой дисперсии (более шумный результат). В этом случае результат отражения Френеля, или МДП, будет использоваться для случайного выбора пути. Например:
Как можно видеть, отражательная способность МДП или Френеля может удерживать некоторые лучи неопределенно отражающимися между слоями. Насколько я знаю, Mitsuba реализует пластик как двухслойный материал, и в этом конкретном случае он использует решение в закрытой форме, которое учитывает бесконечное число световых отражений между слоями. Тем не менее, Mitsuba также позволяет создавать многослойные материалы с произвольным числом слоев, и в этом случае она накладывает максимальное количество внутренних отскоков, поскольку в общем случае решения в замкнутой форме не существует. Как побочный эффект, некоторая энергия может быть потеряна в процессе рендеринга, из-за чего материал выглядит темнее, чем должен был быть.
В моей текущей реализации многослойного материала я допускаю произвольное количество внутренних отскоков за счет увеличения времени рендеринга (ну ... на самом деле, я реализовал только два слоя ... один диэлектрический и один диффузный :).
Дополнительным вариантом является смешивание ветвления и RR. Например, начальные лучи (более низкие глубокие уровни) могут внести существенный вклад в окончательное изображение. Таким образом, можно выбрать ответвление только на первом или двух перекрестках, а затем использовать только RR. Это, например, подход, используемый smallpt .
Интересный момент, касающийся многослойных материалов, состоит в том, что отдельные отраженные / прошедшие лучи могут быть отобраны по важности в соответствии с соответствующими BRDF / BTDF каждого слоя.
Оценка Финального BSDF
Учитывая следующий путь света, вычисленный с использованием RR:
Мы можем оценить общее количество яркости отраженной многослойной BSDF, рассматривая каждый слой как отдельный объект и применяя тот же подход, который используется в обычной трассировке пути (т. Е. Излучение, выходящее из слоя, будет излучением падающего излучения для следующего слоя). Таким образом, окончательная оценка может быть представлена произведением каждой отдельной оценки Монте-Карло:Lr
Lr=(fr1cosθ1pdf1(fr2cosθ2pdf2(fr3cosθ3pdf3(fr2cosθ4pdf2(Lifr1cosθ5pdf1)))))
Поскольку все члены оценщика умножены, мы можем упростить реализацию, вычислив окончательные BSDF и и выделив член :pdfLi
fr=fr1⋅fr2⋅fr3⋅fr2⋅fr1
pdf=pdf1⋅pdf2⋅pdf3⋅pdf2⋅pdf1
cosθ=cosθ1⋅cosθ2⋅cosθ3⋅cosθ2⋅cosθ1
Lr=(frcosθpdf)Li
В работе Андреа Вейдлиха и Александра Уилки также учитывается поглощение, т. Е. Каждый луч света может быть ослаблен в соответствии с коэффициентом поглощения каждого пропускающего слоя и его толщиной. Я еще не включил поглощение в свой рендерер, но он представлен только одним скалярным значением, которое будет оцениваться в соответствии с законом Бера .
Альтернативные подходы
Рендерер Mitsuba использует альтернативное представление для многослойного материала, основанное на «табулировании функций отражения на основе Фурье». Я еще не углубился в это, но мог бы представлять интерес: « Комплексная основа для рендеринга слоистых материалов » Wenzel Jacob et al . Существует также расширенная версия этой статьи.