Как правильно сочетать диффузные и зеркальные термины?

18

Насколько я понимаю, в BRDF термин Френеля говорит нам о вероятности того, что фотон будет отражен или преломлен, когда он достигнет поверхности.

Отраженные фотоны будут вносить вклад в зеркальный член, а преломленные - в диффузный. Поэтому, определяя физически обоснованный вклад света в цвет материала, я испытываю желание просто написать:

// Assuming for example:
//   diffuse = dot(L, N);
//   specular = pow(dot(H, N), alpha) * (alpha + 2.0) / 8.0;
//   fresnel = f0 + (1.0 - f0) * pow(1.0 - dot(E, H), 5.0);
color = lightIntensity * Lerp(diffuse * albedo, specular, fresnel);

Тем не менее, я не думаю, что когда-либо видел это написанным таким образом. Я видел, как зеркальный термин взвешивался в соответствии с термином Френеля, но не диффузным. В своей широко цитируемой статье о PBR Себастьян Лагард даже утверждает, что использование для взвешивания диффузного термина неверно.(1-F)

Что мне не хватает?
Я был бы очень признателен за объяснение, которое подчеркивает очевидным образом, почему это было бы неправильно.

Жюльен Геро
источник

Ответы:

14

Использование двух членов Френеля является правильным в том смысле, что любой заданный диффузный путь будет проходить через поверхность дважды. Если вы решаете диффузию путем отслеживания пути через среду до тех пор, пока она не отскочит снова, то вы получите два (или более) члена Френеля для этого пути, когда он взаимодействует с поверхностью.

1-FоUT

1-glossy_bsdf(в,вне)dвне

1-глянцевыйdвнезнак равно1-FяN

π

Итак, примерно:

// Assuming for example:
//   diffuse = albedo / PI;
//   specular = my_favorite_glossy_brdf(in_dir, out_dir, roughness);
//   fresnel = f0 + (1.0 - f0) * pow(1.0 - dot(E, H), 5.0);
//   total_surface_reflection = fresnel
color = lightIntensity * dot(L, N) * Lerp(diffuse, specular, total_surface_reflection);

F

Карл Шмидт
источник
8

Просматривая, чтобы правильно написать мой вопрос, я действительно нашел ответ , который оказался очень простым.

Еще один термин Френеля также прибавит в весе, поскольку фотоны выходят из материала (таким образом, преломляясь в воздух) и становятся диффузным термином. Таким образом, правильный коэффициент для рассеянного члена будет:

(1-FяN)*(1-FоUT)
Жюльен Геро
источник
1
В разделе 5.3 статьи Disney BRDF содержится ссылка на уравнение в вашем ответе, а затем указывается другая модель. Я не претендую на то, что понимаю все это, потому что я только начал свою блестящую реализацию BRDF!
PeteUK
Я считаю, что это будет продолжаться отсюда, где свет, отраженный назад внутри, затем снова попадет на поверхность изнутри, на противоположной стороне, а затем снова и снова, каждый раз уменьшаясь, на бесконечность: P (или в Поверхностное рассеяние хе-хе)
Алан Вулф
Как вы рассчитываете другой термин Френеля?
плазмацел