Як правильно поєднувати дифузний та окулярний терміни?


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-Ж) для зважування дифузного терміна неправильно.

Що я пропускаю?
Я дуже вітаю пояснення, яке очевидно підкреслює, чому це було б неправильно.

Відповіді:


14

Використання двох термінів Френеля є правильним у тому сенсі, що будь-який заданий дифузний шлях пройде через поверхню двічі. Якщо ви вирішуєте дифузію, відстежуючи шлях через середовище, поки він знову не відскакує, тоді ви отримаєте два (або більше) термінів Френеля для цього шляху під час взаємодії з поверхнею.

Однак це не те, що ви робите з дифузним BRDF. Дифузне BRDF призначене для відображення середнього значення всіх можливих шляхів дифузії. У випадку Ламбертіана середнє моделюється як рівномірне відображення і єдине значення альбедо, що вимірює внутрішні втрати енергії під час дифузії, але можливі більш складні моделі. Принципово важливо: дифузне BRDF вже буде включати сукупний ефект деяких шляхів, що відображаються назад у середовищі, щоб розповсюджуватись далі, а деякі пропускати негайно. вже "запікається" в BRDF¹, і вам не потрібно повторювати його.1-Жоут

Що не включає термін Ламбертіана - це частина енергії, яка втрачається відбиттям, перш ніж світло потрапляє в середовище дифузії. Це залежить від зору, але залежить від точної глянсової часточки над ним. Немає втрат енергії на (неметалічному) поверхневому інтерфейсі, тому все, що не відображено, буде переломлено, тобто те, що ви насправді хочете, це інтегрувати загальну втрату енергії на поверхні за всіма вихідними напрямками, тобто .1-glossy_bsdf(в,з)гз

Можливо попередньо обчислити наближення до цього інтегралу для конкретних BRDF. Кінцевий результат, як правило, залежатиме від напрямку подання, шорсткості матеріалу та IOR принаймні. В якості першого наближення можна припустити, що глянсова доля - це ідеально дзеркальний відбивач. Це дає вагу глянсового , це саме те, що ви вперше запропонували.1-глянцевийгз=1-Жiн

Додатково зауважте, що ламбертіанський BRDF - альбедо, поділений на і що косинусовий термін є мірою того, наскільки ослаблене надходить світло на поверхню; це стосується як глянцевого, так і дифузного відбиття.π

Отже, приблизно:

// 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);

Ж


8

Переглядаючи, як правильно написати своє запитання, я фактично знайшов відповідь , що, як буває, дуже просте.

Ще один термін Френеля також набирає вагу, оскільки фотони вибиваються з матеріалу (таким чином переломлюючись у повітря) і стають дифузним терміном. Таким чином, правильним фактором для дифузного терміна буде:

(1-Жiн)(1-Жоут)

1
У розділі 5.3 паперового диску Disney BRDF посилається на рівняння у вашій відповіді, а далі йдеться про уточнення іншої моделі. Я не претендую на те, що я розумію це, оскільки я тільки почав свою глянсову реалізацію BRDF!
PeteUK

Я вважаю, що це би продовжувалося звідси, де світло, яке відбивається назад, всередині знову вдарило б над поверхнею зсередини, з протилежного боку, а потім знову і знову, щоразу зменшуючись, на нескінченність: P (або в під поверхневе розсіювання хе-хе)
Алан Вулф

Як ви обчислюєте інший термін Френеля?
плазмацель
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.