Отслеживание пути и материалы

8

Я задаюсь вопросом о методике, используемой при отборе слоистого материала для следующего события в трассировщике пути. У меня есть материал с тремя слоями: базовый диффузный, зеркальный и блеск лепестков. Как можно выбрать дискретный слой для выборки для следующего направления луча? Это просто случайный выбор? Если да, присваиваются ли равные веса слоям или веса используются на основе итогового вклада лепестка? Спасибо за понимание этого этапа отбора проб.

~ M

Марк Дэвис
источник

Ответы:

12

Этот вопрос несколько связан с этим .

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

Согласно статье, две проблемы должны быть решены, чтобы сделать многослойный материал. Первый - правильно выбрать слои, а второй - найти результирующую 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=fr1fr2fr3fr2fr1

pdf=pdf1pdf2pdf3pdf2pdf1

cosθ=cosθ1cosθ2cosθ3cosθ2cosθ1

Lr=(frcosθpdf)Li

В работе Андреа Вейдлиха и Александра Уилки также учитывается поглощение, т. Е. Каждый луч света может быть ослаблен в соответствии с коэффициентом поглощения каждого пропускающего слоя и его толщиной. Я еще не включил поглощение в свой рендерер, но он представлен только одним скалярным значением, которое будет оцениваться в соответствии с законом Бера .

Альтернативные подходы

Рендерер Mitsuba использует альтернативное представление для многослойного материала, основанное на «табулировании функций отражения на основе Фурье». Я еще не углубился в это, но мог бы представлять интерес: « Комплексная основа для рендеринга слоистых материалов » Wenzel Jacob et al . Существует также расширенная версия этой статьи.

Кристиан Пагот
источник
1
Я хочу спросить (надеясь, что вы помните статью), уверены ли вы в добавлении терминов косинуса для каждого слоя? Насколько я понимаю, мы рассчитываем уравнение рендеринга только на верхнем слое. Мы идем вниз, чтобы определить окончательное исходящее направление и определить BRDF. Я что-то пропустил?
Мустафа Ишык,
@ MustafaIşık Вы правы, в статье они не добавляют косинус-термины в окончательный BRDF. На самом деле, я принял подход, несколько отличающийся от предложенного в статье (я включу это в свой ответ). В статье предлагается определение уникальной BRDF из слоистых BRDF. Я нашел процесс деривации немного запутанным: 1) я не понимаю, почему они добавляют отдельные BRDF (я думаю, что они должны быть умножены);
Кристиан Пагот
@ MustafaIşık 2) как вы указали, нет умножения на косинус-термин (я думаю, вы должны это делать, потому что мы рассматриваем только энергию, которая падает в дифференциальной области); 3) они не развивают выражение ; 4) Я не знаю, разбавили ли они термин косинус внутри BRDF; 5) также, МДП может привести к потере энергии. По этим причинам я решил проследить каждый луч, используя русскую рулетку, для определения преломления или отражения, за счет более длительного времени рендеринга, чем те, которые они в конечном итоге получили. t=(1G)+T21G
Кристиан Пагот
1
Документ выглядит просто, но это не так, поскольку не каждый термин или стратегия не объясняются достаточно четко для точной реализации. Это влиятельно, хотя. Ваш больше похож на симуляцию, которой избегают бумаги, но более точен.
Мустафа Ишык
3

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

Вы начнете с самого верхнего слоя и будете использовать процент Френеля и т. Д., Чтобы рассчитать процентное соотношение света, отражающего и передаваемого. Затем вы используете случайное число, чтобы определить, какое из них сделать для вашего образца.

В случае отражения вы делали зеркальную долю своего верхнего слоя, отражались от поверхности и двигались дальше.

В случае передачи вы бы перешли на 2-й уровень.

На этом слое вы еще раз рассчитаете процентную вероятность отразить против передачи.

В случае отражения вы бы использовали зеркальный лепесток этого второго слоя, сделали бы отражение и пошли дальше.

В случае передачи вы бы перешли на внутренний слой.

Для этого самого внутреннего слоя вы еще раз выясните, нужно ли вам отражать или передавать.

Для отражения вы бы использовали зеркальную долю этого внутреннего слоя.

Для передачи вы должны сделать диффузный расчет или что-то еще, что ваша внутренняя поверхность хочет сделать для проходящего света (рассеивание под поверхностью? Преломление? И т. Д.).

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

Но в основном, если у вас есть сфера с 3 слоями, она ДОЛЖНА вести себя так, как будто у вас есть 3 разные сферы, вложенные друг в друга, каждый из которых имеет один слой, который обрабатывает передачу против отражения.

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

Алан Вульф
источник