Открыть сервис

Карта нормалей

Карта нормалей (англ. normal map) — это растровое изображение, используемое в трёхмерной компьютерной графике для имитации рельефа поверхности без изменения её геометрии. Каждый пиксель карты нормалей хранит информацию о направлении нормали (вектора, перпендикулярного поверхности) в данной точке, что позволяет при расчёте освещения создавать иллюзию объёмных деталей — выступов, впадин, царапин, текстур — на плоской или низкополигональной модели. Технология является разновидностью бамп-маппинга (bump mapping) и широко применяется в игровой индустрии, кинематографе и архитектурной визуализации для повышения реалистичности сцен при сохранении низкой вычислительной сложности.

История

Первые методы имитации рельефа на трёхмерных поверхностях появились в конце 1970-х годов. В 1978 году Джеймс Блинн (James Blinn) предложил технику бамп-маппинга, при которой для создания неровностей использовалась карта высот (height map) — полутоновое изображение, где яркость пикселя соответствовала высоте точки над плоскостью. Однако этот метод имел ограничения: он не учитывал изменения направления нормали, что приводило к артефактам при сильных углах наклона поверхности.

В 1996 году инженеры компании NVIDIA и исследователи из Microsoft Research независимо друг от друга разработали концепцию карт нормалей. В отличие от карт высот, карты нормалей хранят не высоту, а непосредственно вектор нормали, закодированный в RGB-каналах. Первое массовое применение технология получила в игре «Quake III Arena» (1999), где использовалась для создания детализированных поверхностей на моделях персонажей и оружия. С развитием аппаратного обеспечения и появлением шейдеров (Shader Model 2.0) в начале 2000-х годов карты нормалей стали стандартным инструментом в игровых движках (Unreal Engine, Unity, Source).

Принцип работы

Нормаль и её представление

Нормаль — это единичный вектор, перпендикулярный поверхности в данной точке. В трёхмерной графике нормали используются для расчёта освещения по моделям Фонга или Блинна-Фонга. Карта нормалей заменяет геометрическую нормаль на «возмущённую», полученную из текстуры. Вектор нормали кодируется тремя компонентами (X, Y, Z), которые отображаются в RGB-каналы изображения:

  • Красный канал (R) — компонента X (отклонение по горизонтали).
  • Зелёный канал (G) — компонента Y (отклонение по вертикали).
  • Синий канал (B) — компонента Z (отклонение по глубине, перпендикулярно поверхности).

Для большинства карт нормалей вектор направлен вверх (в сторону наблюдателя), поэтому синий канал имеет значение около 128 (в 8-битном представлении) или 0,5 (в нормализованном виде). Отклонения в красном и зелёном каналах создают иллюзию наклона поверхности.

Тангенциальное пространство

Большинство карт нормалей хранятся в тангенциальном пространстве (tangent space), которое привязано к поверхности модели. В этом пространстве ось Z всегда направлена по нормали к поверхности, а оси X и Y лежат в касательной плоскости. Это позволяет накладывать карту нормалей на объекты любой формы — сфера, куб или сложная скульптура — без искажений, так как текстура «следует» за изгибами геометрии. Альтернативный вариант — карты нормалей в объектном пространстве (object space), которые хранят нормали в глобальных координатах модели; они менее универсальны и используются реже, в основном для статичных объектов.

Создание карт нормалей

Из высокополигональных моделей

Наиболее распространённый способ — «запекание» (baking) карты нормалей с высокополигональной (high-poly) модели на низкополигональную (low-poly). Процесс выполняется в специализированном ПО (Blender, 3ds Max, Maya, Substance Painter, xNormal):

  1. Создаётся высокодетализированная модель с миллионами полигонов.
  2. Создаётся низкополигональная копия с минимальным количеством граней.
  3. Низкополигональная модель развёртывается (UV-unwrapping) для наложения текстуры.
  4. С помощью «лучей» (ray casting) для каждого пикселя текстуры вычисляется нормаль высокополигональной модели, и результат записывается в изображение.

Из текстур (фотографий)

Карты нормалей могут быть сгенерированы из обычных фотографий или изображений с помощью алгоритмов анализа высот (например, фильтр «Normal Map» в Photoshop или инструменты в Substance Designer). Для этого исходное изображение преобразуется в карту высот, а затем — в карту нормалей через вычисление градиентов. Также существуют нейросетевые методы (например, в NVIDIA Canvas), которые создают карты нормалей из одного изображения.

Процедурная генерация

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

Применение

Игровая индустрия

Карты нормалей являются ключевым элементом современной игровой графики. Они позволяют создавать детализированные поверхности (кирпичную кладку, кожу, ткань, металл) на моделях с низким полигонажем, что критически важно для производительности на консолях и ПК. Примеры игр, активно использующих технологию: «Half-Life 2» (2004), «Crysis» (2007), «The Witcher 3» (2015), «Cyberpunk 2077» (2020). В мобильных играх (например, «Genshin Impact») карты нормалей применяются в урезанном виде из-за ограничений мобильных GPU.

Кинематограф и VFX

В киноиндустрии карты нормалей используются для создания реалистичных материалов в компьютерной графике (CGI). Например, в фильмах «Аватар» (2009) и «Гравитация» (2013) карты нормалей применялись для имитации текстур скафандров, кожи персонажей и поверхностей космических кораблей. В отличие от игр, в кино часто используются карты нормалей с разрешением 4K и 8K, а также комбинируются с картами смещения (displacement maps) для полного геометрического эффекта.

Архитектурная визуализация

В программах для архитектурного проектирования (Autodesk Revit, Lumion, Twinmotion) карты нормалей накладываются на стены, полы и потолки для имитации штукатурки, кирпича, дерева или камня. Это позволяет создавать фотореалистичные рендеры без увеличения числа полигонов.

Ограничения и недостатки

  1. Артефакты на краях объектов. Карты нормалей в тангенциальном пространстве могут давать искажения на острых углах и в местах резких перепадов геометрии. Для устранения требуется правильная развёртка UV и сглаживание нормалей.
  2. Отсутствие параллакса. Карты нормалей не изменяют фактическую геометрию, поэтому при сильном наклоне поверхности (например, при взгляде сбоку) иллюзия объёма разрушается. Для решения этой проблемы используются карты параллакса (parallax mapping) или карты смещения.
  3. Зависимость от разрешения. При низком разрешении текстуры (менее 512×512) детали становятся размытыми, а при слишком высоком — увеличивается объём видеопамяти.
  4. Сложность создания. Ручное создание качественных карт нормалей требует навыков работы с 3D-редакторами и понимания топологии модели.

Разновидности

  • Карты нормалей в тангенциальном пространстве (tangent-space normal maps) — наиболее распространённый тип, используется в большинстве игр и движков.
  • Карты нормалей в объектном пространстве (object-space normal maps) — применяются для статичных объектов, где не требуется вращение текстуры.
  • Карты нормалей с прямым отображением (directX normal maps)стандарт для DirectX, где зелёный канал инвертирован (Y-ось направлена вниз). В OpenGL используется другая кодировка (Y-ось вверх).
  • Карты нормалей для сферических карт (sphere maps) — устаревший формат, использовался в ранних 3D-движках.

Интересные факты

  • Первая игра, полностью использующая карты нормалей для всех объектов, — «Doom 3» (2004) от id Software. Технология позволила создать реалистичное освещение в тёмных коридорах.
  • В современных игровых движках (Unreal Engine 5) карты нормалей комбинируются с технологией Nanite, которая позволяет использовать миллиарды полигонов в реальном времени, однако карты нормалей всё ещё применяются для текстур материалов.
  • Карты нормалей могут быть созданы из фотографий реальных объектов с помощью фотограмметрии — например, в программе RealityCapture.

Источники

  • Блинн, Дж. (1978). «Simulation of Wrinkled Surfaces» (Computer Graphics, SIGGRAPH).
  • NVIDIA Developer Documentation. «Normal Mapping» (2004).
  • Льюис, Р. (2010). «The Art of 3D Computer Animation and Effects».
  • Документация Blender 4.0. «Normal Maps» (2023).
  • Unreal Engine 5 Documentation. «Texture: Normal Map» (2024).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →