Новые технологии визуализации, применяемые в LIRA-CAD-2025, позволяют получать изображение сцены с имитацией освещённости по Фонгу и моделировать падающие тени.

«Свет! Камера! Мотор!» - такие команды привычно звучат на съёмочной площадке. Для получения изображения сцены в компьютерной графике аналогично необходимо настроить освещение, расположить камеру и затем выполнить рендеринг.

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

Чтобы определить такие места, программа «смотрит» на сцену с позиции источника и выстраивает картину, что видно, а что нет. Такая картина называется «маска тени» (см. Рис. 1). Маска тени растровая. Разрешение растра ограничено, поэтому при охвате значительных пространств заметны «зубчики» на краях тени.

Рис. 1. Маска тени.

Рис. 1. Маска тени.

Камера в пространстве сцены привязывается двумя точками: собственно позиция камеры и опорная точка вида. Позиция камеры – откуда мы смотрим на сцену. Опорная точка – определяет направление нашего взгляда. Её проекция попадает в самый центр графического окна на экране.

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

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

Маска тени даёт ответ на вопрос о наличии освещения в формате «Да/Нет». Использование этого результата напрямую делает тени очень резкими, с совершенно чёткими геометрическими границами. Чтобы смягчить картинку и приблизить изображение к тому, что мы привыкли видеть, нужно организовать полутени. Для этого применяются алгоритмы сглаживания и размывки (смягчения) краёв тени. Управляется в свойствах вида, принимая значения от 0 (жёсткая тень) до 3 (максимальная размывка). В режиме 3 можно также управлять радиусом размывки. Для всех режимов доступен коэффициент «Плотность тени», чтобы ограничивать величину затенения.

В свойствах вида есть опция «Свет прикреплён к камере». Если включить эту опцию, то каждое перемещение камеры приводит к одновременному перемещению источника света. Если бы позиция источника совпадала с позицией камеры, то теней не было бы видно, поскольку неосвещённые участки были бы также и невидимыми (скрытыми).

Чтобы «проявить» тени, мы можем задать смещение источника света относительно камеры. Как бы прикрепить фонарь к камере на выносном кронштейне. Параметры этого смещения задаются в системе координат, связанной с камерой. Это т.н. видовая система координат – правая тройка взаимноортогональных векторов: Х направлен влево, У – вверх, Z – вперёд.

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

Существует возможность открепить свет от камеры. Тогда позицию светильника можно задать в мировых координатах сцены непосредственно. Однако, нужно помнить, что направление света всё равно изменяется динамически и определяется положением опорной точки вида. Будто осветитель с прожектором следит за главным героем, на которого всё время направлена камера. Смысл тот же: светить туда, куда смотрим, а не туда, где уронили фонарь.

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

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

Мы считаем, что там, где тень, бликов нет. В освещённых местах интенсивность блика зависит от направления камеры, направления на источник света и направления вектора нормали к поверхности. Принимается во внимание заданная в свойствах материала интенсивность зеркальной составляющей и «степень блеска» (если степень меньше 2.1, то материал не блестит).

Рис. 2. Изображение с падающими тенями.

Рис. 2. Изображение с падающими тенями.

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

В отдельной теме также обсуждается т.н. «рассеянное затенение», для расчёта и моделирования которого не нужно задавать позицию или направление источника света.

Заметили ошибку? Выделите ее и нажмите Ctrl+Enter, чтобы сообщить нам.

  • 100
Поделиться публикацией:

Олег Палиенко

Ведущий инженер-программист компании «ЛИРА САПР».
Разработка программных комплексов

Другие публикации этого автора


Комментарии

Написать