3D графика: Свет и сцена. Особенности моделирования света

Содержание

Физическая модель света

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

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

Единичный Фотон

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

Объекты

При столкновении фотона с внешними объектами может произойти:

  • отражение (reflection) — фотон отскакивает от поверхности
  • поглощение (absorption) -- фотон поглощается и отдает свою энергию объекту
  • преломление (refraction) — фотон проходит сквозь объект и меняет направление движения в зависимости от свойств объекта и окружения
  • отклонение (diffraction) — фотон может отклониться и изменить направление в случае, когда он проходит на очень близком расстоянии от поверхности объекта. 

Совокупность фотонов

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

Взаимодействие светового потока с окружающими предметами (объектами) позволяет нам видеть их. Свет исходит из источника световой энергии. Триллионы фотонов вырываются и с огромной скоростью уносятся от источника, взаимодействуя с предметами, ударяя каждую мельчайшую деталь окружающей обстановки. Небольшое количество из них попадает в маленькое темное пятно в середине нашего глаза. Это зрачок. По очень веской причине, суть которой будет объяснена ниже, наш зрачок черный. Глаз устроен таким образом, что он несколько подправляет направление движения фотона перед тем, как он достигнет задней части глаза. Здесь фотон поглощается светочувствительными рецепторами. Эти рецепторы дают соответствующие сигналы нашему мозгу. Мозг интерпретирует поступившую последовательность сигналов и снабжает нас подробной информацией о нашем окружении. Изображение, которое мы видим на самом деле, не является соответствующим ему набором физических предметов. Все, что мы получаем, на самом деле лишь его энергетический отпечаток, который прошел огромное количество сложнейших преобразований в нашем мозге. Синий объект — не есть в действительности синий. Он считается синим потому, что мы интерпретируем свет, пришедший от него, как синий.

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

В этом и заключается разница между Данными (Data) и Информацией (Information). Данные — это световой образ, формирующийся на сетчатке глаза. Информация — это интерпретация этого образа нашим мозгом.

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

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

Какую информацию может извлечь мозг?

Человеческий мозг может извлечь и интерпретировать 4 информационных ресурса из потока видимых данных.

Форма

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

Оттенки

Блики и тени. Тон и структура поверхностей.

Цвет

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

Движение Мозг человека особенно восприимчив к движению объектов. Прекрасно "камуфлированное" животное мгновенно будет обнаружено, если оно пошевелится. Очень часто, если вы потеряли курсор на экране монитора, лучший способ найти его — двинуть мышкой.

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

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

Вам простили…

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

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

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

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

Свет

Свойства света

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

Закон обратной пропорциональности квадрату расстояния

Как определить яркость света?

Представьте, что у вас есть идеальный источник света. Такой источник не имеет объема и размеров, а существует в виде точки в пространстве. Его можно включить и выключить, и это переключение происходит мгновенно, без потерь времени на переходные процессы. Это как раз тот источник света, с которым возможно работать внутри виртуального мира компьютера. В реальном мире такие источники невозможны. В дальнейшем мы также увидим, что и реальные источники, в свою очередь, очень сложно создать в виртуальном мире.

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

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

Разумеется, если размер фрагмента растет, а количество фотонов остается неизменным, то плотность фотонов в нем уменьшается.

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

где:

  • Brightness — величина, определяющая яркость (интенсивность) света в точке отстоящей от источника света на расстоянии r;
  • k — некоторая константа, определяющая яркость (интенсивность) самого источника света.

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

Закон косинуса

Какова освещенность поверхности?

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

Когда поверхность целиком обращена к свету — максимальное количество света достигает ее. Вся поверхность освещена.

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

Когда вектор нормали к плоскости поверхности находится под прямым углом к падающему свету, то свет просто-напросто проходит мимо поверхности, и она совсем не освещается.

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

Illumination= cos(a) * brightness ;

где:

  • illumination — освещенность поверхности;
  • a — угол между нормалью к поверхности и направлением света;
  • brightness — яркость (интенсивность) света.

А что же дальше?

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

Поглощение

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

Отражение

Большая часть света "отскочит" от поверхности. Направление отраженного света в некоторой степени зависит от самой поверхности.

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

Если поверхность шершавая (абсолютно рассеивающая), то отраженный свет будет распространяться во многих направлениях. Здесь ни в коем случае не утверждается, что в природе существуют абсолютно рассеивающие поверхности. Грубо обработанное дерево прекрасно рассеивает свет, как и матовая краска, но оба материала все же имеют некоторый (ненулевой) блёск (shininess). Наиболее яркое отражение от этих поверхностей будет заметно под разными углами зрения.

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

Преломление

Когда свет проходит сквозь поверхность, он проходит из одной среды в другую. В момент прохода через границу сред возникающие квантовые эффекты заставляют свет изменить свое направление. Такое изменение направления движения света называется преломлением (refraction). Точное значение величины угла изменения направления зависит от взаиморасположения поверхностей сред и свойства среды под названием коэффициент преломления. Пустота (вакуум) имеет коэффициент, равный единице. У воздуха этот коэффициент чуть ниже. Более твердые материалы и среды имеют более низкие коэффициенты преломления.

Преломление — очень сложное явление, требует больших вычислительных мощностей при его моделировании. Для вывода на экран в реальном времени более подходящим является применение технологии ray tracing. Мы не будем здесь углубляться в подробности, всему свое время :)

Еще дальше…

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

Цвет

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

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

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

Трехцветная модель (RGB Model)

Человеческий глаз в состоянии регистрировать три основных цветовых полосы в диапазоне волн от 400 нм (нанометров) до 680 нм. Мы привыкли отождествлять их с названиями следующих цветов: красный (R), зеленый(G) и синий(B). (Забудьте, если вы слышали от художников, что существует три основных цвета, — красный, желтый, синий. Такой подход актуален только для красителей). Причина в наличии только трех основных цветов кроется не только в "происках" физиков, но и в химическом составе органической материи сетчатки глаза, способном реагировать только на определенные длины волн, соответствующие этим цветам. Все не основные цвета, такие, как желтый или розовый — это просто комбинации основных цветов.

Именно эти цвета используются в телевидении и выводе изображений на экран монитора. Эти три цвета дают возможность воспроизвести большинство цветов, которые вы можете видеть. Еще раз повторимся — большинство, но не все. Цвета, производимые монитором, не являются абсолютно чистыми, поэтому и все производимые ими оттенки не могут быть воспроизведены с точностью.

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

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

Обычно компьютеры оперируют со светом в виде величин, определяющих количество содержащихся в нем красного, зеленого и синего цветов. Например, белый — это равное количество всех трех, Желтый — равное количество красного и зеленого и полное отсутствие синего. Все цветовые оттенки можно визуально представить в виде куба, где по осям координат будут отложены соответствующие величины трех исходных цветов. Это и есть трехцветная световая модель (RGB Model).

Однако есть еще целый ряд цветовых моделей света, которые могут быть даже более понятны для некоторых людей. Вот, например, модель HSV (от английских: -Hue — оттенок, Saturation — насыщенность, Value — количество). Снова мы видим три значения, значит, все возможные цветовые оттенки можно опять заключить внутрь куба.

Эта модель также иногда известна как HSL, где L — luminance, слово другое, а суть та же.

Hue: Цвет, цветовой оттенок

Saturation: Цветовая насыщенность. Эквивалент соотв.органу управления на многих телевизорах и мониторах.

Value: Интенсивность. Ноль — значит черный, более высокие значения характеризуют более яркие значения.

(Хочу обратить внимание, чтобы читатель не путал цветовые модели света, описанные в статье, с моделями цветопередачи, такими, как CMYK, например. Модели цветопередачи применимы в основном для смешения красителей и сфера их применения — цветная печать и полиграфия.)

Использование света на практике

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

Допущения и упрощения

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

Точечные источники света

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

Многократные отражения

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

Тени

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

Статические (неподвижные) тени

Сцены с неподвижными источниками света и объектами имеют статические тени. Имеется возможность заранее просчитать все тени в сцене. А затем использовать эту информацию для быстрой прорисовки этих теней на экране. Хорошим примером подобного подхода являются игры типа Quake. Уровень заранее обсчитывался утилитами просчета освещения, и в реальном времени движок игры уже не тратил драгоценное процессорное время на их создание. Все тени хранились в виде "карты теней" в самом файле уровня и в процессе игры комбинировались с соответствующими текстурами.

[ Продолжение темы: Экспозиция ]



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




20 апреля 2000 Г.

3D графика: Свет и сцена. Особенности моделирования света.

3D графика: Свет и сцена. Особенности моделирования света

Содержание

Физическая модель света

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

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

Единичный Фотон

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

Объекты

При столкновении фотона с внешними объектами может произойти:

  • отражение (reflection) — фотон отскакивает от поверхности
  • поглощение (absorption) -- фотон поглощается и отдает свою энергию объекту
  • преломление (refraction) — фотон проходит сквозь объект и меняет направление движения в зависимости от свойств объекта и окружения
  • отклонение (diffraction) — фотон может отклониться и изменить направление в случае, когда он проходит на очень близком расстоянии от поверхности объекта. 

Совокупность фотонов

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

Взаимодействие светового потока с окружающими предметами (объектами) позволяет нам видеть их. Свет исходит из источника световой энергии. Триллионы фотонов вырываются и с огромной скоростью уносятся от источника, взаимодействуя с предметами, ударяя каждую мельчайшую деталь окружающей обстановки. Небольшое количество из них попадает в маленькое темное пятно в середине нашего глаза. Это зрачок. По очень веской причине, суть которой будет объяснена ниже, наш зрачок черный. Глаз устроен таким образом, что он несколько подправляет направление движения фотона перед тем, как он достигнет задней части глаза. Здесь фотон поглощается светочувствительными рецепторами. Эти рецепторы дают соответствующие сигналы нашему мозгу. Мозг интерпретирует поступившую последовательность сигналов и снабжает нас подробной информацией о нашем окружении. Изображение, которое мы видим на самом деле, не является соответствующим ему набором физических предметов. Все, что мы получаем, на самом деле лишь его энергетический отпечаток, который прошел огромное количество сложнейших преобразований в нашем мозге. Синий объект — не есть в действительности синий. Он считается синим потому, что мы интерпретируем свет, пришедший от него, как синий.

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

В этом и заключается разница между Данными (Data) и Информацией (Information). Данные — это световой образ, формирующийся на сетчатке глаза. Информация — это интерпретация этого образа нашим мозгом.

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

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

Какую информацию может извлечь мозг?

Человеческий мозг может извлечь и интерпретировать 4 информационных ресурса из потока видимых данных.

Форма

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

Оттенки

Блики и тени. Тон и структура поверхностей.

Цвет

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

Движение Мозг человека особенно восприимчив к движению объектов. Прекрасно "камуфлированное" животное мгновенно будет обнаружено, если оно пошевелится. Очень часто, если вы потеряли курсор на экране монитора, лучший способ найти его — двинуть мышкой.

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

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

Вам простили…

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

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

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

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

Свет

Свойства света

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

Закон обратной пропорциональности квадрату расстояния

Как определить яркость света?

Представьте, что у вас есть идеальный источник света. Такой источник не имеет объема и размеров, а существует в виде точки в пространстве. Его можно включить и выключить, и это переключение происходит мгновенно, без потерь времени на переходные процессы. Это как раз тот источник света, с которым возможно работать внутри виртуального мира компьютера. В реальном мире такие источники невозможны. В дальнейшем мы также увидим, что и реальные источники, в свою очередь, очень сложно создать в виртуальном мире.

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

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

Разумеется, если размер фрагмента растет, а количество фотонов остается неизменным, то плотность фотонов в нем уменьшается.

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

где:

  • Brightness — величина, определяющая яркость (интенсивность) света в точке отстоящей от источника света на расстоянии r;
  • k — некоторая константа, определяющая яркость (интенсивность) самого источника света.

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

Закон косинуса

Какова освещенность поверхности?

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

Когда поверхность целиком обращена к свету — максимальное количество света достигает ее. Вся поверхность освещена.

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

Когда вектор нормали к плоскости поверхности находится под прямым углом к падающему свету, то свет просто-напросто проходит мимо поверхности, и она совсем не освещается.

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

Illumination= cos(a) * brightness ;

где:

  • illumination — освещенность поверхности;
  • a — угол между нормалью к поверхности и направлением света;
  • brightness — яркость (интенсивность) света.

А что же дальше?

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

Поглощение

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

Отражение

Большая часть света "отскочит" от поверхности. Направление отраженного света в некоторой степени зависит от самой поверхности.

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

Если поверхность шершавая (абсолютно рассеивающая), то отраженный свет будет распространяться во многих направлениях. Здесь ни в коем случае не утверждается, что в природе существуют абсолютно рассеивающие поверхности. Грубо обработанное дерево прекрасно рассеивает свет, как и матовая краска, но оба материала все же имеют некоторый (ненулевой) блёск (shininess). Наиболее яркое отражение от этих поверхностей будет заметно под разными углами зрения.

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

Преломление

Когда свет проходит сквозь поверхность, он проходит из одной среды в другую. В момент прохода через границу сред возникающие квантовые эффекты заставляют свет изменить свое направление. Такое изменение направления движения света называется преломлением (refraction). Точное значение величины угла изменения направления зависит от взаиморасположения поверхностей сред и свойства среды под названием коэффициент преломления. Пустота (вакуум) имеет коэффициент, равный единице. У воздуха этот коэффициент чуть ниже. Более твердые материалы и среды имеют более низкие коэффициенты преломления.

Преломление — очень сложное явление, требует больших вычислительных мощностей при его моделировании. Для вывода на экран в реальном времени более подходящим является применение технологии ray tracing. Мы не будем здесь углубляться в подробности, всему свое время :)

Еще дальше…

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

Цвет

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

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

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

Трехцветная модель (RGB Model)

Человеческий глаз в состоянии регистрировать три основных цветовых полосы в диапазоне волн от 400 нм (нанометров) до 680 нм. Мы привыкли отождествлять их с названиями следующих цветов: красный (R), зеленый(G) и синий(B). (Забудьте, если вы слышали от художников, что существует три основных цвета, — красный, желтый, синий. Такой подход актуален только для красителей). Причина в наличии только трех основных цветов кроется не только в "происках" физиков, но и в химическом составе органической материи сетчатки глаза, способном реагировать только на определенные длины волн, соответствующие этим цветам. Все не основные цвета, такие, как желтый или розовый — это просто комбинации основных цветов.

Именно эти цвета используются в телевидении и выводе изображений на экран монитора. Эти три цвета дают возможность воспроизвести большинство цветов, которые вы можете видеть. Еще раз повторимся — большинство, но не все. Цвета, производимые монитором, не являются абсолютно чистыми, поэтому и все производимые ими оттенки не могут быть воспроизведены с точностью.

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

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

Обычно компьютеры оперируют со светом в виде величин, определяющих количество содержащихся в нем красного, зеленого и синего цветов. Например, белый — это равное количество всех трех, Желтый — равное количество красного и зеленого и полное отсутствие синего. Все цветовые оттенки можно визуально представить в виде куба, где по осям координат будут отложены соответствующие величины трех исходных цветов. Это и есть трехцветная световая модель (RGB Model).

Однако есть еще целый ряд цветовых моделей света, которые могут быть даже более понятны для некоторых людей. Вот, например, модель HSV (от английских: -Hue — оттенок, Saturation — насыщенность, Value — количество). Снова мы видим три значения, значит, все возможные цветовые оттенки можно опять заключить внутрь куба.

Эта модель также иногда известна как HSL, где L — luminance, слово другое, а суть та же.

Hue: Цвет, цветовой оттенок

Saturation: Цветовая насыщенность. Эквивалент соотв.органу управления на многих телевизорах и мониторах.

Value: Интенсивность. Ноль — значит черный, более высокие значения характеризуют более яркие значения.

(Хочу обратить внимание, чтобы читатель не путал цветовые модели света, описанные в статье, с моделями цветопередачи, такими, как CMYK, например. Модели цветопередачи применимы в основном для смешения красителей и сфера их применения — цветная печать и полиграфия.)

Использование света на практике

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

Допущения и упрощения

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

Точечные источники света

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

Многократные отражения

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

Тени

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

Статические (неподвижные) тени

Сцены с неподвижными источниками света и объектами имеют статические тени. Имеется возможность заранее просчитать все тени в сцене. А затем использовать эту информацию для быстрой прорисовки этих теней на экране. Хорошим примером подобного подхода являются игры типа Quake. Уровень заранее обсчитывался утилитами просчета освещения, и в реальном времени движок игры уже не тратил драгоценное процессорное время на их создание. Все тени хранились в виде "карты теней" в самом файле уровня и в процессе игры комбинировались с соответствующими текстурами.

[ Продолжение темы: Экспозиция ]



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