Главная Статьи Ссылки Скачать Скриншоты Юмор Почитать Tools Проекты Обо мне Гостевая |
Для получения реалистически-выглядящих отражений (равно как и преломлений) необходимо учитывать тот факт, что доля отраженной (и преломленной) световой энергии не является постоянной величиной. Она зависит как от угла падения, так и от длины волны света.
Это доля отраженной световой энергии описывается при помощи коэффициентов Френеля (Fresnel).
Пусть свет падает в точку Р, лежащую на границе раздела двух сред, отличающихся своими коэффициентами преломления (индексами рефракции eta).
Рис 1. Падение света на границу раздела двух сред.
Обозначим через etaI и etaT обозначить коэффициенты преломления для среды, из который идет луч и среды, на границе которой происходит преломления.
Также введем следующие обозначения:
Тогда отраженная доля энергии будет задаваться следующей формулой:
Обратите внимание, что на самом деле коэффициенты преломления etaI и etaT зависят от длины волны. Таким образом коэффициенты Френеля являются функциями двух аргументов - угла падения theta и длины волны lambda.
Из этой формулы легко найти значения коэффициента Френеля для случая нормального падения света (theta=0):
К сожалению для непосредственного использования в системах реального времени точная формула слишком сложна, поэтому обычно используются различные ее приближения.
|
(1)
|
|
(2)
|
|
(3)
|
|
(4)
|
|
(5)
|
На следующих рисунках приводятся изображения отражающего объекта, полученное при помощи различных формул:
Рис 2. Просто полусумма основного цвета и отражения из кубической карты
Рис 3. Для смешения основного цвета и отражения используется коэффициент из формулы (1).
Рис 4. Для смешения основного цвета и отражения используется коэффициент из формулы (2).
Рис 5. Для смешения основного цвета и отражения используется коэффициент из формулы (3).
Рис 6. Для смешения основного цвета и отражения используется коэффициент из формулы (4).
Рис 7. Для смешения основного цвета и отражения используется коэффициент из формулы (5).
К сожалению в первую версию статьи вкралась ошибка, а именно перепутаны местами веса для смешения цветов, в результате наибольшее отражение получилось при перпендикулярном угле (что противоречит формулам 1-5).
Ниже приводятся скриншоты для исправленных примеров, бинарники с исправлениями можно скачать здесь, а исходники - здесь.
Для большей реалистичности, степени в некоторых формулах были слегка изменены, я полагаю, что подбор степени в данном случае должен определяться исключительно исходя из получаемых изображений.
Соответствующий исходный код можно скачать здесь. Обратите внимание, что для своей сборки он использует файлы с компакт-диска к книге Расширения OpenGL. Также доступны для скачивания откомпилированные версии для M$ Windows, Linux и Mac OS X.