← NACK3D
RU EN
GUIDES
Гайд · PBR workflow · 7 минут чтения

Как сделать normal map из фото: 4 рабочих способа

Normal map — текстура, которая кодирует рельеф поверхности в цвете пикселей: плоская геометрия начинает выглядеть детальной без лишних полигонов. Ниже — четыре способа получить её из обычной фотографии: от классических плагинов до сканирования на Android.

Пример normal map, сгенерированной из фотографии
Normal map: фиолетовый фон = плоскость, отклонения цвета = рельеф

Способ 1. Photoshop + плагин NVIDIA Texture Tools

  1. Открой фото: File → Open.
  2. Обесцветь: Image → Adjustments → Desaturate (Ctrl+Shift+U). Яркость станет «высотой»: светлее = выше.
  3. Усиль контраст: Image → Adjustments → Levels (Ctrl+L), чтобы рельеф читался чётче.
  4. Поставь бесплатный плагин NVIDIA Texture Tools Exporter.
  5. Filter → NVIDIA Texture Tools → Normal Map, подбери силу рельефа.
  6. Сохрани в PNG.
Ограничение: высота берётся из яркости. На текстурах с рисунком (дерево с годовыми кольцами, ткань с принтом) принт попадёт в рельеф как артефакт.

Способ 2. GIMP + плагин NormalMap (бесплатно)

  1. Установи GIMP и плагин NormalMap (Windows / Linux / macOS).
  2. Colors → Desaturate.
  3. Filters → Map → Normalmap.
  4. Подбери параметры (strength, wrap, height source) → OK.
  5. File → Export As… → PNG.
Плюс тот же минус: рельеф «угадывается» из яркости, а не измеряется.

Способ 3. Онлайн-генераторы normal map

Сервисы вроде NormalMap-Online: загрузил фото → подкрутил ползунки → скачал PNG. Ничего ставить не нужно, но есть три «но»: фото уходит на чужой сервер (приватность), выход 8-бит, других карт (albedo, roughness, height) генератор не даёт.

Способ 4. Фотометрическое стерео на Android (реальный рельеф)

Первые три способа предполагают рельеф по яркости. Четвёртый — измеряет его: метод Shape-from-Shading снимает серию кадров с разным освещением (вспышка + экран) и вычисляет, как поверхность отражает свет под разными углами. Так получается настоящая карта микрорельефа, а не её имитация.

В NACK3D это выглядит так:

  1. Открой приложение и наведи камеру на поверхность.
  2. Нажми CAPTURE — смартфон сам снимет серию с разным светом.
  3. Через ~7 секунд получишь 16-bit Normal и Height плюс Albedo, Roughness, AO и Specular — всё обработано на устройстве, без облака.
  4. Экспортируй в Unity, Unreal или отдельными файлами.
До и после: фото поверхности и восстановленный рельеф
Слева — исходное фото, справа — тот же участок с восстановленным рельефом

Сравнение способов

СпособЦенаИсточник рельефаБитностьДругие картыПриватность
Photoshop + плагинподписка Adobeяркость8нетлокально
GIMP + NormalMapбесплатнояркость8нетлокально
Онлайн-генераторбесплатнояркость8нетфото на сервере
NACK3D (SfS)7 дней бесплатносвет (фотометрическое стерео)до 166 картлокально, офлайн

Частые вопросы

Почему normal map фиолетовая?

Каналы RGB кодируют отклонение нормали по осям XYZ. Плоский участок — это вектор (0, 0, 1), который в цвете даёт (128, 128, 255) — тот самый сиренево-голубой оттенок. Отклонения рельефа сдвигают цвет в красную и зелёную стороны.

OpenGL или DirectX: какая разница?

В OpenGL зелёный канал направлен вверх (Y+), в DirectX — вниз (Y−). Неправильный выбор «выворачивает» рельеф наизнанку. В Unity используется OpenGL, в Unreal — DirectX; в NACK3D есть переключатель Flip Y и готовые паки под каждый движок.

Какая битность нужна?

Для игровых материалов на средних дистанциях хватает 8 бит. Для крупных планов, displacement и кино берите 16 бит — иначе на плавных склонах появятся «ступеньки» бандинга.

Можно ли сделать normal map из одного фото?

Способы 1–3 работают с одним файлом, но рельеф будет условным. Фотометрическое стерео требует серию кадров с разным светом — смартфон снимает её сам за секунду, поэтому результат ближе к реальному сканированию.

Попробуй способ 4 на практике

NACK3D — сканер текстур для Android: normal, depth и полный PBR-набор из одного снимка, обработка на устройстве. Первые 7 дней бесплатно.

Скачать в Google Play ↗