Меню сайта


Статистика



Главная » Статьи » Уроки » С/C++, Lua, HLSL, DirectX, OpenGL

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

Существует несколько основных моделей освещения - алгоритмов просчета цвета пикселя:
- Равномерное(ambient) освещение
- Диффузное(diffuse) освещение
- Бликовое(specular) освещение

Равномерное освещение

Самое простое. Не зависит ни от каких параметров и лишь задаёт начальное освещение объектов окружающей средой.

Code

Color = Ambient * AmbientIntensity;

,где Ambient - цвет объекта, AmbientIntensity - яркость источника света

Диффузное освещение

Эта модель учитывает направление источника света и направление нормали(перпендикуляра) к поверхности.
Пусть L - вектор направления света, а N - нормаль, тогда коефициент яркости пикселя имеет значение скалярного произведения этих двух векторов. Т.е.:

Code

Color = Diffuse * DiffuseIntensity * DotProduct(L,N);

,где Diffuse - рассеиваемый цвет объекта, DiffuseIntensity - яркость рассеиваемого света источника света, DotProduct() - скалярное произведение.

Бликовое освещение

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

Сохраняя все предыдущие обозначения добавим R - вектор отражения света от поверхности и V - вектор от глаз наблюдателя. Тогда:

Code

R = Reflect(-V,N);
Color = Specular * SpecularIntensity * DotProduct(V,R);


,где Specular - отражаемый цвет объекта, SpecularIntensity - яркость отражаемого света источника света, DotProduct() - скалярное произведение.

Чтобы добиться максимального эффекта, эти модели комбинируют:

Code

Color = (Diffuse) * (Ambient) * (Specular^k);

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

Категория: С/C++, Lua, HLSL, DirectX, OpenGL | Добавил: Molch (18.11.2009)
Просмотров: 1133 | Теги: освещение, свет, модели | Рейтинг: 5.0/1
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Скачать