Модель отражения Фонга

редактировать

Модель отражения Фонга (также называемая освещением Фонга или Фонгом освещение ) - это эмпирическая модель локального освещения точек на поверхности, разработанная исследователем компьютерной графики Буй Туонг Фонг. В компьютерной 3D-графике это иногда называют «затенением Фонга», особенно если модель используется с методом интерполяции с тем же именем и в контексте пиксельные шейдеры или другие места, где расчет освещения может упоминаться как «затенение ».

Содержание
  • 1 История
  • 2 Описание
    • 2.1 Изменения, более эффективные в вычислительном отношении
  • 3 Модель обратного отражения Фонга
  • 4 Приложения
  • 5 См. Также
  • 6 Внешние ссылки
  • 7 Ссылки
История

Модель отражения Фонга была разработана Буй Туонг Фонгом в Университете штата Юта, который опубликовал ее в своей докторской диссертации 1975 года. диссертация. Он был опубликован вместе с методом интерполяции вычислений для каждого отдельного пикселя, растеризованного из модели полигональной поверхности; метод интерполяции известен как затенение Фонга, даже когда он используется с моделью отражения, отличной от модели Фонга. Во время своего появления методы Фонга считались радикальными, но с тех пор стали де-факто базовым методом затенения для многих приложений визуализации. Методы Фонга оказались популярными благодаря в целом эффективному использованию времени вычислений на рендеринг пикселя.

Описание

Отражение Фонга - это эмпирическая модель местного освещения. Он описывает способ отражения света поверхностью как комбинацию диффузного отражения шероховатых поверхностей с зеркальным отражением блестящих поверхностей. Он основан на неофициальном наблюдении Фонга, что блестящие поверхности имеют небольшие интенсивные зеркальные блики, в то время как тусклые поверхности имеют большие блики, которые исчезают более постепенно. Модель также включает в себя окружающий термин для учета небольшого количества света, рассеянного по всей сцене.

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

Для каждого источника света в сцене компоненты равны {\ displaystyle i _ {\ text { s}}}i _ {\ text {s}} и id {\ displaystyle i _ {\ text {d}}}i _ {\ text {d} } определяются как интенсивности (часто как значения RGB ) зеркальной и диффузной составляющих источников света соответственно. Один элемент i a {\ displaystyle i _ {\ text {a}}}i _ {\ text {a}} управляет окружающим освещением; иногда он рассчитывается как сумма вкладов всех источников света.

Для каждого материала в сцене определены следующие параметры:

ks {\ displaystyle k _ {\ text {s}}}k _ {\ text {s}} , который является константой зеркального отражения, коэффициент отражения зеркального члена падающего света,
kd {\ displaystyle k _ {\ text {d}}}k _ {\ text {d}} , который представляет собой константу диффузного отражения, коэффициент отражения диффузного члена входящий свет (коэффициент отражения Ламберта ),
ka {\ displaystyle k _ {\ text {a}}}k _ {\ text {a }} , который представляет собой константу отражения окружающей среды, коэффициент отражения окружающей среды, присутствующий во всех точках в визуализированной сцене и
α {\ displaystyle \ alpha}\ alpha , который является константой яркости для этого материала, которая больше для более гладких и зеркальных поверхностей. Когда эта константа большой зеркальный блик мал.
Векторы для расчета затенения Фонга и Блинна – Фонга

Кроме того, у нас есть

источники света {\ displaystyle {\ text {lights}}}{\ displaystyle {\ text {lights}}} , что является установить всех источников света,
L ^ m {\ displaystyle {\ hat {L}} _ {m}}{\ hat {L}} _ {m} , который представляет собой вектор направления от точки на поверхности к каждому источнику света (m { \ displaystyle m}m указывает источник света),
N ^ {\ displaystyle {\ hat {N}}}{\ hat {N}} , который является нормальным при эта точка на поверхности,
R ^ m {\ displaystyle {\ hat {R}} _ {m}}{\ hat {R}} _ {m} , то есть направление, в котором идеально отраженный луч света будет двигаться от этой точки на поверхности, и
V ^ {\ displaystyle {\ hat {V}}}{\ hat {V}} , которое является направлением, указывающим на зрителя (например, виртуальную камеру).

Затем Фонг модель отражения предоставляет уравнение для вычисления освещенности каждой точки поверхности I p {\ displaystyle I _ {\ text {p}}}I _ {\ text {p}} :

I p = kaia + ∑ m ∈ lights (kd (L ^ m ⋅ N ^) im, d + ks (R ^ m ⋅ V ^) α im, s). {\ displaystyle I _ {\ text {p}} = k _ {\ text {a}} i _ {\ text {a}} + \ sum _ {m \; \ in \; {\ text {lights}}} (k_ {\ text {d}} ({\ hat {L}} _ {m} \ cdot {\ hat {N}}) i_ {m, {\ text {d}}} + k _ {\ text {s}} ({\ hat {R}} _ {m} \ cdot {\ hat {V}}) ^ {\ alpha} i_ {m, {\ text {s}}}).}I _ {\ text {p}} = k _ {\ text {a}} i _ {\ text {a}} + \ sum _ {m \; \ in \ ; {\ text {lights}}} (k _ {\ text {d}} ({\ hat {L}} _ {m} \ cdot {\ hat {N}}) i_ {m, {\ text {d} }} + k _ {\ text {s}} ({\ hat {R}} _ {m} \ cdot {\ hat {V}}) ^ {\ alpha} i_ {m, {\ text {s}}}).

где вектор направления R ^ m {\ displaystyle {\ hat {R}} _ {m}}{\ hat {R}} _ {m} рассчитывается как отражение для L ^ m {\ displaystyle {\ hat {L}} _ {m}}{\ hat {L}} _ {m} на поверхности, характеризуемой нормалью к поверхности N ^ {\ displaystyle {\ hat {N}}}{\ hat {N}} с использованием

R ^ м = 2 (L ^ м ⋅ N ^) N ^ - L ^ m {\ Displaystyle {\ hat {R}} _ {m} = 2 ({\ hat {L}} _ {m} \ cdot {\ hat {N}}) {\ hat {N}} - {\ hat {L}} _ {m}}{\ hat {R}} _ {m} = 2 ({\ hat {L}} _ {m} \ cdot {\ hat {N}}) {\ hat {N}} - {\ hat {L}} _ {m}

, а шляпы указывают, что векторы нормализованы. На диффузный термин не влияет направление зрителя (V ^ {\ displaystyle {\ hat {V}}}{\ hat {V}} ). Зеркальный член велик только тогда, когда направление зрителя (V ^ {\ displaystyle {\ hat {V}}}{\ hat {V}} ) совпадает с направлением отражения R ^ m {\ displaystyle { \ hat {R}} _ {m}}{\ hat {R}} _ {m} . Их выравнивание измеряется степенью α {\ displaystyle \ alpha}\ alpha косинуса угла между ними. Косинус угла между нормализованными векторами R ^ m {\ displaystyle {\ hat {R}} _ {m}}{\ hat {R}} _ {m} и V ^ {\ displaystyle {\ hat {V }}}{\ hat {V}} равно их скалярному произведению. Когда α {\ displaystyle \ alpha}\ alpha большое, в случае почти зеркального отражения зеркальный свет будет маленьким, потому что любая точка обзора, не выровненная с отражением, будет иметь косинус меньше единицы, которая быстро приближается к нулю при увеличении в большой степени.

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

Когда цвет представлен в виде значений RGB, как это часто бывает в компьютерная графика, это уравнение обычно моделируется отдельно для интенсивностей R, G и B, что позволяет использовать различные константы отражений ka, {\ displaystyle k _ {\ text {a}},}k _ {\ text {a}}, kd {\ displaystyle k _ {\ text {d}}}k _ {\ text {d}} и ks {\ displaystyle k _ {\ text {s}}}k _ {\ text {s}} для различных цветовых каналов.

Изменения, более эффективные в вычислительном отношении

При реализации модели отражения Фонга существует ряд методов для аппроксимации модели, а не реализация точных формул, которые могут ускорить расчет; например, модель отражения Блинна – Фонга является модификацией модели отражения Фонга, которая более эффективна, если наблюдатель и источник света рассматриваются как находящиеся на бесконечности.

Еще одно приближение, которое касается вычисления возведения в степень в зеркальном члене, следующее: учитывая, что зеркальный член следует учитывать только в том случае, если его скалярное произведение положительно, его можно аппроксимировать как

макс. (0, R ^ м ⋅ V ^) α знак равно макс (0, 1 - λ) β γ = (макс (0, 1 - λ) β) γ ≈ max (0, 1 - β λ) γ {\ displaystyle \ max (0, {\ hat {R}} _ {m} \ cdot {\ hat {V}}) ^ {\ alpha} = \ max (0,1- \ lambda) ^ {\ beta \ gamma} = \ left (\ max (0,1- \ lambda) ^ {\ beta} \ right) ^ {\ gamma} \ приблизительно \ max (0,1- \ beta \ lambda) ^ {\ gamma}}\ max (0, {\ hat {R}} _ {m} \ cdot {\ hat {V}}) ^ {\ alpha} = \ max (0,1- \ lambda) ^ {\ beta \ gamma} = \ left (\ max (0,1- \ lambda) ^ {\ beta} \ right) ^ {\ gamma} \ приблизительно \ max (0,1- \ beta \ lambda) ^ {\ gamma}

где λ = 1 - R ^ m ⋅ V ^ {\ displaystyle \ lambda = 1 - {\ hat {R}} _ {m} \ cdot {\ hat {V}}}\ lambda = 1 - {\ hat {R}} _ {m} \ cdot {\ hat {V}} и β = α / γ {\ displaystyle \ beta = \ alpha / \ gamma \,}\ beta = \ alpha / \ gamma \, - действительное число, которое не обязательно должно быть целым. Если γ {\ displaystyle \ gamma}\ gamma выбрано в степени 2, то есть γ = 2 n {\ displaystyle \ gamma = 2 ^ {n}}\ gamma = 2 ^ {n} где n {\ displaystyle n}n - целое число, тогда выражение (1 - β λ) γ {\ displaystyle (1- \ beta \ lambda) ^ {\ gamma }}(1- \ beta \ lambda) ^ {\ gamma} можно более эффективно вычислить, возведя в квадрат (1 - β λ) n {\ displaystyle (1- \ beta \ lambda) \ n}(1- \ beta \ lambda) \ n раз, т.е.

(1 - β λ) γ = (1 - β λ) 2 n = (1 - β λ) 2 ⋅ 2 ⋅… ⋅ 2 ⏞ n = (… ((1 - β λ) 2) 2…) 2 ⏞ п. {\ Displaystyle (1- \ бета \ лямбда) ^ {\ гамма} \, = \, (1- \ бета \ лямбда) ^ {2 ^ {п}} \, = \, (1- \ бета \ лямбда) ^ {\ overbrace {\ scriptstyle 2 \, \ cdot \, 2 \, \ cdot \, \ dots \, \ cdot \, 2} ^ {n}} \, = \, (\ dots ((1- \ beta \ lambda) \ overbrace {^ {2}) ^ {2} \ dots) ^ {2}} ^ {n}.}(1- \ beta \ lambda) ^ {\ gamma} \, = \, (1- \ beta \ lambda) ^ {2 ^ {n}} \, = \, ( 1- \ beta \ lambda) ^ {\ overbrace {\ scriptstyle 2 \, \ cdot \, 2 \, \ cdot \, \ dots \, \ cdot \, 2} ^ {n}} \, = \, (\ точки ((1- \ beta \ lambda) \ overbrace {^ {2}) ^ {2} \ dots) ^ {2}} ^ {n}.

Это приближение зеркального члена справедливо для достаточно большого целого числа γ { \ displaystyle \ gamma}\ gamma (обычно 4 или 8 будет достаточно).

Кроме того, значение λ {\ displaystyle \ lambda}\ lambda можно приблизительно представить как λ = (R ^ m - V ^) ⋅ (R ^ m - V ^) / 2 {\ displaystyle \ lambda = ({\ hat {R}} _ {m} - {\ hat {V}}) \ cdot ({\ hat {R}} _ {m} - {\ hat { V}}) / 2}\ lambda = ({\ hat {R }} _ {m} - {\ hat {V}}) \ cdot ({\ hat {R}} _ {m} - {\ hat {V}}) / 2 , или как λ = (R ^ m × V ^) ⋅ (R ^ m × V ^) / 2. {\ Displaystyle \ lambda = ({\ hat {R}} _ {m} \ times {\ hat {V}}) \ cdot ({\ hat {R}} _ {m} \ times {\ hat {V}}) / 2.}\ lambda = ({\ hat {R}} _ {m} \ times {\ hat {V}}) \ cdot ({\ hat {R}} _ {m} \ times {\ hat {V}}) / 2. Последний гораздо менее чувствителен к ошибкам нормализации в R ^ m {\ displaystyle {\ hat {R}} _ {m}}{\ hat {R}} _ {m} и V ^ {\ displaystyle { \ hat {V}}}{\ hat {V}} , чем скалярное произведение Фонга λ = 1 - R ^ m ⋅ V ^ {\ displaystyle \ lambda = 1 - {\ hat {R}} _ { m} \ cdot {\ hat {V}}}\ lambda = 1 - {\ hat {R}} _ {m} \ cdot {\ hat {V}} есть, и практически не требует R ^ m {\ displaystyle {\ hat {R}} _ {m}}{\ hat {R}} _ {m} и V ^ {\ displaystyle {\ hat {V}}}{\ hat {V}} для нормализации, за исключением треугольных сеток с очень низким разрешением.

Этот метод заменяет несколько умножений на переменное возведение в степень и устраняет необходимость в точной векторной нормализации на основе обратного квадратного корня.

Модель обратного отражения Фонга

Модель отражения Фонга в сочетании с затенением Фонга является приближением затенения объектов в реальной жизни. Это означает, что уравнение Фонга может связать затенение, видимое на фотографии, с нормалями поверхности видимого объекта. Обратное относится к желанию оценить нормали поверхности для визуализированного изображения, естественного или созданного на компьютере.

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

Например, у нас есть цилиндрический объект, например палец, и мы хотим вычислить нормальный N = [N x, N z] {\ displaystyle N = [N_ {x}, N_ {z}]}N = [N_ {x}, N_ {z}] на линии на объекте. Мы предполагаем только один свет, отсутствие зеркального отражения и однородные известные (приближенные) параметры отражения. Затем мы можем упростить уравнение Фонга до:

I p (x) = C a + C d (L (x) ⋅ N (x)) {\ displaystyle I_ {p} (x) = C_ {a} + C_ {d} (L (x) \ cdot N (x))}I_ {p} (x) = C_ {a} + C_ {d} (L (x) \ cdot N (x))

С C a {\ displaystyle C_ {a}}C_ {a} константа, равная окружающему освещению и C d {\ displaystyle C_ {d}}C_ {d} константа, равная диффузному отражению. Мы можем переписать уравнение так:

(I p (x) - C a) / C d = L (x) ⋅ N (x) {\ displaystyle (I_ {p} (x) -C_ {a }) / C_ {d} = L (x) \ cdot N (x)}(I_ {p} (x) -C_ {a}) / C_ {d} = L (x) \ cdot N (x)

Что можно переписать для линии, проходящей через цилиндрический объект, как:

(I p - C a) / C d = L Икс N Икс + L Z N Z {\ Displaystyle (I_ {p} -C_ {a}) / C_ {d} = L_ {x} N_ {x} + L_ {z} N_ {z}}(I_ {p} -C_ {a}) / C_ {d} = L_ {x} N_ {x} + L_ {z} N_ {z}

Для Например, если направление света на 45 градусов выше объекта L = [0.71, 0.71] {\ displaystyle L = [0.71,0.71]}L = [0,71,0,71] , мы получаем два уравнения с двумя неизвестными.

(I п - C a) / C d = 0,71 N x + 0,71 N z {\ displaystyle (I_ {p} -C_ {a}) / C_ {d} = 0,71N_ {x} + 0,71N_ { z}}(I_ { p} -C_ {a}) / C_ {d} = 0,71N_ {x} + 0,71N_ {z}
1 = (N x 2 + N z 2) {\ displaystyle 1 = {\ sqrt {(N_ {x} ^ {2} + N_ {z} ^ {2})}}}1 = {\ sqrt {(N_ {x} ^ {2} + N_ {z} ^ {2})}}

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

Если объект не цилиндрический, у нас есть три неизвестных нормальных значения N = [N x, N y, N z] {\ displaystyle N = [N_ {x}, N_ {y}, N_ {z}]}N = [N_ {x}, N_ {y}, N_ {z}] . Тогда два уравнения по-прежнему позволяют нормали вращаться вокруг вектора обзора, поэтому необходимы дополнительные ограничения из предшествующей геометрической информации. Например, в распознавании лиц эти геометрические ограничения могут быть получены с помощью анализа главных компонентов (PCA) в базе данных карт глубины лиц, что позволяет использовать только решения нормалей поверхности, которые находятся в нормальное население.

Приложения

Модель отражения Фонга часто используется вместе с затенением Фонга для затенения поверхностей в программном обеспечении 3D компьютерной графики. Помимо этого, он также может использоваться для других целей. Например, он использовался для моделирования отражения теплового излучения от зондов Pioneer в попытке объяснить аномалию Pioneer.

См. Также
Внешние ссылки
Литература
  1. ^Буй Туонг Фонг, Освещение для компьютерных изображений, Сообщения ACM 18 (1975), нет. 6, 311–317.
  2. ^Школа вычислительной техники Университета Юты, http://www.cs.utah.edu/school/history/#phong-ref
  3. ^Лион, Ричард Ф. (2 августа 1993 г.). «Переформулировка затенения Фонга для упрощения аппаратного рендерера» (PDF). Проверено 7 марта 2011 г.
  4. ^Boom, B.J.; Spreeuwers, L.J.; Veldhuis, R.N.J. (Сентябрь 2009 г.). Цзян, Сяои; Петков, Николай (ред.). Коррекция освещенности на основе модели для изображений лиц в неконтролируемых сценариях. Конспект лекций по информатике. 5702 . С. 33–40. Bibcode : 2009LNCS.5702..... J. DOI : 10.1007 / 978-3-642-03767-2. HDL : 11693/26732. ISBN 978-3-642-03766-5.
  5. ^F. Франциско; О. Бертолами; П. Дж. С. Гил; Дж. Парамос (2012). «Моделирование отражающего теплового вклада в ускорение космического корабля Pioneer». Успехи в космических исследованиях. 49 (3): 337–346. arXiv : 1103.5222. Bibcode : 2012AdSpR..49..579S. doi :10.1016/j.asr.2011.10.016.
Последняя правка сделана 2021-06-02 04:03:39
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте