Вычисление коэффициентов Френеля

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

Это доля отраженной световой энергии описывается при помощи коэффициентов Френеля (Fresnel).

Пусть свет падает в точку Р, лежащую на границе раздела двух сред, отличающихся своими коэффициентами преломления (индексами рефракции eta).

refraction vectors

Рис 1. Падение света на границу раздела двух сред.

Обозначим через etaI и etaT обозначить коэффициенты преломления для среды, из который идет луч и среды, на границе которой происходит преломления.

Также введем следующие обозначения:

Тогда отраженная доля энергии будет задаваться следующей формулой:

Обратите внимание, что на самом деле коэффициенты преломления etaI и etaT зависят от длины волны. Таким образом коэффициенты Френеля являются функциями двух аргументов - угла падения theta и длины волны lambda.

Из этой формулы легко найти значения коэффициента Френеля для случая нормального падения света (theta=0):

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

(1)
(2)
(3)
(4)
(5)

На следующих рисунках приводятся изображения отражающего объекта, полученное при помощи различных формул:

imager for  halfsum

Рис 2. Просто полусумма основного цвета и отражения из кубической карты

imager for eq 1

Рис 3. Для смешения основного цвета и отражения используется коэффициент из формулы (1).

imager for eq 2

Рис 4. Для смешения основного цвета и отражения используется коэффициент из формулы (2).

imager for eq 3

Рис 5. Для смешения основного цвета и отражения используется коэффициент из формулы (3).

imager for eq 4

Рис 6. Для смешения основного цвета и отражения используется коэффициент из формулы (4).

imager for eq 5

Рис 7. Для смешения основного цвета и отражения используется коэффициент из формулы (5).

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

Ниже приводятся скриншоты для исправленных примеров, бинарники с исправлениями можно скачать здесь, а исходники - здесь.

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

screenshot

screenshot

screenshot

screenshot

screenshot

Соответствующий исходный код можно скачать здесь. Обратите внимание, что для своей сборки он использует файлы с компакт-диска к книге Расширения OpenGL. Также доступны для скачивания откомпилированные версии для M$ Windows, Linux и Mac OS X.

Valid HTML 4.01 Transitional

Напиши мне
Используются технологии uCoz