Освещение

Введение в освещение

Последнее обновление: 1.11.2015

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

Прежде чем перейти к практическим вещам, надо осветить некоторые теоретические темы касательно освещения. Существует несколько различных моделей освещения, различных теорий, но мы не будем подробно вдаваться во все мельчайшие теоретические подробности. Затронем лишь поверхностно в той степени, в которой нам необходимо для создания трехмерных сцен.

Типы освещения

Выделяют три типа освещения:

  • Ambient light: окружающее естественное освещение, рассеянный свет, который мы можем видеть вокруг в повседневной жизни

  • Directional light: направленный свет, например, солнечный свет

  • Point light: точечный свет, например, свет лампы

Материалы

Материалы по сути это то, что составляет поверхность объекта. В программе на WebGL материалы могут быть представлены как совокупность параметров, описывающих цвет, используемые текстуры и т.д. В реальной жизни взаимодействие света и материала объекта может давать различные эффекты: освещение металла будет отличаться от освещения деревянных материалов. Также и в программе WebGL, поэтому концепция материала очень важна для имитации освещения, близкого к реальному.

Нормали

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

Для определения нормалей используется векторное произведение векторов:

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

Использование библиотеки glMatrix в программах на WebGL облегчает нам расчеты, так как там есть встроенная функция vec3.cross(vector1, vector2, normal);, где normal - это вектор нормали, получающийся в результате произведения векторов vector1 и vector2.

Также перед использованием вектор нормали надо нормализовать, то есть привести к единичному виду. Для этого в языке шейдеров WebGL определена специальная функция normalize.

Если при создании трехмерных моделей вы используете специальные программы, например, Blender, то там при экспорте объекта вместе с ним экспортируются также и векторы нормалей, и их можно использовать для созданного в Blender объекта.

Модели освещения и модели затенения

При создании эффекта освещения нам надо выбрать модель освещения (lighting model) (также называются модели отражения), а также модель затенения (shading model). Модель затенения представляет определенный тип интерполяции, позволяющей получить конечное значение цвета объекта в зависимости от освещения. А модель освещения определяет способ взаимодействия материалов и света для получения финального значения цвета объекта.

Существует разное количество моделей затенения: затенение Фонга, модель Гуро, плоское затенение. То же самое касается и моделей освещения. Но мы затронем только базовые типы с практической стороны, не вдаваясь сильно в теоретические подробности.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850