Свет

В прошлом посте речь шла о материалах и их свойствах – ambient, diffuse и specular. Как оказалось, теми же самыми свойствами обладает и свет. Этот факт сводится к тому, что у света также имеется три составляющих. Diffuse-цвет света, взаимодействуя с diffuse-цветом материала, определяет свойства рассеивания света по данному материалу. Specular-цвет света, взаимодействуя со specular-цветом материала, определяет вид блика, или светового пятна. Есть еще ambient-цвет света – но это отдельная песня, в которой поется об общем цвете сцены. Например, закат часто красит все вокруг в багровые тона – это потому, что у закатного солнца багровый ambient.

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

Говоря о том, что что-то там с чем-то взаимодействует, я имею в виду вот что. Разные материалы при освещении одним и тем же светом ведут себя совершенно по-разному. Например, светлая сосна, если светить на нее, будет освещаться в целом равномерно, а, скажем, темный орех будет иметь характерное круглое световое пятно. Это говорит о том, что материалы по-разному реагируют на свет. Можно рассматривать аддитивную модель взаимодействия, когда, например, diffuse-цвет света складывается с diffuse-цветом материала, что дает результирующий цвет в освещенной точке. Из имеющих названия бывает еще модулятивная модель. А вообще говоря, модель взаимодействия компонент материала с компонентами света называется blending, и их бывает много разных типов.

В нашем проекте мы, разумеется, не обращаемся напрямую к OpenGL API, а используем opensource-3D-движок OGRE (http://www.ogre3d.org/). Когда он рендерит сцену, внутри него происходит деление материала на т.н. illumination passes. Грубо говоря, ему удобней просчитывать освещенность в несколько проходов: в первом (ambient pass) считаются ambient-компоненты материалов, полученные в результате освещения источниками света, находящимися в сцене; во втором (per-light pass) – diffuse и specular-компоненты; в третьем проходе (decal pass) обрабатываются текстуры. Кстати, это верно только для непрозрачных материалов; всякие там стекла на проходы не делятся, да и рендерятся они совсем по-другому, поскольку необходимо рисовать на экране также то, что находится за ними.

Напоследок – несколько картинок:

Сцена после ambient-прохода

Сцена после всех проходов

Сцена после всех проходов + наложение теней



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

0 коммент. | добавить комментарий :: Свет

Отправить комментарий