Версия LIRA-CAD 2025 базируется на обновлённом графическом движке, позволяющем использовать возможности оборудования как по стандарту OpenGL 1.1, так и по стандарту OpenGL 4.6. В том числе, с использованием языка программирования шейдеров GLSL 4.6.

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

Эффект рассеянного затенения

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

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

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

Рис. 1. Эффект рассеянного затенения

Рис. 1. Эффект рассеянного затенения

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

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

Рис. 2. Дополнительно используются падающие тени

Рис. 2. Дополнительно используются падающие тени

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

Мягкость теней – параметр может принимать значения от 0 до 3.

  • Значение 0 – тень с геометрически правильными совершенно жёсткими краями. Поскольку алгоритм построения тени опирается на растровые возможности устройства возможна характерная «ступенчатость» края тени.
  • 1 – минимальное сглаживание тени. Края геометрически правильные, выполняется постобработка для уменьшения эффекта ступенчатости.
  • 2 – то же, что и 1, но более глубокий уровень постобработки, что придаёт краю тени заметное «смягчение».
  • 3 – размытие края тени с использованием стохастических методов. Тень утрачивает свою «геометричность», приоретая некоторую «художественность».

Глубина обработки и соответственно проявление эффекта полутени может регулироваться дополнительно появляющимся параметром Радиус полутени. Радиус полутени определяет область, в пределах которой затрагиваются тексели теневой маски для выполнения стохастического сглаживания. Значения от 7 до 15 текселей обычно работают хорошо. Меньше 7 обычно не имеет смысла. Больше 21 – только для получения особых художественных эффектов.

Параметр «мягкости» влияет как на падающие тени, так и на тени от рассеянного затенения.

Плотность тени – параметр, значение которого показывает, насколько тёмной должна быть тень. Рабочий диапазон обычно от 0.2 до 0.7. Допустимы значения и более 1.0 для специальных эффектов «чёрной» тени. Отрицательные значения обеспечивают «обратную» тень, то есть подстветку там, где обычно была бы тень.

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

Радиус рассеянного затенения - чтобы пояснить этот параметр следует рассмотреть рис. 3.

Рис. 3. Стохастическое тестовое ядро

Рис. 3. Стохастическое тестовое ядро

На рис. 3. изображено стохастическое тестовое ядро единичного радиуса. Данный параметр уменьшает или увеличивает радиус тестового ядра. В зависимости от масштабности изображаемой сцены и размеров типичных представленных на ней элементов может возникнуть желание поуправлять радиусом. Обычные значения лежат в диапазоне от 0.2 до 1.5. Условно можно считать, что речь о метрах, хотя это не совсем так, особенно, для центральной проекции, поскольку ядро работает в координатах однородного пространства, используемых для перспективных преобразований.

Идеально для расчёта рассеянного затенения в каждом пикселе изображения было бы направить из соответствующей ему точки поверхности объекта лучи во все стороны и проверить, какие из них пересекутся с другими объектами (затенятся), а какие достигнут небосвода, а значит, внесут свой вклад в освещение. Но при таком подходе рендеринг происходил бы чрезвычайно медленно. Поэтому мы ограничились несколькими тестовыми направлениями, выбираемыми случайно. Пример такой «розы лучей» как раз и показан на рис. 3. Результат теста затем количественно оценивается и сравнивается с заданным значением параметра Порог рассеянного затенения. Для него значение 0.5 является физически обоснованным. Оно означает, что половина тестов, случано направленных из точки на некоторой поверхности, должна оказаться внутри тела, то есть, быть затенённой, а вторая половина оказаться освещённой. Если задать значение меньше 0.5, эффект затенения будет выражен гипертрофировано. Если больше 0.5, то, наоборот, станет менее заметным.

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

Рис. 4. Настройки программы. Визуализация

Рис. 4. Настройки программы. Визуализация

Критически важные параметры:

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

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

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

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

Отказ от визуальных эффектов на хороших графических платформах путём отключения этой опции может дать незначительный (менее 10%) прирост производительности в замерах по fps. Мы не рекомендуем так делать, хотя и не запрещаем.

SSAO-технологию применять – Screen Space Ambient Occlusion – рассеянное затенение в экранном пространстве – технология, основанная на алгоритме, позволяющем получать эффект рассеянного затенения эффективным хотя и приближённым методом, обеспечивая хорошие результаты при минимальных затратах производительности. Если опцию отключить, эффект рассеянного затенения станет недоступным. Разумеется, эта опция доступна только при доступных визуальных эффектах, шейдерах, новом стандарте графики и аппаратном ускорении.


Теперь о самих шейдерах. Шейдеры – это программы на языке GLSL. Они поставляются вместе с приложением в комплекте поставки в виде исходных текстов. Их можно найти в каталоге, путь к которому задаётся в настройках программы (см. Рис. 5).

Рис. 5. Настройки программы. Размещение данных

Рис. 5. Настройки программы. Размещение данных

В каталоге Initial имеется подкаталог Shaders. Там и располагаются шейдерные программы (см. рис. 6).

Рис. 6. Шейдерные программы в каталоге Initial/Shaders

Рис. 6. Шейдерные программы в каталоге Initial/Shaders

Программируемый конвейер рендеринга (pipe) состоит из двух шейдеров: вершинного (расширение файла *.vert) и фрагментного (расширение *.frag).

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

Какие шейдерные программы будут загружены и исполнены, зависит от выбранных опций визуализации в настройках приложения. Для визуализации всегда требуется шейдер полигонов – имена файлов начинаются с Spf_01, и шейдер линий – имена файлов Spf_line.

К именам файлов могут быть добавлены суффиксы _bb или _mc.

Значения суффиксов:

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

_mc – ещё более урезанный вариант шейдерных программ, который не работает с текстурами и не обеспечивает сглаживание краёв теней. Этот набор загружается, если опция Поддержка Open GL 4.6 установлена в значение Нет. Предназначена для работы на очень устаревших или проблемных платформах.

Без суффикса – файлы шейдерных программ с полным набором функций, обеспечивающих все доступные визуальные эффекты. Загружается, если выбраны опции Поддержка Open GL 4.6 - Да и Визуальные эффекты - Да. В этом случае, кроме упомянутых шейдерных программ Spf_01 и Spf_line, загружаются также все программы с именами, начинающимися на ssao_. Они обеспечивают эффект рассеянного затенения.

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

Для примера рассмотрим файл ssao_main.frag, который содержит фрагментный шейдер для расчёта рассеянной освещённости (см. рис. 7).

Рис. 7. Исходный текст фрагментного шейдера расчёта рассеянной освещённости

Рис. 7. Исходный текст фрагментного шейдера расчёта рассеянной освещённости

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

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

Рис. 8. Результат правки фрагментного шейдера ssao_main.frag

Рис. 8. Результат правки фрагментного шейдера ssao_main.frag

На рис. 8 показана картинка, полученная в результате описанной выше правки упомянутого фрагментного шейдера. Следует отметить также и справедливость приведенного выше прогноза производительности. На рис. 9 слева приведен результат работы модифицированного шейдера, справа – оригинального.

Рис. 9. Чем сложнее шейдер, тем ниже производительность конвейера

Рис. 9. Чем сложнее шейдер, тем ниже производительность конвейера

Также нужно знать, что, если в коде шейдера допустить синтаксические ошибки, то он не будет откомпилирован, о чём драйвер сообщит приложению, и оно автоматически отключит использование шейдеров.

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

Авторский коллектив искренне желает Вам успехов в работе и творчестве.

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

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

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

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

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


Комментарии

Написать