Зеркальный свет

редактировать
Зеркальный свет на паре сфер.

A Зеркальный свет - это яркое пятно света который появляется на блестящих объектах при освещении (например, см. изображение справа). Зеркальные блики важны в компьютерной 3D-графике, поскольку они обеспечивают четкую визуальную подсказку для формы объекта и его местоположения относительно источников света в сцене.

Содержание
  • 1 Микрограни
  • 2 Модели
    • 2.1 Распределение Фонга
    • 2.2 Гауссово распределение
    • 2.3 Распределение Бекмана
    • 2.4 Анизотропное распределение Гейдриха – Зейделя
      • 2.4.1 Параметры
      • 2.4.2 Условия
      • 2.4.3 Формула
        • 2.4.3.1 Окончательный расчет
      • 2.4.4 Оптимизация
        • 2.4.4.1 Diffuse
        • 2.4.4.2 Specular
      • 2.4.5 Комментарии
    • 2.5 Анизотропное распределение Уорда
    • 2.6 Модель Кука – Торранса
    • 2.7 Использование множественных распределений
  • 3 См. Также
  • 4 Ссылки
Микрогрань

Термин зеркальный означает, что свет идеально отражается зеркально от источника света до зрителя. Зеркальное отражение видно только там, где нормаль к поверхности ориентирована точно посередине между направлением падающего света и направлением наблюдателя; это называется направлением половинного угла, потому что оно делит пополам (делит пополам) угол между падающим светом и наблюдателем. Таким образом, зеркально отражающая поверхность будет показывать зеркальный свет как идеально четкое отраженное изображение источника света. Однако многие блестящие объекты имеют размытые зеркальные блики.

Это можно объяснить наличием микрограней . Мы предполагаем, что не идеально гладкие поверхности состоят из множества крошечных граней, каждая из которых является идеальным зеркальным отражателем. У этих микрограней есть нормали, которые распределены относительно нормали аппроксимирующей гладкой поверхности. Степень, в которой нормали микрограней отличаются от нормали гладкой поверхности, определяется шероховатостью поверхности. В точках объекта, где гладкая нормаль близка к направлению половинного угла, многие из микрограней указывают в направлении половинного угла, и поэтому зеркальный свет будет ярким. По мере удаления от центра блика гладкая нормаль и направление половинного угла удаляются друг от друга; количество микрограней, ориентированных в направлении половинного угла, уменьшается, и, таким образом, интенсивность подсветки падает до нуля.

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

Модели

Существует ряд различных моделей для прогнозирования распределения микрограней. Большинство полагает, что нормали микрограней распределены равномерно вокруг нормали; эти модели называются изотропными. Если микрограни распределены с предпочтением определенного направления вдоль поверхности, распределение будет анизотропным.

. ПРИМЕЧАНИЕ. В большинстве уравнений, когда указано (A ^ ⋅ B ^) {\ displaystyle ({\ hat {A}} \ cdot {\ hat {B}})}({\ hat {A}} \ cdot {\ hat {B}}) это означает max (0, (A ^ ⋅ B ^)) {\ displaystyle \ max (0, ({\ hat {A}} \ cdot {\ hat {B}}))}\ max ( 0, ({\ hat {A}} \ cdot {\ hat {B}}))

Распределение Фонга

В модели отражения Фонга интенсивность зеркального блика равна вычисляется как:

kspec = ‖ R ‖ ‖ V ‖ cos n ⁡ β = (R ^ ⋅ V ^) n {\ displaystyle k _ {\ mathrm {spec}} = \ | R \ | \ | V \ | \ cos ^ {n} \ beta = ({\ hat {R}} \ cdot {\ hat {V}}) ^ {n}}k _ {{\ mathrm {spec}}} = \ | R \ | \ | V \ | \ cos ^ {n} \ beta = ({\ hat {R}} \ cdot {\ hat {V}}) ^ {n}

где R - зеркальное отражение светового вектора от поверхности, а V - вектор точки обзора.

В модели затенения Блинна – Фонга интенсивность бликов рассчитывается по формуле:

kspec = ‖ N ‖ ‖ H ‖ cos n ⁡ β = (N ^ ⋅ H ^) N {\ Displaystyle к _ {\ mathrm {spec}} = \ | N \ | \ | H \ | \ cos ^ {n} \ beta = ({\ hat {N}} \ cdot {\ hat {H }}) ^ {n}}k _ {{\ mathrm {spec}}} = \ | N \ | \ | H \ | \ cos ^ {n} \ beta = ({\ hat {N}} \ cdot {\ hat {H}}) ^ {n}

Где N - нормаль гладкой поверхности, а H - направление половинного угла (вектор направления на полпути между L, вектором света и V, вектором точки обзора).

Число n называется показателем Фонга и представляет собой выбираемое пользователем значение, которое контролирует кажущуюся гладкость поверхности. Эти уравнения подразумевают, что распределение нормалей микрограней является приблизительно распределением Гаусса (для больших n {\ displaystyle n}n ) или приблизительно распределением Пирсона типа II соответствующего угла. Хотя это полезная эвристика и дает правдоподобные результаты, это не физически обоснованная модель.

Еще одна похожая формула, но с другим расчетом:
k = (L → ⋅ R →) n = [L → ⋅ (E → - 2 N → (N → ⋅ E →))] n, {\ стиль отображения к = ({\ vec {L}} \ cdot {\ vec {R}}) ^ {n} = [{\ vec {L}} \ cdot ({\ vec {E}} - 2 {\ vec { N}} ({\ vec {N}} \ cdot {\ vec {E}}))] ^ {n},}k = ({\ vec {L}} \ cdot {\ vec {R}}) ^ {n} = [{\ vec {L}} \ cdot ({\ vec {E}} - 2 {\ vec {N}} ({\ vec {N}} \ cdot {\ vec {E}}))] ^ {n},
где R - вектор отражения глаза, E - это вектор глаза (вектор обзора ), N - вектор нормали к поверхности. Все векторы нормализованы (‖ E → ‖ = ‖ N → ‖ = 1 {\ displaystyle \ | {\ vec {E}} \ | = \ | {\ vec {N}} \ | = 1}\ | {\ vec {E}} \ | = \ | {\ vec {N} } \ | = 1 ). L - вектор света. Например, N → = {0; 1; 0}; E → = {3 2; 1 2; 0}; L → = {- 0,6; 0,8; 0}; п = 3 {\ Displaystyle {\ vec {N}} = \ {0; \; 1; \; 0 \}; \; \; {\ vec {E}} = \ {{\ frac {\ sqrt {3 }} {2}}; \; {\ frac {1} {2}}; \; 0 \}; \; \; {\ vec {L}} = \ {- 0,6; \; 0,8; \; 0 \}; \; \; n = 3}{\ vec {N}} = \ {0; \; 1; \; 0 \}; \; \; {\ vec {E} } = \ {{\ frac {{\ sqrt {3}}} {2}}; \; {\ frac {1} {2}}; \; 0 \}; \; \; {\ vec {L} } = \ {- 0,6; \; 0,8; \; 0 \}; \; \; n = 3 тогда:
k = [L → ⋅ (E → - 2 N → (N → ⋅ E →))] n = [L → ⋅ (E → - 2 N → (0 ⋅ 3 2 + 1 ⋅ 0,5 + 0 ⋅ 0))] 3 = {\ displaystyle k = [{\ vec {L}} \ cdot ({\ vec {E}} - 2 {\ vec {N}} ({\ vec {N}} \ cdot {\ vec {E}}))] ^ {n} = [{\ vec {L}} \ cdot ({\ vec {E}} -2 {\ vec {N}} (0 \ cdot {\ frac {\ sqrt {3}} {2}} + 1 \ cdot 0.5 + 0 \ cdot 0))] ^ {3} =}k = [{\ vec {L}} \ cdot ({\ vec {E }} - 2 {\ vec {N}} ({\ vec {N}} \ cdot {\ vec {E}}))] ^ {n} = [{\ vec {L}} \ cdot ({\ vec {E}} - 2 {\ vec {N}} (0 \ cdot {\ frac {{\ sqrt {3}}} {2}} + 1 \ cdo t 0,5 + 0 \ cdot 0))] ^ {3} =
= [L → ⋅ (E → - N →)] 3 = [L → ⋅ ({3 2 - 0; 1 2 - 1; 0 - 0})] 3 = [- 0,6 ⋅ 3 2 + 0,8 ⋅ (- 0,5) + 0 ⋅ 0] 3 = (- 0,5196 - 0,4) 3 = 0,9196 3 = 0,7777. {\ displaystyle = [{\ vec {L}} \ cdot ({\ vec {E}} - {\ vec {N}})] ^ {3} = [{\ vec {L}} \ cdot (\ { {\ frac {\ sqrt {3}} {2}} - 0; \; {\ frac {1} {2}} - 1; \; 0-0 \})] ^ {3} = [- 0,6 \ cdot {\ frac {\ sqrt {3}} {2}} + 0,8 \ cdot (-0,5) +0 \ cdot 0] ^ {3} = (- 0,5196-0,4) ^ {3} = 0,9196 ^ {3} = 0,7777.}= [{\ vec {L}} \ cdot ({\ vec {E}} - {\ vec {N}})] ^ {3} = [{ \ vec {L}} \ cdot (\ {{\ frac {{\ sqrt {3}}} {2}} - 0; \; {\ frac {1} {2}} - 1; \; 0-0 \})] ^ {3} = [- 0,6 \ cdot {\ frac {{\ sqrt {3}}} {2}} + 0,8 \ cdot ( -0,5) +0 \ cdot 0] ^ {3} = (- 0,5196-0,4) ^ {3} = 0,9196 ^ {3} = 0,7777.
Приблизительная формула такова:
k = (N → ⋅ H →) n = (N → ⋅ ((L → + E →) / 2)) n = (N → ⋅ (( {- 0,6 + 3 2; 0,8 + 0,5; 0 + 0}) / 2)) 3 = (N → ⋅ (({0,266; 1,3; 0}) / 2)) 3 = {\ displaystyle k = ({\ vec {N}} \ cdot {\ vec {H}}) ^ {n} = ({\ vec {N}} \ cdot (({\ vec {L}} + {\ vec {E}}) / 2)) ^ {n} = ({\ vec {N}} \ cdot ((\ {- 0,6 + {\ frac {\ sqrt {3}} {2}}; \; 0,8 + 0,5; \; 0 + 0 \}) / 2)) ^ {3} = ({\ vec {N}} \ cdot ((\ {0.266; \; 1.3; \; 0 \}) / 2)) ^ {3} =}k = ({\ vec {N}} \ cdot {\ vec {H}}) ^ {n} = ({\ vec {N}} \ cdot (({\ vec {L}} + { \ vec {E}}) / 2)) ^ {n} = ({\ vec {N}} \ cdot ((\ {- 0.6 + {\ frac {{\ sqrt {3}}} {2}}; \; 0.8 + 0.5; \; 0 + 0 \}) / 2)) ^ {3} = ({\ vec {N}} \ cdot ((\ {0.266; \; 1.3; \; 0 \}) / 2)) ^ {3} =
= (N → ⋅ ({0,133; 0,65; 0})) 3 = (0 ⋅ 0,133 + 1 ⋅ 0,65 + 0) 3 = 0,65 3 = 0,274625. {\ displaystyle = ({\ vec {N}} \ cdot (\ {0,133; \; 0,65; \; 0 \})) ^ {3} = (0 \ cdot 0,133 + 1 \ cdot 0,65 + 0) ^ { 3} = 0,65 ^ {3} = 0,274625.}= ({\ vec {N}} \ cdot (\ {0.133; \; 0.65; \; 0 \})) ^ {3} = (0 \ cdot 0.133 + 1 \ cdot 0.65 + 0) ^ {3} = 0.65 ^ {3} = 0.274625.
Если вектор H нормализован, H → {0,133; 0,65; 0} ‖ H → ‖ = H → {0,133; 0,65; 0} 0,133 2 + 0,65 2 = H → {0,133; 0,65; 0} 0,668 = {0.20048; 0,979701; 0}, {\ displaystyle {\ frac {{\ vec {H}} \ {0.133; \; 0.65; \; 0 \}} {\ | {\ vec {H}} \ |}} = {\ frac { {\ vec {H}} \ {0.133; \; 0.65; \; 0 \}} {\ sqrt {0.133 ^ {2} + 0.65 ^ {2}}}} = {\ frac {{\ vec {H} } \ {0.133; \; 0.65; \; 0 \}} {0.668}} = \ {0.20048; 0.979701; 0 \},}{ \ frac {{\ vec {H}} \ {0.133; \; 0.65; \; 0 \}} {\ | {\ vec {H}} \ |}} = {\ frac {{\ vec {H}} \ {0,133; \; 0,65; \; 0 \}} {{\ sqrt {0,133 ^ {2} + 0,65 ^ {2}}}}} = {\ frac {{\ vec {H}} \ {0,133; \; 0,65; \; 0 \}} {0,668}} = \ {0.20048; 0,979701; 0 \}, , тогда
k = (N → ⋅ H →) n = (0 0,2 + 1 ⋅ 0,9797 + 0 ⋅ 0) 3 = 0,979701 3 = 0,940332. {\ Displaystyle к = ({\ vec {N}} \ cdot {\ vec {H}}) ^ {n} = (0 \ cdot 0,2 + 1 \ cdot 0,9797 + 0 \ cdot 0) ^ {3} = 0,979701 ^ {3} = 0,940332.}k = ({\ vec {N}} \ cdot {\ vec {H}}) ^ {n} = (0 \ cdot 0.2 + 1 \ cdot 0.9797 + 0 \ cdot 0) ^ {3} = 0.979701 ^ {3} = 0.940332.

Гауссово распределение

Несколько лучшую модель распределения микрограней можно создать с помощью Гауссова распределения. Обычная функция вычисляет интенсивность бликов как:

kspec = e - (∠ (N, H) m) 2 {\ displaystyle k _ {\ mathrm {spec}} = e ^ {- \ left ({\ frac {\ angle (N, H)} {m}} \ right) ^ {2}}}k _ {{\ mathrm {spec}}} = e ^ {{- \ left ({\ frac {\ angle (N, H)} {m}} \ right) ^ {2}}}

где m - постоянная между 0 и 1, которая контролирует кажущуюся гладкость поверхности.

Распределение Бекмана

Физически обоснованной моделью распределения микрограней является распределение Бекмана:

kspec = exp ⁡ (- tan 2 ⁡ (α) / m 2) π m 2 cos 4 ⁡ (α), α = arccos ⁡ (N ⋅ ЧАС) {\ Displaystyle к _ {\ mathrm {spec}} = {\ frac {\ exp {\ left (- \ tan ^ {2} (\ alpha) / m ^ {2} \ right)}} { \ pi m ^ {2} \ cos ^ {4} (\ alpha)}}, ~ \ alpha = \ arccos (N \ cdot H)}k _ {{\ mathrm {spec}}} = {\ frac {\ exp {\ left (- \ tan ^ {2} (\ alpha) / m ^ {2} \ right)}} {\ pi m ^ {2} \ cos ^ {4} (\ alpha)}}, ~ \ alpha = \ arccos (N \ cdot H)

, где m - среднеквадратичное наклон поверхностные микрограни (шероховатость материала). По сравнению с эмпирическими моделями, приведенными выше, эта функция «дает абсолютную величину отражательной способности без введения произвольных констант; недостаток в том, что она требует дополнительных вычислений». Однако эту модель можно упростить, поскольку tan 2 ⁡ (α) / m 2 = 1 - cos 2 ⁡ (α) cos 2 ⁡ (α) m 2 {\ displaystyle \ tan ^ {2} (\ alpha) / m ^ {2} = {\ frac {1- \ cos ^ {2} (\ alpha)} {\ cos ^ {2} (\ alpha) m ^ {2}}}}\ tan ^ {2} (\ alpha) / m ^ {2} = {\ frac {1- \ cos ^ {2} (\ alpha)} {\ cos ^ {2} (\ alpha) m ^ {2}}} . Также обратите внимание, что произведение cos ⁡ (α) {\ displaystyle \ cos (\ alpha)}\ cos (\ alpha) и функции распределения по поверхности нормализуется по полусфере, которой подчиняется эта функция.

Анизотропное распределение Гейдриха – Зейделя

Гейдрих – Зейдель. Распределение представляет собой простое анизотропное распределение, основанное на модели Фонга. Его можно использовать для моделирования поверхностей с небольшими параллельными канавками или волокнами, например, матовый металл, сатин и волосы.

Параметры

Входные параметры:

D - направление резьбы (в исходных документах это отображается как T). s - показатель степени блеска. Значения от 0 до бесконечности. N - Нормаль к реальной поверхности. L - Вектор от точки до источника света. V - Вектор от точки до наблюдателя. T - Направление резьбы на основе нормали реальной поверхности.. P - Проекция вектора L на плоскость с нормалью T (в исходной статье это обозначено как N).. R - Отраженный падающий световой луч против T. Входящий световой луч равен отрицательному L. единица.

Условия

Если некоторые из условий не выполняются, цвет списка равен нулю

  • 0 < N ⋅ V {\displaystyle 00 <N \ cdot V
  • 0 < P ⋅ V {\displaystyle 00 <P \ cdot V
  • 0 < R ⋅ V {\displaystyle 00 <R \ cdot V

Примечание: этот список не оптимизирован.

Формула

Сначала нам нужно скорректировать исходное направление волокна D, чтобы оно было перпендикулярно реальной нормали к поверхности N. Это можно сделать, спроецировав направление волокна на плоскость с нормалью N:

T знак равно D + (- D ⋅ N) ∗ N ‖ D + (- D ⋅ T) ∗ N ‖ {\ displaystyle T = {\ frac {D + (- D \ cdot N) * N} {\ | D + (- D \ cdot T) * N \ |}}}T = { \ frac {D + (- D \ cdot N) * N} {\ | D + (- D \ cdot T) * N \ |}}

Ожидается, что волокно будет цилиндрическим. Обратите внимание на то, что нормаль волокна зависит от положения света. Нормаль волокна в данной точке:

P = L + (- L ⋅ T) ∗ T ‖ L + (- L ⋅ T) ∗ T ‖ {\ displaystyle P = {\ frac {L + (- L \ cdot T) * T} {\ | L + (- L \ cdot T) * T \ |}}}P = {\ frac {L + (- L \ cdot T) * T} {\ | L + ( -L \ cdot T) * T \ |}}

Отраженный луч, необходимый для расчета зеркального отражения:

R = - L + 2 ∗ (L ⋅ T) ∗ T ‖ - L + 2 ∗ (L ⋅ T) ∗ T ‖ {\ Displaystyle R = {\ frac {-L + 2 * (L \ cdot T) * T} {\ | -L + 2 * (L \ cdot T) * T \ |}}}R = {\ frac {-L + 2 * (L \ cdot T) * T} {\ | -L + 2 * (L \ cdot T) * T \ |}}
Окончательный расчет
kdiff = L ⋅ P {\ displaystyle k _ {\ mathrm {diff}} = L \ cdot P}k _ {{\ mathrm {diff}}} = L \ cdot P
kspec = (V ⋅ R) s { \ displaystyle k _ {\ mathrm {spec}} = (V \ cdot R) ^ {s}}k _ {{\ mathrm {spec}}} = (V \ cdot R) ^ {s}

Оптимизация

Расчет R и P - дорогостоящая операция. Чтобы избежать их вычисления, исходную формулу можно переписать в следующем виде:

Diffuse
kdiff = L ⋅ P = L ⋅ L + (- L ⋅ T) ∗ T ‖ L + (- L ⋅ T) ∗ T ‖ =... Знак равно 1 - (L ⋅ T) 2 {\ displaystyle k _ {\ mathrm {diff}} = L \ cdot P = L \ cdot {\ frac {L + (- L \ cdot T) * T} {\ | L + (- L \ cdot T) * T \ |}} =... = {\ sqrt {1- (L \ cdot T) ^ {2}}}}k _ {{\ mathrm {diff}}} = L \ cdot P = L \ cdot {\ frac {L + (- L \ cdot T) * T} {\ | L + (- L \ cdot T) * T \ |}} =... = {\ sqrt {1- (L \ cdot T) ^ {2}}}
Specular
kspec = (V ⋅ R) s = (1 - (L ⋅ T) 2 ∗ 1 - (V ⋅ T) 2 - (L ⋅ T) ∗ (V ⋅ T)) s = [sin ⁡ (∠ (L, T)) sin ⁡ (∠ ( V, T)) - cos ⁡ (∠ (L, T)) cos ⁡ (∠ (V, T))] s = (- cos ⁡ (∠ (L, T) + ∠ (V, T))) s = [cos ⁡ (∠ (L, T)) cos ⁡ (∠ (V, T)) - sin ⁡ (∠ (L, T)) sin ⁡ (∠ (V, T))] s = cos s ⁡ ( ∠ (L, T) + ∠ (V, T)) {\ displaystyle {\ begin {align} k _ {\ mathrm {spec}} {} = (V \ cdot R) ^ {s} \\ {} = ({\ sqrt {1- (L \ cdot T) ^ {2}}} * {\ sqrt {1- (V \ cdot T) ^ {2}}} - (L \ cdot T) * (V \ cdot T)) ^ {s} \\ {} = \ left [\ sin (\ angle (L, T)) \ sin (\ angle (V, T)) - \ cos (\ angle (L, T)) \ cos (\ angle (V, T)) \ right] ^ {s} = (- \ cos (\ angle (L, T) + \ angle (V, T))) ^ {s} \\ { } = \ left [\ cos (\ angle (L, T)) \ cos (\ angle (V, T)) - \ sin (\ angle (L, T)) \ sin (\ angle (V, T)) \ right] ^ {s} \\ {} = \ cos ^ {s} (\ angle (L, T) + \ angle (V, T)) \ end {align}}}{\ begin {align} k _ {{\ mathrm {spec}}} {} = (V \ cdot R) ^ {s} \\ { } = ({\ sqrt {1- (L \ cdot T) ^ {2}}} * {\ sqrt {1- (V \ cdot T) ^ {2}}} - (L \ cdot T) * (V \ cdot T)) ^ {s} \\ {} = \ left [\ sin (\ angle (L, T)) \ sin (\ angle (V, T)) - \ cos (\ angle (L, T)) \ cos (\ angle (V, T)) \ right] ^ {s} = (- \ cos (\ angle (L, T) + \ angle (V, T))) ^ {s} \\ {} = \ left [\ cos (\ angle (L, T)) \ cos (\ angle (V, T)) - \ sin (\ angle (L, T)) \ sin (\ angle (V, T)) \ right] ^ {s} \\ {} = \ cos ^ {s} (\ angle (L, T) + \ angle (V, T)) \ end {align}}

Комментарии

T можно рассматривать как нормальный удар, и после этого можно применить другой BRDF, кроме Phong. Анизотропный kspec {\ displaystyle k _ {\ mathrm {spec}}}k _ {{\ mathrm {spec}}} следует использовать в сочетании с изотропным распределением, таким как распределение Фонга, для получения правильного зеркального блика

Ward анизотропное распределение

Анизотропное распределение Уорда [2] использует два контролируемых пользователем параметра α x и α y для управления анизотропией. Если два параметра равны, получается изотропное выделение. Зеркальный член в распределении:

kspec = ρ s (N ⋅ L) (N ⋅ V) N ⋅ L 4 π α x α y exp ⁡ [- 2 (H ⋅ X α x) 2 + (H ⋅ Y α Y) 2 1 + (ЧАС ⋅ N)] {\ displaystyle k _ {\ mathrm {spec}} = {\ frac {\ rho _ {s}} {\ sqrt {(N \ cdot L) (N \ cdot V)}}} {\ frac {N \ cdot L} {4 \ pi \ alpha _ {x} \ alpha _ {y}}} \ exp \ left [-2 {\ frac {\ left ({\ frac {H \ cdot X} {\ alpha _ {x}}} \ right) ^ {2} + \ left ({\ frac {H \ cdot Y} {\ alpha _ {y}}} \ right) ^ {2 }} {1+ (H \ cdot N)}} \ right]}k_ \ mathrm {spec} = \ frac {\ rho_s} {\ sqrt {(N \ cdot L) (N \ cdot V)}} \ frac {N \ cdot L} {4 \ pi \ alpha_x \ alpha_y} \ exp \ left [-2 \ frac {\ left (\ frac {H \ cdot X} {\ alpha_x} \ right) ^ 2 + \ left (\ frac {H \ cdot Y} {\ alpha_y} \ right) ^ 2} {1+ (H \ cdot N) } \ right]

Зеркальный член равен нулю, если N · L < 0 or N·V < 0. All vectors are unit vectors. The vector V is the viewing direction, L is the direction from the surface point to the light, H is the half-angle direction between V and L, N is the surface normal, and X and Y are two orthogonal vectors in the normal plane which specify the anisotropic directions.

Модель Кука – Торранса

Модель Кука – Торранса использует зеркальный член формы

kspec = DFG π (V ⋅ N) (N ⋅ L) {\ displaystyle k _ {\ mathrm {spec}} = {\ frac {DFG} {\ pi (V \ cdot N) (N \ cdot L)}}}{\ displaystyle k _ {\ mathrm {spec} } = {\ frac {DFG} {\ pi (V \ cdot N) (N \ cdot L)}}} .

Здесь D - коэффициент распределения Бекмана, как указано выше, а F - член Френеля. По соображениям производительности в трехмерной графике в реальном времени приближение Шлика часто используется для аппроксимации члена Френеля.

G - геометрический член ослабления, описывающий самозатенение из-за микрограней, и имеет форму

G = min (1, 2 (H N) (V ⋅ N) V H, 2 (ЧАС ⋅ N) (L ⋅ N) В ⋅ H) {\ Displaystyle G = \ min {\ left (1, {\ frac {2 (H \ cdot N) (V \ cdot N)} {V \ cdot H }}, {\ frac {2 (H \ cdot N) (L \ cdot N)} {V \ cdot H}} \ right)}}G = \ min {\ left (1, {\ frac {2 (H \ cdot N) (V \ cdot N)} {V \ cdot H}}, {\ frac {2 (H \ cdot N) (L \ cdot N)} {V \ cdot H}} \ right)} .

В этих формулах V - вектор к камере или глазу, H - вектор половинного угла, L - вектор к источнику света, N - вектор нормали, а α - угол между H и N.

Использование нескольких распределений

При желании, различные распределения (обычно с использованием одной и той же функции распределения с разными значениями m или n) могут быть объединены с использованием средневзвешенного значения. Это полезно, например, для моделирования поверхностей с небольшими гладкими и шероховатыми участками, а не с однородной шероховатостью.

См. Также
Ссылки
  1. ^Ричард Лайон, «Реформирование затенения Фонга для упрощения аппаратного рендерера», Технический отчет Apple № 43, Apple Computer, Inc. 1993 PDF
  2. ^Гласснер, Эндрю С. (ред). Введение в трассировку лучей. Сан-Диего: Academic Press Ltd, 1989. стр. 148.
  3. ^Петр Бекманн, Андре Спиццичино, Рассеяние электромагнитных волн на шероховатых поверхностях, Pergamon Press, 1963, 503 стр. (Переиздано Artech House, 1987, ISBN 978-0-89006 -238-8 ).
  4. ^Фолей и др. Компьютерная графика: принципы и практика. Менло-Парк: Аддисон-Уэсли, 1997. стр. 764.
  5. ^ Р. Кук и К. Торранс. «Модель отражательной способности для компьютерной графики ». Компьютерная графика (Труды SIGGRAPH '81), Vol. 15, № 3, июль 1981 г., стр. 301–316.
  6. ^Вольфганг Гейдрих и Ханс-Петер Зайдель, «Эффективная визуализация анизотропных поверхностей с использованием аппаратного обеспечения компьютерной графики», Группа компьютерной графики, Университет Эрлангена [1]
Последняя правка сделана 2021-06-09 02:14:17
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте