Особенности моделирования света: Экспозиция


Яркость окружающего мира

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

Яркость "внутри" компьютера

Яркость внутри компьютера имеет (обычно) 256 градаций, начиная с 0 (почти черный) и заканчивая 255 (почти белый).

Понимая это, мы можем задать себе вопрос: а как же в таком случае отобразить реалистично выглядящий рисунок на экране монитора. Реальный мир имеет очень широкий яркостной диапазон, а компьютер -- только узкую полосу из него. Мы можем просто привести значения яркости к нашему диапазону. Скажем, темная пещера будет соответствовать яркости 0 , а солнце -- яркости 255. Если мы сделаем так, то у нас будут проблемы с отображением, скажем, лиц людей. Они будут слишком темными.

Вот вам пример: справа — яркость солнца приведена к величине 255. Мы можем прекрасно видеть солнце, но такое впечатление, что на земле ночь.

Другой напрашивающийся вариант — подрезать значения. Допустим, все, что ярче снега, будет иметь яркость 255. Справа вы видите такое изображение. Земля выглядит прекрасно, но вот небо… Большая часть его просто белая, о солнце мы можем только догадаться. Тучи просто выглядят светлыми пятнами на белом фоне.

Что же, нам следует рассмотреть следующий вопрос.

Яркость фотографий

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

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

Щелчок фотоаппарата

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

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

И как это связать с компьютерной графикой?

Мы можем утверждать, что фотоаппараты прекрасно приспособлены для получения снимков со сцен с широким яркостным диапазоном. Для дальнейших примеров давайте определимся с начальным значением выдержки (экспозиции) пленки на на свету. Допустим, что на некоторой площади поверхности пленки находится 100 молекул светочувствительного химического состава. Свет попадает на этот участок, и половина молекул темнеет (конечно же, молекулы темнеть не могут, но здесь для упрощения понимания процесса будем говорить так). Таким образом, результирующая фотография будет иметь половинную от максимально возможной яркости. Если на тот же участок пленки снова попадет такое же количество света, то потемнеет половина из оставшегося количества молекул, таким образом, результирующий снимок будет иметь 75% яркости от максимума. Чем больше свет воздействует на пленку, тем больше молекул темнеет. Однако чем меньше молекул остаются не тронутыми, тем дольше должно быть воздействие света, чтобы затемнить одинаковое количество молекул.

Вот теперь вы достаточно вооружены для того, чтобы отобразить на экране монитора практически любое изображение, даже с самыми большими вариациями яркости, и при этом не потерять в качестве отображения. Не верите -- смотрите сами. Узнаете картинку? Эта та же самая картинка, что и в начале главы, только теперь она была преобразована по экспоненциальному преобразованию. Солнце ярче неба, которое, в свою очередь, ярче земли, все детали отчетливо видимы, и мы ничего не потеряли. Именно так оно и должно быть.

Управление экспозицией

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

(Кол-во света на пленке) = (кол-во света)* К

brightness= 1 — e-(кол-во света на пленке)

где: brightness — значение яркости

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

function Expose (float light, float exposure)
return ( 1 — exp(light * exposure) ) * 255
end function
main procedure: for every pixel on the screen //для каждого пикселя на экране

calculate amount of light entering the camera for this pixel, by Ray Tracing or whatever call this value L
//просчитать кол-во света, попавшего в фотоаппарат, для этого пикселя, присвоить полученное значение переменной L

PixelValue = Expose (L, K)

Plot this pixel with a brightness of PixelValue
//определяем яркость пикселя значением PixelValue
end of loop

end of main procedure


[ Читайте по этой теме: Физическая модель света ]

[ В скором времени будет продолжение: Затенение Гуро ]



Материал для данной статьи любезно предоставил Hugo Elias




Дополнительно

iXBT BRAND 2016

«iXBT Brand 2016» — Выбор читателей в номинации «Процессоры (CPU)»:
Подробнее с условиями участия в розыгрыше можно ознакомиться здесь. Текущие результаты опроса доступны тут.

Нашли ошибку на сайте? Выделите текст и нажмите Shift+Enter

Код для блога бета

Выделите HTML-код в поле, скопируйте его в буфер и вставьте в свой блог.