Глобальное освещение
Однако алгоритмы локального освещения не позволяют получать корректные итоговые изображения, т. к. не учитывают более сложные взаимодействия поверхностей и освещения сцены. Вот только некоторые из них:
поверхности могут блокировать часть падающего на них света и отбрасывать тени на другие поверхности;
в блестящих поверхностях могут присутствовать отражения других объектов;
на поверхностях могут возникать рефлексы;
прозрачные поверхности позволяют видеть объекты, находящиеся за ними.
Алгоритмы просчета глобального освещения при визуализации корректно учитывают прохождение света между поверхностями, что решает поставленные проблемы. Чаще всего используются два таких алгоритма:
трассирование лучей (ray tracing);
излучательность (radiosity).
Алгоритм трассирования лучей отслеживает в обратном направлении (backward) прохождение лучей света от глаза наблюдателя через каждый пиксел итогового изображения к поверхностям визуализируемых объектов. В случае пересечения трассируемого луча с поверхностью происходит одна из следующих ситуаций.
Если поверхность не зеркальная и не прозрачная, за ней образуется тень. Цвет самой поверхности в точке пересечения вычисляется с учетом характеристик источников освещения.
Для зеркальных поверхностей делается оценка дальнейшего прохождения отраженного света (reflected light).
Для прозрачных — пропущенного света (transmitted light).
В последних двух случаях оценка дальнейшего прохождения луча повторяется при последующих пересечениях с поверхностями, но не более определенного количества раз (итераций).
Алгоритм обратного трассирования лучей является очень мощным и гибким. Он позволяет аккуратно просчитывать такие характеристики глобального освещения, как тени, зеркальные отражения, преломления света в прозрачных материалах.
Однако он имеет два существенных недостатка:
высокая сложность и, как следствие, малая скорость вычислений;
подмена просчитанного непрямого освещения (indirect lighting) на "абстрактный" окружающий свет (ambient light), что приводит, например, к отсутствию рефлексов на поверхностях.
Алгоритм просчета излучательности фундаментально отличается от алгоритма трассирования лучей. Вместо вычисления цвета каждого пиксела итогового изображения этот алгоритм просчитывает интенсивность каждой точки пространства сцены. Поверхности всех объектов разбиваются на элементы (небольшие по площади) и для каждого из них вычисляется, сколько света он излучает на остальные элементы. Этот алгоритм, изобретенный в 1960-х годах, был значительно модернизирован в 1988 году и получил название алгоритма излучательности с последовательной детализацией (progressive refinement radiosity). Это новшество означает, что мы сможем наблюдать за улучшением качества и детализации изображения при прогрессивном разбиении поверхностей на более мелкие элементы.
Полученное таким образом изображение сцены является корректным с точки зрения отражений света между поверхностями (diffuse interreflections), но имеет и свои неустранимые недостатки:
большие затраты памяти при вычислениях;
отсутствие в полученном изображении отражений и преломлений света в прозрачных поверхностях.
Так как ни один из вышеизложенных алгоритмов не может полностью решить проблему корректного вычисления глобального освещения, в профессиональных пакетах 3D-визуализации они используются совместно. Примером удачного сочетания этих алгоритмов для финальной визуализации может служить уже упоминавшаяся программа Lightscape.
Резюме
В силу специфики 3D-моделирования и возможности работать с анимацией (отображения изображений во временном развитии) такие программы занимают особое место в линейке графических программ.
Пакеты трехмерной графики предъявляют повышенные требования как к аппаратно-программным средствам используемого компьютера, так и к уровню знаний работающего с ними дизайнера.
Идея векторной графики состоит в описании линейных фрагментов с помошью единственной формулы.
При этом разбиение произвольных кривых на отдельные фрагменты (сегменты) разумно выполнять, учитывая следующие исходные условия: фрагменты должны быть достаточно короткими, а формула должна обеспечивать достаточно близкую аппроксимацию кривых.
Линейная зависимость обладает важным достоинством — простотой, но при этом не лишена серьезных недостатков (объекты, составленные только из прямолинейных сегментов, лишаются возможности произвольного масштабирования, для достоверной аппроксимации формы объекта потребуются десятки тысяч линейных сегментов).
Поэтому неизбежной заменой прямолинейных сегментов могут быть только кривые, которые способны обеспечить требуемую гладкость (речь идет о кривых Безье и NURBS-кривых).
Если обращаться к уравнениям со степенью выше первой, следует признать, что явный способ представления не может применяться там, где требуется описание произвольных кривых, размещаемых в произвольных местах на плоскости.
Альтернативным способом описания кривой является определение кривой как параметрической сплайновой функции.
Одной из основополагающих особенностей NURBS-кривой является то, что ее форма определяется расположением множества контрольных точек (control points). Она позволяет локализовать изменение формы кривой перемещением отдельных контрольных точек без изменения формы всей кривой в целом.
Рациональные кривые обладают двумя дополнительными свойствами (они обеспечивают корректный результат при проекционных трансформациях (например, масштабировании), их можно использовать для моделирования кривых любого вида, включая конические сечения).
При всех своих выдающихся свойствах NURBS-кривые все же обладают существенным недостатком: расширенные возможности не могли не сказаться на сложности и на уровне инструментария для их построения, а это, в свою очередь, требует от дизайнера повышенных условий для его освоения, не говоря уже о необходимости определенного уровня математической подготовки.
Кривые Безье получили широкое распространение, т. к. обладают следующими важными свойствами (начальная и конечная контрольные точки лежат на кривой, кривая на всем протяжении непрерывна, у нее отсутствуют разрывы, касательные к кривой в начальной и конечной контрольных точках являются отрезками, соединяющими их с двумя другими соседними контрольными точками).
Для построения кривой Безье требуются четыре контрольных точки, хотя кривая физически проходит только через две из них (опорные точки). Две точки остаются в стороне (управляющие точки).
Соединительные точки между сегментами бывают нескольких типов, что позволяет обеспечивать различные формы соединения (гладкую, тангенциальную или на изгиб).
Язык описания страницы PostScript, созданный как язык управления графическими устройствами, решает задачи по передаче информации между прикладными программами (графическими редакторами, программами верстки) и устройствами визуализации (лазерными принтерами, фотонаборными автоматами и цифровыми офсетными машинами).
Последующее развитие языка PostScript не изменило своей основы и продолжает идти по пути интегрирования новых возможностей выводных устройств (цветная печать, системы управления цветом и т. д.).
Каждая векторная программа обладает собственным графическим форматом, между этими форматами нет однозначного соответствия, поэтому конвертирование одного формата в другой сопряжено с многочисленными погрешностями, особенно в последнее время, когда векторные программы насыщены разнообразными эффектами.
В силу специфики 3D-моделирования и возможности работать с анимацией (отображения изображений во временном развитии) такие программы занимают особое место в линейке графических программ.
Пакеты трехмерной графики предъявляют повышенные требования как к аппаратно-программным средствам используемого компьютера, так и к уровню знаний работающего с ними дизайнера.
Часть III была посвящена исключительно пиксельной графике, а часть IV— исключительно векторной графике, которая при всей своей сложности обладает массой достоинств, хотя она и не лишена недостатков. О достоинствах и недостатках пиксельной и векторной графики, а также об их взаимных преобразованиях повествует следующая часть.
Содержание раздела