Линейные и точечные источники света

Виды источников света и их характеристики

Дата публикации: 20 июня 2015.

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

Классификация источников света

Нет ни одной отрасли народного хозяйства, где бы ни использовалось искусственное освещение. Начало развития отрасли производства источников света было положено в 19 веке. Поводом для этого послужило изобретение дуговых ламп и ламп накаливания.

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

Это значит, что для создания светового излучения в качестве первичной затрачиваемой энергии используют электрический ток.

Источниками света считают приборы с излучением света не только в видимой части спектра (длинны волн 380 – 780 нм), но и ультрафиолетовой (10 – 380 нм) и инфракрасной (780 – 106 нм) областях спектра.

Различают следующие виды источников света: тепловые, люминесцентные и светодиодные.

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

Люминесцентные источники излучения способны излучать свет не зависимо от того в каком состоянии находится их излучающее тело. Свечение в них возникает  через преобразование различных видов энергии непосредственно в оптическое излучение.

В светодиодных источниках излучения свет образуется в полупроводниковом кристалле при  переходе электронов с одного энергетического уровня на другой, в результате чего происходит излучение фотонов. Подробнее об этом можно прочесть в статье “Светодиодные лампы”.

На основании изложенных различий источники света делят на четыре класса.

Тепловые

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

Люминесцентные

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

Смешанного излучения

Такие виды ламп освещения одновременно используются тепловое и люминесцентное излучение. Примером могут служить дуги высокой интенсивности.

Светодиодные

К светодиодным источникам света относят все типы ламп и световых приборов с использованием светоизлучающих диодов.

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

Основные параметры источников света

Световые, электрические и эксплуатационные свойства электрических источников света характеризуют рядом параметров.

Сравнение параметров нескольких источников света, для их использования в той или иной области применения, позволяет остановиться на наиболее подходящем из них.

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

Перечислим  основные электрические характеристики ламп и в целом всех источников света:

Номинальное напряжение – напряжение, при котором лампа работает в наиболее экономичном режиме и на которое она рассчитывалась для ее нормальной эксплуатации. Для лампы накаливания номинальное напряжение равно напряжению питающей электрической сети.

Обозначается такое напряжение Uл.н и измеряется в вольтах. Газоразрядные лампы такого параметра не имеют, так как напряжение разрядного промежутка определяется характеристиками  примененного для ее стабилизации пускорегулирующего аппарата (ПРА).

Номинальная мощность Pл.н – расчетная величина характеризующая мощность потребляемую лампой накаливания при ее включении на номинальное напряжение.

Для газоразрядных ламп, в цепь которых включают пускорегулирующие аппараты, номинальная мощность считается основным параметром. Основываясь на ее значении, путем экспериментов, определяются остальные электрические параметры ламп.

Нужно учесть, что для определения мощности потребляемой из сети нужно сложить мощности лампы и пускорегулирующего аппарата.

Номинальный ток лампы Iл.н – ток потребляемый лампой при номинальном напряжении и номинальной мощности.

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

Основными световыми параметрами источников света являются:

Световой поток, излучаемый лампой. Для измерения светового потока лампы накаливания ее включают на номинальное напряжение. У газоразрядных ламп измерение производят когда она работает на номинальной мощности. Световой поток обозначается буквой Ф (латинская фи). Единицей измерения светового потока является люмен (лм).

Сила света. Для некоторых видов специальных ламп накаливания вместо светового потока используются параметры средняя сферическая сила света или яркость тела накала. Для таких ламп они являются основными светотехническими параметрами. Используемые обозначения для силы света Iv, IvΘ, для яркости – L, их единицы измерения – соответственно кандела (кд) и кандела на квадратный метр (кд/м2).

Световая отдача лампы, это отношение светового потока лампы к ее мощности

ηv = Ф / P .

Единица световой отдачи – единица измерения параметра люмен на ватт (Лм/Вт). С помощью этого параметра можно оценить эффективность применения источников света в осветительных установках. Однако в качестве характеристики облучательных ламп используют другой параметр – величину отдачи потока излучения.

Стабильность светового потока – процентное отношение величины снижения светового потока в конце срока службы лампы к первоначальному световому потоку.

К эксплуатационным параметрам источников света относят параметры, характеризующие эффективность источника в определенных эксплуатационных условиях:

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

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

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

Это параметр особенно важен для ламп накаливания, так как увеличение их световой отдачи при прочих равных условиях приводит к сокращению срока службы.

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

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

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

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

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

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

Источник: https://artillum.ru/lamps/87-vidy-istochnikov-sveta.html

Классификация по геометрическим величинам: точечный и протяженный источники света, фотометрическое тело

⇐ ПредыдущаяСтр 4 из 8Следующая ⇒

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

где Е,1—величины освещенности и силы света, рассмотренные выше; r — расстояние до источника света в метрах; а — угол, на который фо­топриемник переместился от нормали.

В практике, за точечный источ­ник света принимается такой, максимальный размер которого не менее чем в 10 раз меньше расстояния до приемника излучения (рис. 2.1).

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

В случае если источник света точечный, а измерения освещенно­сти проводятся в плоскости, перпендикулярной нормали, на одном и том же расстоянии для разных углов поворота источника света, фор­мула, связывающая освещенность с силой света, примет вид:

Е = kI.

где к—коэффициент пропорциональности, численно равный обрат­ной величине квадрата расстояния до источника света.

Ход лучей от точечного источника. Тень – область пространства, в которую не попадает свет от источника.

Ход лучей от протяжённого источника. Полутень – область, в которую попадает свет от части источника.

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

Вопрос №8.

36.Преобразование излучений оптическими средами.

37. Понятие оптической среды. 38. Характеристики преобразования излучения: световые коэффициенты, кратности, оптические плотности, связь между ними.39.

Читайте также:  Что такое селективность защит в электроустановках

Светофильтры. 40 Классификация. 41-42.Эффективная плотность.

36. Преобразование излучений оптическими средами.

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

Φ0 Φρ

Φα Φτ

Φ0 – излучение, Φ ρ – отраженное стеклом, Φτ – прошедшее, Φα – поглощенное.

Способность тела к подобному преобразованию характеризуется коэффициентами:

отражения – ρ=Φρ/Φ0; поглощения – α=Φα/Φ0 ; пропускания – τ=Φτ/Φ0 .

Если коэффициенты определяются по преобразованию световых потоков (F,лм), то их называют световыми:

ρсв=Fρ/F0 ; αсв=Fα/F0 ; τсв=Fτ/F0

Воздействие окрашенной оптической среды на излучение зависит от спектрального состава излучения Φ0(λ) и спектральной кривой оптической среды.

При прохождении спектральной кривой Φ0(λ) через светофильтр со спектральной кривой пропускания τ(λ) вышедшее из светофильтра излучение имеет другой спектральный состав и другую мощность:

Φ0τ Φτ

λ

Спектральную кривую вышедшего из светофильтра излучения можно рассчитать по спектральным кривым, используя формулу Φτ(λ)= Φ0(λ)* τ(λ)

Понятие оптической среды.

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

Φ0 Φρ

Φα Φτ

Φ0 – излучение, Φ ρ – отраженное стеклом, Φτ – прошедшее, Φα – поглощенное.

Способность тела к подобному преобразованию характеризуется коэффициентами:

отражения – ρ=Φρ/Φ0; поглощения – α=Φα/Φ0 ; пропускания – τ=Φτ/Φ0 .

38. Характеристики преобразования излучения: световые коэффициенты, кратности, оптические плотности, связь между ними.

Если коэффициенты определяются по преобразованию световых потоков (F,лм), то их называют световыми:

ρсв=Fρ/F0 ; αсв=Fα/F0 ; τсв=Fτ/F0

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

Часто вместо коэффициентов пропускания и отражения используют оптическую плотность D. Она связана с оптическими коэффициентами формулами:

Dτ = lg1/τ = – lg τ; Dρ = lg1/ρ = – lg ρ.

Оптическая плотность может быть определена по световым коэффициентам. В этом случае ее называют визуальной.

Визуальная плотность в проходящем свете: Dвиз τ = lg1/τсв = lg F0/Fτ

в отраженном свете: Dвиз ρ= lg1/ρсв = lg F0/Fρ

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

40 Классификация:

по форме кривой спектрального пропускания:

-монохроматические (пропускают только узкий диапазон волн)

-селективные (задерживают часть спектра, а остальную пропускают)

-нейтрально-серые (поглощают свет равномерно для всех длин волн)

по целевому назначению:

-компенсационные

-аддитивные

-субтрактивные

-корректирующие

-защитные

Эффективная плотность.

Кратность (светофильтров) рассчитывают по формуле

или

Где- актиничность без светофильтра и- актиничность, при прохождении света через цветную оптическую среду.

Рассчитаем эффективную оптическую плотность: визуальную D виз и D коп.

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

Копировальная плотность среды

Визуальная плотность по нормированным спектральным кривым излучения и спектральной кривой пропускания рассчитывается:

Эффективную оптическую плотность или копировальную рассчитывают, если оригинал цветной

– спектральная чувствительность материала, на который с помощью излучения копируют изображение, чья спектральная характеристика описывается кривой.

Вопрос №9

Закон Бугера – Ламберта- Бера. 45. Величины, связываемые законом. 46. Смысл показателей К и Х. 47. Аддитивность оптических плотностей. 48. Отклонения от закона. 49. Закон Ламберта. 50. Индикатрисы светорассеяния, мутность сред. 51. Типы светорассеяния.

Источник: https://lektsia.com/2×32.html

Уроки по OpenGL с сайта OGLDev

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

Теперь мы собираемся рассмотреть точечный источник света, который имеет и позицию и эффект ослабевания при удалении от объекта. Классический пример точечного света – лампочка. Вы не замечаете эффекта ослабевания, когда она светит внутри небольшой комнаты, но если вынести ее на улицу, то будет сразу видна ограниченность дистанции, на которой она светит.

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

Вот почему мы указываем позицию, а не направление для точечного света.

Эффект ослабевания точечного света обычно называют “затуханием” (attenuation). Ослабление реального света подчиняется закону обратных квадратов, который говорит о том, что сила света обратно пропорциональна квадрату расстояния от источника света. Это описано в математическом выражении в следующей формуле:

Эта формула не дает хороших результатов в 3D графике. Например, на маленьком расстоянии сила света стремится в бесконечность. К тому же, у разработчика нет управления результатом кроме как задания начальной силы. Это слишком ограниченно. Поэтому мы добавим несколько коэффициентов в формулу, что бы сделать ее более гибкой:

Мы добавили 3 коэффициента затухания света в знаменатель. Постоянный, линейный и показательный коэффициенты. Физическая формула достигается при установлении постоянных и линейных множителей в 0, а экспоненциальный множитель в 1. Возможно вам это покажется удобным, если вы установите постоянный коэффициент в 1, а 2 других – как можно ближе к 0.

Когда вы устанавливаете постоянный коэффициент равным 1, то в целом вы гарантируете, что сила света достигнет максимума на расстоянии 0 и будет убывать при увеличении расстояния из-за возрастания знаменателя.

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

Давайте составим план расчетов точечного света:

  1. Вычисляем фоновый свет аналогично ситуации с направленным.
  2. Находим направление света как вектор из пикселя (в мировом пространстве) в позицию источника света. Теперь вы можете вычислить рассеянный и отраженный свет так же как и в случае с направленным, но в качестве направления будет использоваться этот вектор.
  3. Находим расстояние от пикселя до источника света и используем его для получения итогового значения затухания.
  4. Суммируем все 3 значения света вместе и делим их на коэффициент затухания для получения конечного цвета пикселя.

Прямиком к коду!

struct BaseLight
{ Vector3f Color; float AmbientIntensity; float DiffuseIntensity; BaseLight() { Color = Vector3f(0.0f, 0.0f, 0.0f); AmbientIntensity = 0.0f; DiffuseIntensity = 0.0f; }
};
.
.
.
struct PointLight : public BaseLight
{ Vector3f Position; struct { float Constant; float Linear; float Exp; } Attenuation; PointLight() { Position = Vector3f(0.0f, 0.0f, 0.0f); Attenuation.

Constant = 1.0f; Attenuation.Linear = 0.0f; Attenuation.Exp = 0.0f; }
}

Несмотря на различия, направленный и точечный свет по прежнему имеют много общего. Все это было перемещено в структуру BaseLight, которую наследуют оба типа света.

Направленный свет добавляет еще и направление в свой класс, в то время как точечный добавил свою позицию (в мировых координатах) и три коэффициента затухания.

void SetPointLights(unsigned int NumLights, const PointLight* pLights); GLuint m_numPointLightsLocation;

В дополнении к реализации точечного источника, этот урок еще покажет и как использовать сразу несколько источников света.

Мы допускаем, что может использоваться один источник направленного света (выступающий в роли солнца) и / или несколько точечных источников (лампочки в комнате, факелы в пещере и т.д.).

Функция принимает массив структур PointLight и размер массива и обновляет соответствующие значения в шейдере.

struct { …
} m_dirLightLocation; struct { GLuint Color; GLuint AmbientIntensity; GLuint DiffuseIntensity; GLuint Position; struct { GLuint Constant; GLuint Linear; GLuint Exp; } Atten;
} m_pointLightsLocation[MAX_POINT_LIGHTS];

Для поддержки нескольких источников света шейдер хранит массив структур аналогичных PointLight (только в GLSL). Есть основных способа обновить массив структур в шейдере:

  1. Вы можете получить адрес каждого поля структуры в массиве элементов (например, если массив из 5 элементов с 4 полями, то получим 20 uniform-адресов), и придется в каждый передавать значения по отдельности.
  2. Вы можете получить адреса полей только первого элемента в массиве и использовать функцию GL которая назначит массив переменных для каждого указанного поля атрибутов. Например, если первое поле вещественного типа и второе целочисленное, то вы можете задать все значения первого вещественного поля в одном вызове и для второго поля во втором.

Первый метод более расточителен с точки зрения количества uniform-адресов, которые вам потребуются, но он более гибок в использовании. Он позволяет обновить значение любой переменной во всем массиве просто получив ее адрес и не не требует преобразований данных как во втором способе.

Второму методу требуется меньше управления uniform-адресами, но если вы хотите обновить сразу несколько элементов, а вы получаете массив структур (как в SetPointLights()), то вам потребуется преобразовать их в структуру массивов, так как каждому uniform-адресу потребуется обновиться на массив переменных одного типа. Когда используете массив структур, то в нем разрыв в памяти между одинаковыми полями последовательных элементов, которые требуют перемещения их в отдельный массив. В этом уроке мы воспользуемся первым способом. Вам рекомендую попробовать оба и выбрать понравившийся.

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

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

Эта проблема может быть смягчена при использовании технологии под названием “отложенное затенение” (deferred shading), которая будет рассмотрена в будущем.

vec4 CalcLightInternal(struct BaseLight Light, vec3 LightDirection, vec3 Normal)
{ vec4 AmbientColor = vec4(Light.Color, 1.0f) * Light.AmbientIntensity; float DiffuseFactor = dot(Normal, -LightDirection); vec4 DiffuseColor = vec4(0, 0, 0, 0); vec4 SpecularColor = vec4(0, 0, 0, 0); if (DiffuseFactor > 0) { DiffuseColor = vec4(Light.Color, 1.0f) * Light.DiffuseIntensity * DiffuseFactor; vec3 VertexToEye = normalize(gEyeWorldPos – WorldPos0); vec3 LightReflect = normalize(reflect(LightDirection, Normal)); float SpecularFactor = dot(VertexToEye, LightReflect); SpecularFactor = pow(SpecularFactor, gSpecularPower); if (SpecularFactor > 0) { SpecularColor = vec4(Light.Color, 1.0f) * gMatSpecularIntensity * SpecularFactor; } } return (AmbientColor + DiffuseColor + SpecularColor);
}

Читайте также:  Что такое электрический фидер в электроэнергетике

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

Функция выше инкапсулирует общую часть между 2 типами света. Структура BaseLight хранит интенсивность и цвет. LightDirection подается отдельно по причине выше. Вершинная нормаль так же предоставляется потому, что мы нормируем ее только при входе в фрагментный шейдер и используем во многих вызовах в этой функции.

vec4 CalcDirectionalLight(vec3 Normal)
{ return CalcLightInternal(gDirectionalLight.Base, gDirectionalLight.Direction, Normal);
}

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

vec4 CalcPointLight(int Index, vec3 Normal)
{ vec3 LightDirection = WorldPos0 – gPointLights[Index].Position; float Distance = length(LightDirection); LightDirection = normalize(LightDirection); vec4 Color = CalcLightInternal(gPointLights[Index].Base, LightDirection, Normal); float Attenuation = gPointLights[Index].Atten.Constant + gPointLights[Index].Atten.Linear * Distance + gPointLights[Index].Atten.Exp * Distance * Distance; return Color / Attenuation;
}

Вычисления точечного источника света немного сложнее чем направленного. Эта функция будет подсчитана для каждого настроенного точечного источника света, поэтому она принимает индекс света в качестве и использует его в глобальном массиве.

Она вычисляет вектор из источника света (поступает в мировом пространстве из приложения) в мировую позицию, полученную из вершинного шейдера. Расстояние из источника до пикселя находится через встроенную функцию length(). Когда дистанция найдена, мы нормируем вектор направления.

Вспомним, что CalcLightInternal() ожидает уже нормированный вектор и в случае направленного света класс LightingTechnique берет заботу об этом на себя. Мы получаем обратно цвет из CalcInternalLight() и используем расстояние, которое нашли ранее, для вычисления затухания.

Итоговый цвет точечного источника получается делением цвета, который только что получили, на затухание.

void main()
{ vec3 Normal = normalize(Normal0); vec4 TotalLight = CalcDirectionalLight(Normal); for (int i = 0 ; i < gNumPointLights ; i++) { TotalLight += CalcPointLight(i, Normal); } FragColor = texture2D(gSampler, TexCoord0.xy) * TotalLight; }

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

void LightingTechnique::SetPointLights(unsigned int NumLights, const PointLight* pLights)
{ glUniform1i(m_numPointLightsLocation, NumLights); for (unsigned int i = 0 ; i < NumLights ; i++) { glUniform3f(m_pointLightsLocation[i].Color, pLights[i].Color.x, pLights[i].Color.y, pLights[i].Color.z); glUniform1f(m_pointLightsLocation[i].AmbientIntensity, pLights[i].AmbientIntensity); glUniform1f(m_pointLightsLocation[i].DiffuseIntensity, pLights[i].DiffuseIntensity); glUniform3f(m_pointLightsLocation[i].Position, pLights[i].Position.x, pLights[i].Position.y, pLights[i].Position.z); glUniform1f(m_pointLightsLocation[i].Atten.Constant, pLights[i].Attenuation.Constant); glUniform1f(m_pointLightsLocation[i].Atten.Linear, pLights[i].Attenuation.Linear); glUniform1f(m_pointLightsLocation[i].Atten.Exp, pLights[i].Attenuation.Exp); } }

Эта функция обновляет шейдер с значениями точечных источников через перебор элементов массива и передачи каждого атрибута элемента одного за другим. В нашем списке методов передачи данных этот способ был первым.

Демо к уроку показывает 3 точечных источника, гоняющихся друг за другом. Одна координата полагается на косинус, а другая на синус. Площадка легко делается из 2 треугольников. Нормаль идет строго вверх. При некоторых положениях камеры может показаться, что источники света выходят за пределы площадки, но это не так. Попробуйте объяснить эту иллюзию.

Источник: https://triplepointfive.github.io/ogltutor/tutorials/tutorial20.html

Освещение

Это пока черновой вариант. Материал будет дорабатываться в течение семестра.

Модели освещения

Мы можем видеть предметы в реальном мире благодаря освещению: свет отражается от предметов и попадает на сетчатку глаза. В 3D-графике освещение также важно: оно играет ключевую роль в создании реалистичного изображения.

Однако из-за ограничений метода растеризации освещение не возможно рассчитать «в лоб». Приходится разбивать освещение на составные части: прямое освещение источниками света, непрямое освещение (переотражения), тени. Каждая часть рассчитывается по-своему.

В данной главе рассмотрим прямое освещение источниками света.

Источники света

В реальном мире источники света могут иметь довольно сложную форму: направленные (Солнце), точечные (лампочки), линейные (люминесцентные лампы), площадные (светофор, экран монитора) и т.д.

Самые простые для моделирования источники света – направленные и точечные. Направленный источник описывается вектором направления, лучи света движутся параллельно. Точечный источник описывается координатами центра, лучи света движутся из центра во все стороны.

Цвет точки модели $C_p$ собирают из 3х составляющих:

$C_a$ – освещение окружающим светом (ambient)

$C_d$ – диффузное освещение (diffuse)

$C_s$ – бликовое освщение (specular)

Разберем их подробнее.

Освещение окружающим светом

На точку объекта падают не только прямые лучи света от источника света, но и лучи, переотраженные от стен, потолка и других объектов. Учитывать эти лучи можно в разных приближениях. В первом приближении используют константный свет, который характеризуется цветом $L_a$, вектором из 3х компонент $(r, g, b)$.

Часть этого света объект отражает, часть – поглощает. Коэффициенты отражения 3х компонент $(r, g, b)$ задаются вектором $K_a$.

Итого, получаем цвет точки:

Умножение векторов производится поэлементно.

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

Прямое освещение источником света разбивается на 2 компоненты: диффузную и бликовую, которые соответствуют 2м разным физическим процессам.

При диффузном освещении свет поглощается объектом и переизлучается во все стороны. Интенсивность поглощенного и переизлученного света определяется косинусом угла между нормалью к поверхности и направлением на источник света. Это закон Ламберта (1760).

Здесь:

  • $L_d$ – цвет падающего диффузного света
  • $K_d$ – коэффициенты отражения диффузного света
  • $n$ – нормаль к повехности в точке (единичный вектор)
  • $l$ – направление на источник света (единичный вектор)
  • dot – скалярное произведение векторов

Бликовое (зеркальное) освещение

При бликовом освещении угол падения равен углу отражения. Т.е. максимум яркости приходится на отраженный вектор $r$. В 1973 году Фонг предложил приближенную формулу, которая позволила сравнительно правдоподобно изобразить блик и не требовала сложных вычислений.

Здесь:

  • $L_s$ – цвет падающего бликового света
  • $K_s$ – коэффициенты отражения бликового света
  • $v$ – направление на виртуальную камеру (единичный вектор)
  • $r$ – отраженный вектор (единичный вектор)
  • $s$ – shininess – скалярный коэффициент, определяющий размер блика

В 1977 Блинн немного доработал модель Фонга. Он предложил ввести полувектор – средний вектор между направлением на виртуальную камеру и направлением на источник света:

Можно заметить, что угол между полувектором $h$ и нормалью $n$ пропорционален углу между $v$ и $r$. Поэтому формулу Фонга можно переписать так:

Затухание

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

Здесь:

  • $d$ – расстояние от точки до источника света
  • $a_0$, $a_1$, $a_2$ – некие коэффициенты

Параметры

Все параметры этой модели можно разбить на логические части.

Параметры источника света:

  • $lp$ – положение точечного источника света
  • $L_a$ – цвет окружающего света
  • $L_d$ – цвет падающего диффузного света
  • $L_s$ – цвет падающего бликового света
  • $a_0$, $a_1$, $a_2$ – коэффициенты затухания

Здравый смысл подсказывает, что $L_d$ и $L_s$ должны быть равны. Но для большей гибкости настройки их разделяют.

В основной программе это можно записать так:

struct LightInfo
{ glm::vec3 position; glm::vec3 ambient; glm::vec3 diffuse; glm::vec3 specular; float a0; float a1; float a2;
}; LightInfo light;

На языке GLSL так:

struct LightInfo
{ vec3 pos; vec3 La; vec3 Ld; vec3 Ls; float a0; float a1; float a2;
}; uniform LightInfo light;

Инициализация юниформ-переменной будет выглядеть так:

GLint uniformLoc; //Переводим положение источника света из мировой СК в СК виртуальной камеры
glm::vec3 lightPosCamSpace = glm::vec3(camera.viewMatrix * glm::vec4(light.position, 1.0)); uniformLoc = glGetUniformLocation(programId, “light.pos”);
glUniform3fv(uniformLoc, 1, glm::value_ptr(lightPosCamSpace)); uniformLoc = glGetUniformLocation(programId, “light.La”);
glUniform3fv(uniformLoc, 1, glm::value_ptr(light.ambient)); uniformLoc = glGetUniformLocation(programId, “light.Ld”);
glUniform3fv(uniformLoc, 1, glm::value_ptr(light.diffuse)); uniformLoc = glGetUniformLocation(programId, “light.Ls”);
glUniform3fv(uniformLoc, 1, glm::value_ptr(light.specular)); uniformLoc = glGetUniformLocation(programId, “light.a0”);
glUniform1f(uniformLoc, light.a0); uniformLoc = glGetUniformLocation(programId, “light.a1”);
glUniform1f(uniformLoc, light.a1); uniformLoc = glGetUniformLocation(programId, “light.a2”);
glUniform1f(uniformLoc, light.a2);

Параметры материала:

  • $K_a$ – коэффициенты отражения окружающего света
  • $K_d$ – коэффициенты отражения диффузного света
  • $K_s$ – коэффициенты отражения бликового света
  • $s$ – shininess – скалярный коэффициент, определяющий размер блика

Здравый смысл подсказывает, что $K_a$ и $K_d$ должны быть равны. Но для большей гибкости настройки их разделяют.

struct MaterialInfo
{ glm::vec3 ambient; glm::vec3 diffuse; glm::vec3 specular; float shininess;
}; MaterialInfo material;

На языке GLSL так:

struct MaterialInfo
{ vec3 Ka; vec3 Kd; vec3 Ks; float s;
}; uniform MaterialInfo material;

Инициализация юниформ-переменной будет выглядеть так:

GLint uniformLoc; uniformLoc = glGetUniformLocation(programId, “material.Ka”);
glUniform3fv(uniformLoc, 1, glm::value_ptr(material.ambient)); uniformLoc = glGetUniformLocation(programId, “material.Kd”);
glUniform3fv(uniformLoc, 1, glm::value_ptr(material.diffuse)); uniformLoc = glGetUniformLocation(programId, “material.Ks”);
glUniform3fv(uniformLoc, 1, glm::value_ptr(material.specular)); uniformLoc = glGetUniformLocation(programId, “material.s”);
glUniform1f(uniformLoc, material.shininess);

Модели интерполяции

Применять вышеприведенную формулу к полигональным 3D-моделям можно по-разному. Рассмотрим несколько моделей интерполяции. Их ещё называют моделями затенения (shading).

Плоское затенение (flat shading)

Эта модель уже вошла в историю. Для каждого треугольника берется нормаль и подставляется в формулу освещения. Треугольник заливается получившимся цветом.

Количество рассчетов пропорционально количеству треугольников. Минус метода – видны стыки между гранями.

Этот метод не реализуется «в лоб» на OpenGL, т.к. грани не обладают собственными атрибутами. Тем не менее плоское затенение можно смоделировать разными способами:

  • Всем вершинам треугольника назначить одинаковые нормали
  • Вычислить нормаль к треугольнику в геометрическом шейдере
  • Использовать метод интерполяции flat для входных во фрагментный шейдер переменных

Модель интерполяции Гуро (Gouraud shading) или повершинное освещение

Из названия понятно, что вычисления будут происходить в вершинном шейдере. Схема такая:

  • В вершинном шейдере нормаль вершины подставляется в формулу освещения
  • Полученный цвет передается на выход из вершинного шейдера
  • На вход фрагментному шейдеру поступает уже интерполированный цвет
  • Фрагментный шейдер копирует цвет на выход

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

Как было показано выше, мы передаем координаты источника света сразу в системе координат виртуальной камеры.

Преобразуем координаты вершины:

Поскольку виртуальная камера находится в начале своей собственной системы координат, то вектор направления на виртуальную камеру будет равен:

Осталось преобразовать только нормаль. Увы, в общем случае нормаль нельзя преобразывать с помощью матрицы $M_{view} * M_{model}$, иначе может нарушиться свойство перпендикулярности. Для нормалей используется отдельная матрица:

Читайте также:  Бесконтактное управление электроприводами

В основной программе её можно проинициализировать так:

glm::mat3 normalToCameraMatrix = glm::transpose(glm::inverse(glm::mat3(camera.viewMatrix * modelMatrix))); GLint uniformLoc = glGetUniformLocation(programId, “normalToCameraMatrix”);
glUniform3fv(uniformLoc, 1, glm::value_ptr(normalToCameraMatrix));

Итого, код вычисления цвета будет выглядеть так:

#version 330

uniform mat4 modelMatrix;
uniform mat4 viewMatrix;
uniform mat4 projectionMatrix; uniform mat3 normalToCameraMatrix; struct LightInfo
{ vec3 pos; vec3 La; vec3 Ld; vec3 Ls; float a0; float a1; float a2;
};
uniform LightInfo light; struct MaterialInfo
{ vec3 Ka; vec3 Kd; vec3 Ks; float s;
};
uniform MaterialInfo material; layout(location = 0) in vec3 vertexPosition;
layout(location = 1) in vec3 vertexNormal; out vec3 color; void main()
{ vec4 posCamSpace = viewMatrix * modelMatrix * vec4(vertexPosition, 1.0); vec3 normalCamSpace = normalize(normalToCameraMatrix * vertexNormal); vec3 lightDirCamSpace = normalize(light.pos – posCamSpace.xyz); float distance = length(light.pos – posCamSpace.xyz); float attenuation = 1.0 / (light.a0 + light.a1 * distance + light.a2 * distance * distance); float NdotL = max(dot(normalCamSpace, lightDirCamSpace), 0.0); color = light.La * material.Ka + light.Ld * material.Kd * NdotL * attenuation; if (NdotL > 0.0) { vec3 viewDirection = normalize(-posCamSpace.xyz); vec3 halfVector = normalize(lightDirCamSpace + viewDirection); float blinnTerm = max(dot(normalCamSpace, halfVector), 0.0); blinnTerm = pow(blinnTerm, material.shininess); color += light.Ls * material.Ks * blinnTerm * attenuation; } gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(vertexPosition, 1.0);
}

Модель интерполяции Фонга (Phong shading) или пофрагментное освещение

Модель Гуро хорошо подходит для диффузного освещения, но плохо показывает блики. Если маленький блик попадет в центр большого треугольника, то он вообще не будет виден.

В модели Фонга расчет освещения происходит во фрагментном шейдере:

  • Нормаль вершины передается на выход из вершинного шейдера (преобразованная в другую СК)
  • На вход фрагментному шейдеру поступает интерполированная нормаль
  • Во фрагментном шейдере нормаль подставляется в формулу освещения и вычисляется цвет

Сравнение двух моделей интерполяции:

В вершинном шейдере преобразуем координаты вершины и нормаль в систему координат виртуальной камеры:

#version 330

uniform mat4 modelMatrix;
uniform mat4 viewMatrix;
uniform mat4 projectionMatrix; uniform mat3 normalToCameraMatrix; layout(location = 0) in vec3 vertexPosition;
layout(location = 1) in vec3 vertexNormal; out vec3 normalCamSpace;
out vec4 posCamSpace; void main()
{ posCamSpace = viewMatrix * modelMatrix * vec4(vertexPosition, 1.0); normalCamSpace = normalize(normalToCameraMatrix * vertexNormal); gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(vertexPosition, 1.0);
}

Код фрагментного шейдера:

#version 330

struct LightInfo
{ vec3 pos; vec3 La; vec3 Ld; vec3 Ls; float a0; float a1; float a2;
};
uniform LightInfo light; struct MaterialInfo
{ vec3 Ka; vec3 Kd; vec3 Ks; float s;
};
uniform MaterialInfo material; in vec3 normalCamSpace;
in vec4 posCamSpace; out vec4 fragColor; void main()
{ vec3 normal = normalize(normalCamSpace); vec3 lightDirCamSpace = normalize(light.pos – posCamSpace.xyz); float distance = length(light.pos – posCamSpace.xyz); float attenuation = 1.0 / (light.a0 + light.a1 * distance + light.a2 * distance * distance); float NdotL = max(dot(normal, lightDirCamSpace), 0.0); vec3 color = light.La * material.Ka + light.Ld * material.Kd * NdotL * attenuation; if (NdotL > 0.0) { vec3 viewDirection = normalize(-posCamSpace.xyz); vec3 halfVector = normalize(lightDirCamSpace + viewDirection); float blinnTerm = max(dot(normal, halfVector), 0.0); blinnTerm = pow(blinnTerm, material.shininess); color += light.Ls * material.Ks * blinnTerm * attenuation; } fragColor = vec4(color, 1.0);
}

Карта нормалей

Существует метод normal mapping, который позволяет добавить к 3D-модели больше мелких деталей без увеличения числа полигонов. Идея в том, чтобы во фрагментном шейдере немного отклонять интерполированную нормаль на основе данных из специальной текстуры, которая называется картой нормалей.

Компоненты цвета, прочитанного из текстуры, лежат в диапазоне $[0;1]$. Чтобы из цвета декодировать нормаль, нужно компоненты перевести в диапазон $[-1;1]$.

vec3 color = …
vec3 normal = color * 2.0 – 1.0;

Подробное описание этой метода в отдельной главе.

Множество источников свет

Если в сцене имеется несколько источников света, то свет от них суммируется. Чем больше источников, тем больше вычислений. Существует несколько методов оптимизации рендеринга для большого числа источников света. Они делятся на 2 вида: forward rendering и deferred rendering. Подробное описание этих методов будут в отдельных главах.

В простейшем случае можно передать параметры нескольких источников света в шейдер с помощью массива, и суммировать освещение в цикле:

struct LightInfo
{ vec3 pos; vec3 La; vec3 Ld; vec3 Ls; float a0; float a1; float a2;
};
uniform LightInfo light[3]; //3 источника света

Источник: https://alexander-bobkov.ru/opengl/tutorials/tutorial4

Источники света

Определение 1

Источником света называют тело, излучающее энергию в световом диапазоне.

Классификацию источников света можно проводить в зависимости от различных их характеристик. Так в физике важным является деление источников света на точечные и непрерывные (модели источников света).

Возможно деление на естественные и искусственные источники света. К естественным источникам относят: Солнце, звезды, атмосферные электрические разряды и т.д. Искусственными источниками света считают: пламя, разного рода лампы, светодиоды, лазеры. Искусственные источники света делят в зависимости от вида энергии, которая переходит в излучение.

Источники света подразделяют на:

  • тепловые источники (свет в которых появляется в результате их нагрева до высоких температур);
  • люминесцентные источники (световое излучение в которых, возникает за счет превращения различных видов энергии, отличной от тепловой).

Также искусственные источники света могут делить в зависимости от их конструктивных особенностей.

Ничего непонятно?

Попробуй обратиться за помощью к преподавателям

Характеристики источников света. Сила света

Определение 2

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

Определение 3

Для того чтобы охарактеризовать точечный источник применяют такое понятие как сила света ($I$), которую определяют как:

[I=frac{dФ}{dOmega }left(1
ight),]

где $dФ$ — световой поток, который излучается источником в пределах телесного угла $dOmega $ . Если рассматривать сферическую систему координат, то можно сказать, что в общем случае сила света зависит от полярного ($vartheta$) и азимутального ($varphi $) углов ($I=I(vartheta,varphi )$).

Определение 4

Источник света носит название изотропного, если его сила света не зависит от направления. Для изотропного источника света можно записать, что:

[I=frac{Ф}{4pi }left(2
ight),]

где Ф — суммарный световой поток, который излучает источник по всем направлениям. Величину силы источника, которая определяется как (2) еще называют средней сферической силой света источника.

Если источник света нельзя считать точечным (протяженный источник), то используют понятие силы света элемента его поверхности ($dS$). В таком случае в формуле (1) под величиной $dФ$ понимают световой поток, который излучает элемент поверхности источника ($dS$) в пределах телесного угла ($dOmega $).

Основной единицей измерения силы света в $СИ$ является кандела ($кд$) ( старое – свеча ($св$)). $1 кд$ излучает световой эталон в виде абсолютно черного тела при температуре $T=2046,6 K$ (температура затвердевания чистой платины) и давлении $101325 Па$.

Световой поток

Световой поток, который посылается точечным источником в телесный угол $dOmega ,$ определяется выражением:

Соответственно, полный световой поток, который исходит от источника, равен интегралу по полному телесному углу $4pi $:

Основная единица измерения светового потокалюмен ($лм$), который равен световому потоку, который испускает источник в $1 кд$ внутрь телесного угла $1 стерадиан$.

Освещенность

Определение 5

Величина ($E$) равная:

[E=frac{dФ_{pad}}{dS}left(5
ight)]

называется освещенностью. В выражении (5) $dФ_{pad}$ — величина светового потока, который падает на элемент поверхности $dS.$ Освещенность измеряется с СИ в люксах (лк).

[1лк=frac{1лм}{1м^2}left(6
ight),]

при равномерном распределении потока по поверхности.

Освещенность, которую создает точечный источник можно вычислить как:

где r- расстояние от источника до поверхности, $alpha $ — угол между нормалью к поверхности и направлением на источник.

Светимость

Протяженный источник света характеризуют светимостью ($R$) его участков. Она характеризует излучение (отражение) света выделенным элементом поверхности по всем направлениям. Определяется она как:

где ${dФ}_{isp}$- поток, который испускает элемент поверхности источника ($dS$) по всем направлениям в пределах $0le vartheta le frac{pi }{2}$, где $vartheta$ — угол, который образует выделенное направление с внешней нормалью к поверхности.

Светимость способна появляться из-за отражения поверхностью падающего на нее света. В таком случае под ${dФ}_{isp}$ следует понимать в выражении (8) поток, который отражается элементарной поверхностью $dS $по всем направлениям.

Светимость измеряется в $люксах$.

Яркость

Яркость ($B$) используют для характеристики излучения (отражения) света в выделенном направлении. Направление при этом задается полярным углом ($vartheta$), который откладывается от внешней нормали ($overrightarrow{n}$) к излучающей площадке и азимутальным углом ($varphi $). Данная физическая величина определяется как:

где $dS$ — элементарная светящаяся площадка. В общем случае $B=B(vartheta,varphi )$.

Определение 6

Источники света, яркость которых не изменяется в зависимости от направления, называют ламбертовскими (или косинусными, подчиняющимися закону Ламберта). Для ламбертовских светильников $dI$ элементарной площадки пропорциональна $cos vartheta.$

Светимость и яркость связаны соотношением:

Единица яркости $кандела$ на квадратный метр ($frac{кд}{м^2}$).

Пример 1

Задание: Найдите световой поток, который излучает элементарная поверхность $dS$ внутрь конуса, ось которого перпендикулярна выделенному элементу. Угол конуса равен $vartheta_0$. Считать, что светящаяся поверхность подчиняется закону Ламберта и ее яркость равна $В$.

Решение:

За основу решения задачи примем определение яркости и из него выразим элемент светового потока:

[B=frac{dФ}{dOmega dScosvartheta } o dФ=BdOmega dScosvartheta left(1.1
ight).]

Элементарный телесный угол в сферических координатах равен:

[dOmega =sinvartheta dvartheta dvarphi left(1.2
ight).]

Подставим выражение для телесного угла в выражение (1.1), получим:

[dФ=Bsinvartheta dvartheta dvarphi dScosvartheta left(1.3
ight).]

Найдем полный световой поток интегрированием выражения (1.3):

[Ф=BdSintlimits^{vartheta_0}_0{sinvartheta cosvartheta dvartheta }intlimits^{2pi }_0{dvarphi =pi ВdS}sin^2 vartheta_0.]

Ответ: $Ф=pi ВdSsin^2vartheta_0.$

Пример 2

Задание: Яркость однородного светящегося диска радиуса $r$ изменяется в соответствии с законом $B=B_0cosvartheta,$ где $B_0=const, vartheta — $угол с нормалью к поверхности. Каков световой поток (Ф), который испускает диск?

Решение:

Элемент светового потока, используя уравнение из условий задачи для ярости выразим как

[dФ=BdOmega dScosvartheta =B_0{cosvartheta}^2dOmega dSleft(2.1
ight),]

где элементарный телесный угол в сферических координатах равен:

[dOmega =sinvartheta dvartheta dvarphi left(2.2
ight).]

Световой поток найдем как интеграл от выражения (2.1) при использовании (2.2):

[Ф=B_0dS{intlimits^{frac{pi }{2}}_0{sinvartheta}cos^2}vartheta dvartheta intlimits^{2pi }_0{dvarphi =}2pi B_0dS{intlimits^{frac{pi }{2}}_0{sinvartheta}cos^2}vartheta dvartheta=2pi B_0dS{intlimits^{frac{pi }{2}}_0{d(-cosvartheta)}cos^2}vartheta=frac{2}{3}pi B_0dS=frac{2}{3}B_0{pi }^2r^2.]

Ответ: $Ф=frac{2}{3}B_0{pi }^2r^2.$

Источник: https://spravochnick.ru/fizika/istochniki_sveta/

Ссылка на основную публикацию