Одной из задач компьютерной графики является формирование выразительных изображений объектов виртуального мира на экранах ваших видеомониторов. Так уж повелось, что любые сколь бы то ни было криволинейные поверхности на финальных этапах визуализации вынуждены стать плоскими треугольниками. Подобно тому, как в МКЭ, какими бы ни были контуры плит, на расчёт они всё равно пойдут в виде множества треугольных или четырёхугольных конечных элементов.
И даже, если мы включим «заливку» полигонов цветом, всё равно будут заметны плоские грани, аппроксимирующие желаемую криволинейную форму (см. рис.2).
Проявить форму нам всегда помогает освещение. Из школьного курса физики мы знаем, что освещённость поверхности определяется углом падения на неё лучей от источника света. Освещённость в каждой точке поверхности прямо пропорциональна косинусу угла между направлением на источник света из этой точки и нормалью к поверхности в этой точке. Поэтому, если интерполировать нормаль к поверхности в каждой её точке, мы за счёт плавного изменения освещённости получаем визуальный эффект гладкости (см. рис. 3). Расчёт освещённсоти с помощью интерполяции нормалей называется алгоритмом Фонга.
Мы видим, как управление направлением нормалей заставило негладкую поверхность, состоящую из небольшого количества полигонов (граней), выглядеть как гладкая. То есть, нормали в каждой точке могут существенно повлиять на то, как будет выглядеть объект в лучах виртуального источника света. Плоские грани стали выглядеть выгнутыми.
Тогда попробуем применить некий закон для модификации вектора нормали в зависимости от положения точки на поверхности. Этот приём может заставить каждую плоскую грань выглядеть так, будто она имеет какой-то рельеф, например, волнистый (см. рис. 4).
Управлять направлением нормали в различных точках поверхности, каждый раз задавая некоторый закон, выраженный формулой – это, конечно, решение, но оно не вполне универсально: не для каждого рельефа можно придумать адекватную формулу. Особенно, если речь идёт о реальных строительных материалах или произвольных архитектурно-конструкторских элементах.
Поэтому в компьютерной графике используется подход, который получил название карты нормалей. Карта нормалей – это некое подобие текстуры. Только в текстуре тексели задают цвета фрагментов поверхностей. А в карте нормали в каждом текселе задано направление вектора нормали для фрагмента поверхности.
Возможность использования карт нормалей открылась в LIRA-CAD 2025 в связи с переходом от использования фиксированного конвейера рендеринга OpenGL 1.1 к программируемому по стандарту OpenGL 4.6. Об этом есть отдельная заметка.
Далее мы предлагаем рассмотреть небольшой пример, демонстрирующий одновременное использование текстур и карт нормалей для визуализации несложных низкополигональных моделей.
Низкополигональными называются модели, состоящие из небольшого количества полигонов (треугольников или четырёхугольников).
Высокополигональные модели – такие, которые состоят из большого количества полигонов, моделирующих различные подробности и мелкие детали.
Благодаря использованию карт нормалей низкополигональные модели могут отражать свет так, как это делают высокополигональные, а это значит, что они будут выглядеть подобно высокополигональным.
Для примера создадим небольшую сцену, в которой будут участвовать плита перекрытия, парочка стен, колонна и две балки (см. рис. 5). Не имеет значение, из какого материала. Мы будем задавать этим объектам параметр Цвет поверхности, благодаря чему можно окрасить поверхность объектов независимо от того, из какого материала они сделаны.
В качестве цвета поверхности для каждого объекта выбираем текстуру. В результате получаем текстурированную поверхность модели (рис. 6).
Далее снова открываем диалог Палитра. Указываем выбранную текстуру в списке цветоматериалов и открываем кликом правой кнопки мыши контекстное меню. Выбираем команду Импорт карты нормалей….
По этой команде открывается диалог выбора файлов, с помощью которого следует выбрать изображение, в котором закодирована карта нормалей (см. рис. 7).
Изображения с картами нормалей представляют собой обычные растровые файлы форматов BMP
, JPG
, PNG
. Однако, каждый пиксель такого изображения трактуется не как цвет RGB, а как XYZ вектора нормали в данной точке поверхности. Поэтому изображения карт нормалей выглядят как картины сюрреалистов загадочного сиренево-фиолетового цвета с красноватыми и зеленоватыми бликами.
Файлы карт нормалей можно создать самостоятельно при помощи растрового редактора, при помощи специальной бесплатной программы Materialize или подобных ей, при помощи одного из многочисленных онлайн сервисов для этих целей или выкачать из интернета, где их имеется немало всяких разных. При этом следует знать, что для различных стандартов графических интерфейсов файлы карт нормалей могут отличаться. Это связано в первую очередь с отличиями в принятых системах координат. Нам для использования в LIRA-CAD нужны карты нормалей, созданные для OpenGL, они отличаются от карт нормалей созданных для DirectX как раз направлением осей. Карты нормалей для OpenGL выглядят так, будто воображаемый рельеф, представленный на картинке, освещён зелёным фонарём сверху. Если картинка воспринимается так, будто зелёный фонарь светит снизу, то это карта другого стандарта.
Если всё сделано правильно, то получается изображение текстурированной поверхности с имитацией рельефа (эффект «бампинга») на основе карты нормалей. Настройки визуализации должны быть переключены на «новую графику» с использованием шейдеров, запрограммированных на языке GLSL. Опция Визуальные эффекты должна быть включена (Да). Разумеется, используемая платформа (видеокарта, драйвера, операционная система) должна поддерживать такие возможности.
Рекомендуется процессор Intel i7, ОС Windows 11, видеокарта на базе чипа nVidia GeForce GTX 1660 Ti.
Итак, для описания визуальных характеристик рельефной текстурированной поверхности требуется пара файлов: файл текстуры, представляющий диффузную составляющую цвета фрагмента, и файл карты нормалей, обеспечивающий моделирование освещённости фрагментов рельефной поверхности.
Иногда удобно использовать карту нормалей в том же разрешении, что и текстура. Это позволяет обеспечить точное соответствие между рельефом и цветом поверхности в каждой точке. Однако, это не обязательное требование. Текстура и карта нормалей могут быть представлены каждая в своём разрешении и своём масштабе.
Следует отметить, что поддержка моделирования рельефных текстур с привлечением карт нормалей требует дополнительных вычислительных ресурсов. Если используемая вычислительная система не обладает надлежащим запасом производительности, и, если не планируется использование преимуществ описанной здесь технологии, то можно отключить поддержку данной опции в настройках программы (см. рис. 10).
При отсутствии необходимости поддержки карт нормалей LIRA-CAD использует упрощённый комплект шейдеров, с которым можно достичь более высоких показателей производительности графической подсистемы. Прирост скорости, выраженный в fps может быть в пределах до 10%. Однако и другие эффекты, как то, рассеянное затенение и воздушная перспектива (туман) станут недоступны. Поэтому мы не рекомендуем так делать. Разве что на самых слабых или нестандартных вычислительных платформах.
Есть хорошая новость для тех, кто искал нужную карту нормалей в нужном стандарте, но нашёл только в каком-то ущербном: всё можно исправить оперативно прямо в LIRA-CAD, для чего имеются команды, позволяющие поменять местами в карте нормалей значения для Х и для У, то есть, по сути, транспонировать векторы нормалей в карте, а также команды, позволяющие изменить направление векторов раздельно по Х и по У на противоположное. Если после этой правки с ходу не заметны перемены в картинке, то нажмите известную кнопочку «Обновить модель». Результат не заставит себя долго ждать и проявится в том, что выпуклости могут стать вогнутостями и наоборот, вплоть до достижения полностью сюрреалистического эффекта в стиле «куда там Эшеру».
Доступны команды поворота текстуры и карты нормалей на 90 градусов по часовой стрелке. При повороте текстуры тексели просто поворачиваются в растре без изменения содержимого. При повороте карты нормалей выполняется соответствующий поворот векторов нормалей, соответственно меняется содержимое текселей – в них кодируется уже другое направление нормали с учётом выполняемого поворота. Иначе говоря, поворот карты нормалей на 90 градусов - это не то же самое, что транспонирование карты Х/Y.
Следует заметить, что карты нормалей могут применяться не только с текстурированными материалами, но и с простыми «чистыми» цветами.
Карты нормалей могут быть не только импортированы извне, но их также можно сгенерировать в LIRA-CAD встроенными процедурами. В контекстном меню Текстура/Генерировать карту нормалей имеется несколько команд для процедурного формирования карты нормалей.
Если для редактируемого материала уже существовала карта нормалей (была импортирована или сгенерирована ранее), то по любой из команд генерирования её содержимое замещается новыми данными. Исходное текущее разрешение сохраняется. Если же это был чистый цвет и карты нормалей ещё не было, то формируется новый растр разрешением 128х128 текселей для большинства рисунков «бампинга». Только для рисунка «Волна» новый растр формируется в разрешении 128х16 текселей.
На рис. 12 показан пример карты нормалей, полученной по 3D модели. Затем эта карта была применена к поверхности плиты, без текстуры, с простым чистым цветом.
Карту нормалей можно экспортировать в файл формата PNG
для редактирования в растровых редакторах, передачи в другие проекты или использования в иных целях.
На рис. 13 приведены примеры других карт нормалей, сгенерированных процедурно: выпуклости слева, пирамидки – справа.
Эти примеры наглядно показывают, каким образом можно заставить низкополигональную модель отражать свет (а значит, по сути, выглядеть), как высокополигональная.
Набор процедурно генерируемых карт невелик зато очень прост в использовании. Он может хорошо послужить как для самых базовых этапов освоения технологии, так и для решения многих часто встречающихся задач, как то: прямоугольные плитки, волнистые материалы.
Практически неограниченный спектр возможностей предоставляет генерирование карты нормалей по трёхмерной модели. В качестве примера рассмотрим здесь пошагово процесс создания карты нормалей для моделирования арматуры периодического профиля.
Вначале создадим новый проект, в котором на первом этаже вблизи начала координат построим пространственную модель, представляющую развёртку поверхности арматурного стержня периодического профиля. Достаточно сделать модель одного периода. На рис. 14 показана такая модель. В качестве подложки служит плита. Балки имитируют насечку. Следует иметь в виду, что программа определит габарит сцены в плане и сформирует карту нормалей по всему габариту. По умолчанию разрешение карты нормалей составляет 128х128 текселей. Это значит, что габарит модели будет разделён на 128 частей по Х и на столько же по Y. Получится 16 384 прямоугольничка, в центре каждого будет осуществлена «проба» по модели и определена нормаль к поверхности в этом месте. Для этого используется модель, представленная в текущем этаже. Модель как бы «прокалывается» вертикальным лучом и берётся самая верхняя попавшаяся под луч поверхность. Её нормаль в точке «пробы» запоминается в карте.
Теперь создадим простой визуальный материал. Для этого на вкладке ленты Сервис используем команду Палитра. Здесь создаём новый цвет либо с нуля, либо путём дублирования любого имеющегося в палитре простого чистого цвета. Дадим ему название. Затем правой кнопкой мыши раскрываем контекстное меню. Находим команду Текстура / Генерировать карту нормалей / По модели. В зависимости от разрешения карты и от сложности модели этот процесс может занять некоторое время. По завершении мы увидим в окне предварительного просмотра образец цветоматериала уже с выпуклостями, соответствующими форме 3D модели на текущем этаже проекта.
Разрешение карты 128х128 является базовым, используемым по умолчанию. Если предварительно загрузить в качестве карты нормалей какое-либо растровое изображение (по команде Импорт карты нормалей…), то его разрешение (большее или меньшее) установится для данного цветоматериала и не будет затем изменено при процедурной генерации новой карты по модели.
Используя команду Экспорт карты нормалей…, можно сохранить полученную карту нормалей в её текущем состоянии в файл в формате PNG. Зачастую бывает полезно выполнить сглаживание карты нормалей. Для этого не обязательно привлекать внешний растровый редактор. Команда Сгладить карту нормалей представлена в контекстном меню. Она доступна, если имеется карта нормалей.
Для получения нужной картины в данном случае (см. рис. 16) мы воспользовались также командой Повернуть карту нормалей на 90 градусов.
После задания карте нужных размеров можно применить этот цветоматериал в качестве цвета поверхности объектов сцены. Процесс редактирования сцены может быть продолжен. Чтобы увидеть эффект, нужно заново сгенерировать карту нормалей по текущему состоянию модели и затем регенерировать изображение сцены.
Набор инструментов, ассоциируемых с картами нормалей, и множество настраиваемых для них параметров предоставляют широкий простор для экспериментов.
Творческих успехов, коллеги!
Заметили ошибку? Выделите ее и нажмите Ctrl+Enter, чтобы сообщить нам.
Комментарии