У меня есть небольшой трассировщик пути, и я пытаюсь понять, как реализовать некоторые базовые BRDF. Вот краткое описание трубопровода я использую (без рекурсии):Как обычно используется BRDF?
1) For each pixel:
1.1) For each sample:
1.1.1) I construct a path.
1.1.2) I calculate the contribution of this path.
1.1.3) I calculate the "probability" of this path.
1.1.4) Finally, I calculate the overall color value(taking into account number of samples, "probability" and contribution of the path).
1.2) Take the sum of all samples' values and write it to the pixel.
Таким образом, рассчитать направление отраженных лучей на стадии 1.1.1) I construct a path
.
На данный момент я реализовал диффузное отражение, зеркальное отражение, глянцевое отражение, преломление. Теперь я хочу реализовать сложный BRDF, скажем, Cook-Torrance BRDF. Я вижу, что он содержит несколько компонентов (диффузное отражение и зеркальное отражение). Как я должен отслеживать эти лучи, чтобы получить комбинацию? Должен ли я выбирать между diffuse_ray/specular_ray случайным образом, а затем накапливать значения (умноженные на некоторые коэффициенты) как обычно? (Например, если случайное значение больше 0,5, то я трассирую диффузный луч, в противном случае - зеркальный). Или я должен отслеживать несколько лучей с каждого перекрестка?
Как обычно это реализуется в физически-рендерерах?
P.S. Если кто-то знает хорошие статьи по этой теме, я был бы рад их видеть. Я пытался читать pbrt, но для меня это кажется очень сложным и огромным. И некоторые вещи реализованы по-разному, например, модель камеры и другие вещи.
В моем стохастическом индикаторе я создаю отдельные лучи для зеркального и рассеянного отражения, но метод, описанный выше, держит дерево луча меньше и должен уменьшить сложность вычислений. Я подумал об использовании этого метода, но я не мог понять, как иметь «цветные» случайные коэффициенты, так что разделение между диффузным и зеркальным может меняться в зависимости от цвета поверхности (как я полагаю, происходит с пластиковыми или металлическими материалами) – Alnitak