Нормали в Blender

Нормали — это фундаментальное понятие в 3D-графике, которое определяет, как свет взаимодействует с поверхностью объекта. Простыми словами, нормаль — это невидимый вектор (воображаемая линия), перпендикулярный поверхности грани (полигона) и указывающий направление "наружу".

Нормали в Blender

Как визуально определить подсветку границ полигонов

▌ Face Orientation

Face Orientation в Blender

Face Orientation («ориентация граней») в Blender — это инструмент, позволяющий визуально определять направление нормалей (векторов, определяющих сторону лица полигона, обращённую наружу или внутрь объекта).

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

Как включить Face Orientation?

  1. Открой окно 3D Viewport.
  2. Переключись в режим редактирования, нажав клавишу Tab или выбрав его через верхнее меню.
  3. В правой части окна, рядом с панелью инструментов, найди меню Viewport Overlays. Оно выглядит как маленький круг с крестиком внутри.
  4. Раскрой меню и выбери секцию Mesh Display.
  5. Поставь галочку напротив параметра Face Orientation.

После включения этого инструмента:

  • Границы полигонов, чьи нормали направлены наружу, подсвечиваются голубым цветом.
  • Если нормали повернуты вовнутрь, границы полигонов окрашиваются красным цветом.

Face Orientation в Blender

Это позволит сразу увидеть области, где нормали расположены неправильно, и принять меры для исправления ситуации (например, переворачивая нормали с помощью команды Alt + N > Flip).

Чтобы увидеть векторы нормали в Blender:

  1. Откройте меню Mesh Edit Mode
  2. Выберите режим отображения нормалей
  3. Установите длину вектора нормалей

Нормали в Blender

Зачем нужны нормали?

Основная функция нормалей — правильное затенение и освещение модели. Программы для 3D-графики, такие как Blender, используют нормали для расчета угла падения света на поверхность.

  • Если свет падает на грань, направленную к источнику света (нормаль "смотрит" на свет), грань будет освещена.
  • Если грань отвернута от света (нормаль направлена в противоположную сторону), она будет в тени.

Если нормали направлены неправильно (внутрь объекта), Blender считает эту сторону "изнанкой", и она отображается как темная, прозрачная или просто невидимая при рендеринге или в игровых движках.

Типы нормалей

В 3D-моделировании используются два основных типа нормалей:

  1. Нормали граней (Face Normals):
    • Это один вектор, исходящий из центра каждой грани перпендикулярно ей.
    • Они определяют ориентацию всей грани.
  2. Нормали вершин (Vertex Normals):
    • Это векторы, расположенные в каждом углу (вершине) грани.
    • Они используются для имитации изогнутых поверхностей на плоской геометрии. Сглаживание по Фонгу (Phong shading) или другие методы интерполяции используют нормали вершин для создания плавных переходов между гранями, заставляя низкополигональную модель выглядеть гладкой и округлой.

Нормали и сглаживание (Shading)

То, как вы видите объект в Blender (плоское или гладкое затенение), напрямую зависит от нормалей:

  1. Flat Shading (Плоское затенение): Каждая грань отображается с использованием своей нормали грани. Грани выглядят плоскими, а переходы между ними — резкими и угловатыми.
  2. Smooth Shading (Гладкое затенение): Blender использует интерполированные нормали вершин, чтобы усреднить направление света по граням. Это создает иллюзию гладкой, органичной поверхности.

Карты нормалей (Normal Maps)

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

Почему нормали "ломаются"?

Чаще всего проблемы возникают по следующим причинам:

  1. Моделирование: Операции вроде экструдирования (Extrude) внутрь или создания инвертированной геометрии могут перевернуть нормали.
  2. Импорт/Экспорт: При переносе моделей между разными программами (например, из Blender в игровой движок) информация о нормалях может интерпретироваться по-разному.
  3. Дубликаты вершин: Наличие лишних, "спрятанных" вершин может мешать автоматическому пересчету нормалей.

Проверка и исправление нормалей должна стать рутинной частью рабочего процесса 3D-моделирования.

Как исправить нормали в Blender

Чтобы исправить нормали в Blender, как правило, достаточно их автоматически пересчитать.

▌ Визуальный контроль нормалей

Перед исправлением полезно увидеть, какие нормали направлены неправильно:

  1. В окне 3D Viewport найдите меню "Overlays" (находится справа вверху, иконка похожа на два наложенных круга).
  2. В этом меню поставьте галочку напротив пункта "Face Orientation" (Ориентация граней).
  3. Синий цвет обозначает грани, направленные наружу (правильно), а красный – внутрь (неправильно).

▌ Автоматическое исправление (рекомендуемый метод)

Автоматическое исправление нормалей

Чаще всего этот метод решает проблему:

  1. Перейдите в режим редактирования (Edit Mode), нажав клавишу Tab.
  2. Выделите всю модель, нажав клавишу A.
  3. Нажмите комбинацию клавиш Shift + N (или Alt + N в старых версиях, затем выберите "Recalculate Outside").
  4. Blender автоматически пересчитает нормали таким образом, чтобы они были направлены наружу из объема объекта.

Автоматическое исправление нормалей

▌ Ручное инвертирование нормалей

Ручное инвертирование нормалей

Если автоматический пересчет не сработал для отдельных граней (например, из-за сложной геометрии), их можно инвертировать вручную:

  1. В режиме редактирования (Edit Mode) выделите красные грани, которые нужно исправить.
  2. Нажмите комбинацию клавиш Alt + N (или перейдите в меню Mesh > Normals).
  3. Выберите пункт "Flip" (Инвертировать).

▌ Дополнительные шаги по устранению проблем

Если нормали по-прежнему ведут себя некорректно, возможно, у вас есть проблемы с геометрией:

  1. Удаление дубликатов вершин: В режиме редактирования (Edit Mode) выделите всё (A), затем нажмите M и выберите "Merge by Distance" (Объединить по расстоянию). Это поможет убрать вершины, находящиеся слишком близко друг к другу.
  2. Сброс пользовательских нормалей: Если вы использовали модификаторы или инструменты для работы с нормалями, перейдите на вкладку "Object Data Properties" (зеленый треугольник) > Normals и нажмите кнопку "Clear Custom Split Normals Data" (Очистить данные пользовательских разделенных нормалей).
  3. Модификатор Weighted Normal: В некоторых случаях добавление модификатора "Weighted Normal" может помочь улучшить затенение, особенно на сглаженных поверхностях.