Почему карта нормалей накладывается криво в blender
Перейти к содержимому

Почему карта нормалей накладывается криво в blender

  • автор:

Особенности применения карт нормалей

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

Термины:
Карты нормалей = КН
HP – high poly – высокополигональная модель.
LP – low poly – низкополигональная модель.
Тупой угол – больше 90 градусов.
Острый угол — меньше 90 градусов.
Прямой угол – 90 градусов.
Жесткие грани – стыки двух или более групп сглаживания.

Оглавление:

Технология работы КН

• Типы КН
• Настройки осей для запекания КН в разных программах
• Кодирование информации
• Tangent basis
• Нейтральный цвет КН (Flat Color)

Возможности и ограничения КН Основные факторы, влияющие на запекание КН

• Влияние сглаживания на запекание карт
• Проблема настройки групп сглаживания и UV
• Проблема запеченной триангуляции
• Жесткие грани (группы сглаживания) Их влияние на запекание КН.
• Планирование UV\жестких граней
• Градиенты на КН
• Использования жестких граней для правки сильных градиентов на КН. Тестирование запеканий «Averaged projection mesh» и «Explicit mesh normals»
• Отличие «Average Normals» от «Exported normals» в xNormal
• Причины возникновения «волнистости» на КН
• Зависимость «артефакта волнистости» от прямых углов и количества геометрии
• Причины возникновения «искажений деталей» на КН
• Зависимость «артефакта волнистости» от количества геометрии в окружности (Добавление фаски VS Добавление большего кол-ва сегментов)
• Построение геометрии HP подстраивая её под кривизну LP
• Влияние размера LP относительно размера HP
• Настройка «Сustom» нормалей в 3ds max для запекания КН (CryEngine3)
• Проблема наклонных UV
• Проблема смешивания mipmap. Padding.
• Настройка Mipmap и Padding
• Антиалиасинг
• Reset Transforms (сброс трансформаций)
• Синхронизация программы запекания и программы отображения. Тестовые запекания для проверки Tangent Basis
• Обход ошибок запекания при несинхронизированном пайплайне

Методы проецирования лучей для запекания КН
«Averaged projection mesh» (Cage)

• Расстояние от high до low poly
• Настройка модели перед запеканием (экспортом для запекания)
• Проблема «отсутствия Cage»
• Cage vs Offset
• Экспорт Cage в Obj файл
• Настройка Cage
• Перекрытие Cage (Overlap)
• Проблема «Излишнего» проецирования»
• Решение — mat ID
• Практическое применения техники «Material ID»
• Решение — Explode

Решение часто возникающих проблем при запекании КН

• Силуэт
• Размер фаски на гранях (Detail Scale)
• «Сужение» запекаемых деталей
• Передача вида «дыры» в поверхности
• Запекание «висящей» (floating) геометрии – Проблема волнистости
• Проблема волнистости из-за слишком большой Cage
• Триангуляция LP и HP.
• Проблемы триангуляции.
• Ошибка запекания – искажение деталей
• Запекание отзеркаленной (перекрывающейся) геометрии
• Зеркалирование – проблемы триангуляции
• Влияние Smoothing Groups и разрывов UV на Vertex Count
• Решение проблемы размера фаски
• Скрипт для создания жестких граней по границам UV
• Редактирование запеченной КН в 2D (правка волнистости)
• Re-normalization
• Ручное создание нормализированных Mip-Maps
• Сжатие КН
• Проверка КН
• Разрешение и битность КН
• Проблемы, связанные с разрешением КН
• Уменьшение размера КН
• Решение проблемы артефактов пикселей запекания c одной UV развертки на другую
• Destructive baking workflows («Лишняя» ручная работа)
• Запекание автоматических фасок Mental Ray в КН
• Правка ошибок экспорта в нормалях
• Проблема с разбиением вершин в движке
• Проблема белых точек на рендере
• PipelineIO для Modo
• SBM Export

Приложение – Записи по тестам.
Источники

Технология работы КН Типы КН
World space, Object space, Tangent space. Типы отличаются в зависимости от координатной системы в которой зашифрованы нормали. World Space World Space КН очень похожи на Object Space, с различием в том, что они используют X, Y и Z мира (мировых координат) как свои. World Space радужные на вид. Т.к. карта зависит от мировых координат, художник не имеет возможности вращать модель, т.к. при этом разрушается освещение модели. Поэтому World Space можно использовать только для статичных объектов. Как и Object, Space World Space не могут иметь тайловую текстуру. (нужны оригинальные координаты)
В World space каждый пиксель текстуры отражает определенный угол в мире. Карта не редактируют нормали low poly а полностью переписывают их. (позволяет хорошо сгладить модель приближая её вид к хай поли) Object Space КН Object Space КН используют ориентацию модели как свои X, Y, and Z. Y наиболее часто используется как направленность «вверх», тогда как X – «слева», а Z – направление в котором направлена модель. На вид эти карты радужные т.к. они отображает нормали которые направлены в разные стороны (вместо 180градусов Tangent Space). Object Space могут использоваться для (жестких) вращающихся моделей и не могут иметь тайловую текстуру. (нужны оригинальные координаты)
В Object space каждый пиксель текстуры отражает определенный угол в мире, относительно pivot объекта. (если вращать объект угол будет вращаться с ним) Tangent Space КН Tangent Space КН используют текстурное координатное пространство, так что X и Y являются U и V текстурных координат, а Z нормаль поверхности. Эти карты большей мерой светло синие(127,127,255) т.к. синий канал отображает направление полигонов поверхности модели. red (X) и green (Y) каналы смещают это направление.
Tangent space каждый пиксель текстуры отражает нормали относительно нормалей низкополигональной модели. Карта редактируют нормали low poly.
Глядя на Tangent Space КН можно примерно определить, что в ней закодировано: светло-голубые пиксели (R 127, G 127, B 255) отображают нормали поверхности, направленные «спереди» (прямо из экрана). Розовые пиксели – нормали направленные направо. Зеленые – вверх. Фиолетовые – вниз. И темно синие\зеленые налево. Алгоритмы создания КН Для создание World space, Object space существует только один алгоритм создания карты. (исключая flip channels) Tangent Space более сложные и могут создаваться несколькими путями. Отображение модели будет результатом двух операций – кодирования в КН и расшифровки КН при рендере. Идеально эти калькуляции должны быть одинаковы, иначе можно получить ошибки отображения. К сожалению, нет единого стандарта в создании Tangent Space КН, каждая программа делает это по-своему, а игровые движки рендерят по-своему.
Не всегда можно угадать эти алгоритмы и подстроить пайплайн под конкретный движок.
Например Unreal – калькуляции не подходят ни к одному 3д приложению, но существуют техники способные улучшить отображение нормалей (шейдинга) в движке. (для лучшего результата можно экспортировать модель в fbx с флажком tangents and binormals.)
Например программа – handplane http://www.handplane3d.com/index.html
Настройки осей для запекания КН в разных программах: Maya, Marmoset, Unity should be X+Y+Z+ & Max, UDK, CryENGINE 3 should be X+Y-Z+. Кодирование информации Разница между High poly и Low-poly хранится в трех цветовых составляющих изображения (красной, зеленой и голубой). Цвет каждого пикселя кодирует информацию о том, в какую сторону была ориентирована нормаль детальной модели по отношению к нормали вершины низкополигональной модели в данной точке развертки. Красная и зеленая компоненты определяют отклонение нормали вправо/влево (X) и вверх/вниз (Y) соответственно. Голубая цветовая это «глубина» (Z), по сути, является обычной картой рельефа (bump map).
Если разделить все каналы получим видимости направленного освещения:
Красный канал (Red) – модель освещена точно справа. Зеленый канал (Green) – модель освещена точно сверху. Синий канал (Blue) – модель освещена точно cпереди. Tangent basis Когда вы смотрите на tangent-space КН (например, персонажа), вы замечаете разные цвета вдоль швов UV. Это происходит потому что UV островки обычно ориентированы под разными углами на модели, необходимое зло при отображении 3д модели на 2д карте. Тело может быть – вертикальным островком, рука – горизонтальным. Это заставляет нормали КН искривиться (повернуться) для разных направленностей этих UV островков. UV изгибаются, поэтому и нормали должны быть изогнуты для компенсации. tangent basis помогает переориентировать (изогнуть) освещение когда оно попадает на local space поверхности, поэтому свет выглядит равномерным во всей поверхности модели с КН.
Когда художник тайлит tangent-space КН по ширине поверхности модели (например, ландшафт (сшитые UV)), она освещается правильно т.к. модель имеет единое направление в tangent space.
Если же модель имеет разрывы в UV координатах (швы) или КН имеет сильные направленные градиенты вдоль карты, tangent space не будет единым, и поверхности может иметь стык освещения. Нейтральный цвет КН (Flat Color) Обычно (128,128,255) цвет нормали перпендикулярный поверхности. Это нейтральный цвет, показывающий, что никаких отклонений от нормы на КН нет. Возможности и ограничения КН Плюсы (+) КН позволяют создавать cглаженные углы. На крупных прямоугольных деталях их лучше промоделивать геометрией. КН в сочетании с затемнениями на текстуре цвета отлично передают вдавленности. КН хорошо передают мелкие детали поверхности. КН хорошо передают узкие и глубокие швы между деталями, вид практически безупречен. Минусы (-) КН не изменяют силуэт. Выпуклые детали КН передают немного хуже — КН плохо передают крупные выступающие детали. Проблема состоит в том, что если нарисовать крупную выступающую деталь на КН она будет хорошо выглядеть если смотреть на полигон спереди или под каким-либо углом, но когда вы будете смотреть сбоку или почти сбоку вы будете видеть плоский полигон без всякого рельефа. (силуэт) КН плохо сглаживают геометрию. КН лучше всего работают для углов в 45 градусов и меньше. (более всего критично для запекания)
Выводы: Нужно передавать основные выступающие детали, следить за тем, чтобы крупные детали были достаточно сглаженными, не нужно моделить геометрией мелкие детали или небольшие вдавленности.
Нет необходимости моделить те мелкие детали, которые гораздо лучше будут смотреться на текстуре с КН, допустим, мелкие болтики и прочее, которые будучи промоделенными будут выглядеть угловато. Лучшая область применения КН:

•сглаживание острых углов низкополигонального объекта или добавление фасок на грани, •создание видимости рельефной поверхности.

Основные факторы влияющие на запекание КН Это группы сглаживания (Smoothing groups), развертка (UV) и ограничивающая сетка (Cage) Влияние сглаживания на запекание карт Запекание КН зависит от сглаживания, примененного к полигонам модели. Если полигоны сглажены – и на КН не будет стыков. (это больше мерой относится к плоскостям т.к. для углы описаны ниже) Проблема настройки групп сглаживания и UV Если на модель, имеющую прямые или острые углы назначить одну группу сглаживания и попробовать запечь хай поли с прямыми углами-фасками, КН придется компенсировать это сглаживания для наиболее точной передачи вида хай поли. Это приводит к «натяжению» КН (tension). Визуально это заметно по произвольными затемнениям на модели с КН.
Чем меньше разница в сглаживании хай и лоу поли, тем меньше усилий нужно приложить КН и тем точнее результат. Пример 1 (1 группа сглаживания, сшитые UV) Для наилучшего отображения в движке можно использовать Splits (разделения) как UV пространстве так и в группах сглаживания. Это нужно чтоб создавать карты нормалей с меньшим натяжением (tension).
Пример tension – видимые сильные градиенты – компенсация больших перепадов в направлении полигонов (например прямые углы куба) лоу-поли. Обычного нейтрального цвета (фиолет 128 как на фоне) на карте почти нет. Это КН для 6 гранного куба с одной группой сглаживания.

Для исправления этих проблем нужно создать такие КН которые не будут из последних сил исправлять сглаживание лоу-поли. Именно для этого используется Split (разделение), для избежания «чрезмерного натяжения» КН – и ошибок шейдинга. Пример 2
(несколько групп сглаживания, сшитые UV) В другом примере используется несколько групп сглаживания. (каждый полигон куба – своя группа). Рельтат тут лучше.

Как видно на карте нормалей на плоских частях модели цвет нейтральный (128 фиолет) Но проблемы все же присутствуют: на сшитых углах модели видима черная полоска.
Решением данной проблемы в конкретном случае является добавление разрыва на UV добавление Padding. Пример 3
(несколько групп сглаживания, все UV разорваны)

При этом UV отступают друг от друга на достаточное расстояние. (Padding не смешивается) Вывод: если есть «разделение» в группах сглаживания, то автоматически нужно делать разделение на UV и оставлять место для Padding.
Некоторые рендеры более корректно просчитывают КН и хорошо отображаются в большинстве случаев. (3 point shader) Пример 4
(добавление геометрии) Решение проблемы «tension» — возможно добавлением геометрии по краям модели.
Добавление геометрии по краям модели сгладит нормали лоу поли без разных групп сглаживания. По отношению к созданию разных групп сглаживания итоговое количество вершин не изменится, но треугольников будет больше. Основной минус – усложнение развертки UV.
Пример: 116 трис, 60 вершин.
Пример 5
Комбинация (добавление геометрии и групп сглаживания) Более всего рекомендуется использовать комбинацию групп сглаживания и фасок геометрии. Это позволит достаточно просто развернуть UV (полосками на кубах и плоскостями на их крышках).
Пример: 60 трис, 64 вершины. (без учета SG)

Вывод: Острые углы в геометрии лучше разделять по SG и UV. Проблема запеченной триангуляции Если неправильно настроено сглаживание – а именно на всю модель одна группа сглаживания – при запекании КН могут запечься и проблемы триангуляции. Это правится настройкой с групп сглаживания. На примере было достаточно сгладить внутренний круг и внешние границы. (Избегайте прямых выпуклостей — всегда должен быть минимальный скос)

  1. Размещать швы нужно в труднодоступных для взгляда местах, лучше всего там, где есть швы на реальном объекте т.е. в логичных местах.
  2. Не размещайте детали в районе швов
  3. Если необходимы детали в районе швов – делать это нужно в режиме 3д рисования.

Градиенты на КН

Видимые градиенты на КН не означают, что у вас есть ошибки на запеченной КН. Градиенты лишь компенсируют LP нормали вершин. Чем более экстремальны нормали вершин, тем больше градиентов будет на КН.
Никогда нельзя на глаз определить ошибки сглаживания по 2д виду КН, нужно наложить эту карту на модель и поместить в нужный движок.
Тем не менее, чем больше КН вынуждена компенсировать экстремальные нормали, тем больше шансов получить ошибки сглаживания, в особенности если программа запекания и отображения не синхронизированы.

Поэтому желательно запекать КН с наиболее меньшим количеством градиентов.
Дополнительные причины для этого:

Градиенты плохо масштабируются и «сжимаются» (компрессия)
Проявляются сложности в текстурировании (сложно извлекать Detail map)
Иногда недостаточно texel density (в особенности, когда используются малые текстуры) и потому недостаточно разрешения для отрисовки градиентов.
Когда используются mipmap КН с сильными градиентами теряют качество быстрее, чем КН с меньшим количеством градиентов.
Если программа запекания и отображения не синхронизированы и Tangent basis не совпадает – при наложении КН на модель могут появиться ошибки сглаживания. (даже без mipmap)

Практический пример:

Обратите внимание, что с тем как разрешение уменьшается, кубы на которые наложены КН с сильными градиентами становятся более пикселизированными.

Все это усугубляется DXT (или 3Dc) компрессией которая использована наряду с уменьшением

В большинстве ситуаций желательно будет избавиться от градиентов. Это можно сделать довольно просто добавив жесткие грани к границам UV – это уменьшит градиент до приемлемого уровня. (на итоговом кол-ве вершин это не отразится)

Использования жестких граней для правки сильных градиентов на КН
Тестирование запеканий «Averaged projection mesh» и «Explicit mesh normals»
(синхронированные нормали)

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

А: Мягкие грани (одна группа сглаживания), «Averaged projection mesh»
В: Жесткие грани на UV швах, «Averaged projection mesh»
С: Жесткие грани на UV швах, «Explicit mesh normals»

Low poly

Low poly c КН

Обратная сторона
Low poly

Low poly c КН

Как видно из теста, нет никаких визуальных недостатков в использовании метода B. Нет визуальных швов, алиасинга или других подобных артефактов.
Даже там где можно этого ожидать — проблем нет. Например, мягкие формы в передней части прицела, где обычно стоило бы смягчить грани, для упрощения работы с LOD.
Фактически В выглядит лучше всех, т.к. в А имеются некоторые артефакты, названные выше «resolution based smoothing errors» (ошибки сглаживания из-за разрешения). На примере В данные артефакты тоже присутствуют (там, где сглаживание совпадает с А), но они не так заметны, как в А. А содержит вышеупомянутые ошибки в большем количестве мест.

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

Не беря во внимание тот факт, что с более низкими mipmap модель удаляется от камеры и занимает меньше места на экране B выдает результат лучше, чем А. Кроме того, большая часть игр имеет настройку качества текстур, так что если игрок играет на низких настройках он увидит mipmap быстрее. Даже если ваша модель имеет текстуру 4к, это не означает что она будет использоваться в игре, фактически такой высокий mipmap не будет использоваться никогда. Он будет отображен, только если модель больше разрешения экрана. (only when the mesh in question is larger than your screen resolution would it use a mip that high)

Теперь рассмотрим пример С. Проблемы проецирования довольно заметны. С данным типом проецирования («Explicit mesh normals») мы создаем швы вдоль любых жестких граней из-за пробелов в проецировании. Этого следует избегать.
В примере не показаны мягкие грани с «Explicit mesh normals» т.к. это дает идентичных результат с А.

Вид КН


Развертка UV

Использование жестких граней (групп сглаживания) для правки сильных градиентов.

Главная причина использования групп сглаживания, если tangent basis программы запекания не соответствует движку рендеринга.
Цвета и градиенты КН отображают разницу между LP и HP моделями и если tangent basis не совпадает тогда цвета эти цвета и градиенты не могут быть транслированы верно в корректное освещение. В итоге мы видим ошибки сглаживания (которые и являются визуальной разницей между tangent basis запеченной карты и считыванием рендера).
Добавление групп сглаживания уменьшает количество градиентов и соответственно – количество ошибок т.к. остается меньше шансов для некорректной передачи – т.к. зоны с группами сглаживания имеют склонность быть более плоскими их значения ближе к 128,128,255 (вместе с иными факторами)
Если вами используется одна группа сглаживания и tangent basis программы для запекания совпадает с движком рендера – тогда в дополнительных группах сглаживания нет нужды, кроме того что это упрощает текстуринг. (более чистые КН) Хотя в некоторых случаях это все же может привести к ошибкам, поэтому нет нужды не использовать группы сглаживания.

Практическое применение:

Отличие «Average Normals» от «Exported normals» в xNormal

В xNormal всегда нужно запекать используя «exported normals». (финальные нормали LP), т.к. «усреднение» нормалей в xNormal отличается от «Averaged Projection Mesh» Если вы используете опцию «Average Normals» и затем используете получившуюся запеченную КН на вашей LP модели, их нормали не совпадут, что приведет к ошибкам.

«Discard back-faces hits»

Примеры:

Exported normals Vs Av. Normals in Marmoset (on the exported normals LP)

Averaged normals

Exported normals

Difference map

xNormal требует чтоб топология Cage совпадала на 100% с LP и не имеет функции «усредненной Cage». Встроенный редактор cage не работает: с увеличением размера Cage также увеличиваются и пробелы в проецировании.

Решением проблемы: дублировать LP модель для использования как external cage и после этого увеличить на нужное значение и наложить группы сглаживания (одну).

Плюсы в использовании «жестких граней»:

Меньше экстремальных градиентов на КН, что упрощает «извлечение» карты деталей в ndo2\ crazybump (без артефактов из-за резких изменений цвета) и упрощает создание LOD (уменьшенные КН создают меньше проблем т.к. они не должны сильно полагаться на нормали поверхности модели), предоставляет лучшее сжатие текстуры (компрессия).
Уменьшает «resolution based smoothing errors» (ошибки сглаживания из-за разрешения), которые появляются когда имеется маленький треугольник, но не достаточно разрешения для его корректного затенения. (в игре маленькие белые треугольники). Также это улучшает отображение КН на меньших MipMaps. (при отдалении от них камеры)

Выводы:

Использование жестких граней (групп сглаживания) на границах UV дает такие преимущества:

1. Если рендер не синхронизирован с программой запекания, это может существенно уменьшить ошибки сглаживания.
2. Даже если рендер синхронизирован , это поможет избавится от артефактов в разрешении текстуры. (треугольник слишком мал и требует градиента для того чтоб уравновесить сглаживание, что невозможно записать на КН) (проиллюстрировано выше)
3. Извлечение «detail maps» из crazybump или xnormal более простые и предсказуемые. Вы меньше переживаете из за артифактов от экстремальных перепадов.

Пример извлеченной карты деталей

Используется crazy bump. Увеличение 300%. Примеры А и В. Как видно В имеет более чистый результат.

4. Компрессия текстуры производит лучшие результаты с меньшими градациями.

Причины возникновения «волнистости» на КН

Факторы:

Сужение прямых выпуклостей (отсутствие 90градусных углов)
Совпадение формы: Форма лоу поли, насколько она совпадет с хай (решается добавлением геометрии) (для цилиндра верхняя и нижние крышки моделей должны быть в одном месте)
Сглаживание на прямых и острых углах.

841 0 850 117

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

Здесь написано все то, про что не говорят даже в платных уроках, идеально ) .

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

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

«Голубая цветовая это «глубина» (Z), по сути, является обычной картой рельефа (bump map).» Это неправда, третий канал используется для нормализации векторов, и он не является Bump картой. В Bump карте в каждом пикселе хранится его высота, а в третьем канале нормалмапы картинку можно описать так: вектора направленные в сторону камеры белого цвета, все остальные вектора черные. Наткнусь на что то еще, напишу)

Трудности и «глюки», возникающие у новичков в программе Blender, и как их преодолеть

Blender это замечательный бесплатный 3d пакет, который делает возможным и доступным осуществление гигантского количества проектов, и, как человек, прошедший путь от абсолютного новичка в 3d до преподавателя данной программы в учебном центре «Специалист» в Москве, я могу поделиться несколькими типами, которые помогут преодолеть несколько несложных, но каверзных моментов, которые хоть и очень просты, но далеко не очевидны, и могут заставить просидеть несколько часов в поиске решения проблемы.

Перевод программы и подсказок

Перевод программы и подсказок — Blender, как и почти все программы является англоязычной, но в настройках (preferences) мы можем сделать его интерфейс русскоязычным. Переводить его полностью на русский язык я бы не советовал, т.к. названия всех терминов и команд почти необходимо знать на английском языке для дальнейшего развития, и, так или иначе, много из них заимствовано великим и могучим русским языком и используется всеми и повсеместно (нормали, фейсы, вертексы и т.д.). А вот перевод подсказок действительно может упростить процесс входа в программу и снять много вопросов в процессе их появления. Окошко с подсказкой возникает при наведении курсора мыши на любой элемент blender.

  • Для того чтобы активировать подсказки, если они не работают, нужно зайти в меню Edit-Preferences-Interface. Поставить галочку напротив Tooltips.
  • Для активизации перевода подсказок в том же разделе открываем выпадающее меню Translation, ставим русский язык, и галочку напротив Affect Tooltips.

Забагивание области просмотра

Следующая проблема с которой я постоянно сталкивался это забагивание области просмотра — при попытке панорамировать вид\приблизиться\отдалиться от объекта, blender упорно отказывается это делать, точнее делает это очень медленно . Тут помогает функция Frame, которая перезахватывает выбранный объект во вьюпорте и данная проблема устраняется.

  • Находится эта функция в меню View-Frame selected.

Clipping

Некст проблема это clipping — при попытке работать с объектом на близком расстоянии область обрезает часть нашего объекта, и мешает нам работать.

  • устраняется заходом в боковое меню нажатием кнопки N, и во вкладке view в выпадающем меню view, уменьшаем значение Clip Start (Например 0,001)

Нормали

Следующая проблема это нормали — будь то незнание того — что это? или незнание того — как их привести в правильное положение. Проблемы с нормалями возникают например при попытке запечь карты деформации, во время скульптинга, при попытке нажать Shade smooth и тд.

  • -Нормали это вектор перпендикулярный плоскости полигона, который указывает блендеру куда ему отражать свет. Направлен этот вектор только в одну сторону, то есть если нормаль вашего полигона развернута внутрь объекта, как часто случается в blender, то из за этого у вас будут проблемы на каком-то этапе работы.

  • Как мы можем видеть на данном изображении — все нормали объекта, кроме трех выделенных, повернуты наружу, а три выделенные — внутрь. При обычном режиме затенения Shade flat — этого не видно, но если я включу режим затенения shade smooth, то результат будет совсем иным.

  • Проверить направление нормалей своего объекта я могу перейдя в edit mode, и в выпадающем меню overlays поставить галочку напротив Face orientation . Тогда все нормали повернутые наружу будут отображаться синим цветом, а направленные внутрь — красным. В этом же меню Overlays я могу включить отображение нормалей как векторов.

  • Развернуть нормали нам помогут функции Mesh-Normals-Flip (или recalculate outside)
  • Flip — развернет выделенные полигоны.
  • Также мы можем выделить все полигоны объекта (шорткат А) и нажать Recalculate outside чтобы blender автоматически пересчитал все наши полигоны наружу.

  • За направлением нормалей лучше следить.

Двойные вертексы

Двойные вертексы — часто в процессе моделирования и оперирования командой Extrude могут создаться вертексы, которые стоят друг в друге и будут портить нашу топологию, это может нам аукнуться на этапах UV развертки, создания рига и тд. Чтобы избежать этого, на промежуточных этапах работы можно выделять всю свою модель в режиме работы с вершинами и нажимать Mesh-clean up-merge by distance. Двойные вертексы будут объединяться.

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

Карты нормалей запеченные в других программах (substance painter, Zbrush) дают странный результат в Blender .

  • Проблема в том что карты нормалей, в вышеперечисленных, и не только, программах, запекаются c использованием DirectX, а blender работает с OpenGL. Если говорить простым языком то нам нужно развернуть зеленый канал на карте нормалей. Делается это следующим образом:

Надеюсь, что данный пост поможет людям, осваивающим блендер, проскочить несколько часов поиска решения проблем!

Это норма — 4: решение проблем с картами нормалей

image

Это четвёртая часть туториала о картах нормалей, но она независима от остальных частей и её можно читать отдельно.

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

Проблема: на рёбрах модели присутствуют «чёрные линии» или «вставки»

image

Такое происходит, когда у модели есть резкие рёбра (hard edges), поскольку вершины модели имеют нормали, полностью перпендикулярные поверхности полигона, из-за чего программа запекания может пропустить некоторые детали (оставляя на модели чёрные линии).

image

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

Здесь есть более подробное объяснение, но на практике правило довольно простое: когда на модели есть резкое ребро, нужно отделять в UV соединённые им грани.

Проблема: карта нормалей выглядит СОВЕРШЕННО неправильно, особенно под некоторыми углами

Эта проблема может возникать по множеству причин. Давайте обсудим некоторые из них:

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

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

Проблема: как мне создать карту нормалей острого конуса?

Решение: вам это… не нужно. Не обязательно создавать карты нормалей для всего. Острый конус — классический пример этого, но существует множество других случаев, когда карты нормалей не являются решением.

image

Мы используем карты нормалей для изменения направления нормалей lowpoly-моделей. Иногда направление нормалей правильно и не требует никаких изменений, а иногда нормали lowpoly чрезвычайно повёрнуты (как в случае острого шипа) и детали из highpoly-модели неправильно сопоставляются с поверхностью lowpoly-модели. В таких случаях я просто удаляют детали карты нормалей при помощи такого цвета:

image

Этот цвет на 50% красный, на 50% зелёный и на 100% синий, и он не меняет направления нормалей карты нормалей касательного пространства, поэтому можно использовать его для удаления деталей в местах с неудачной проекцией.

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

Проблема: детали на моей модели выглядят вывернутыми.

Это очень распространённая проблема, и её можно наблюдать во многих видеоиграх, даже AAA-уровня.

Как мы видели в этом туториале [перевод на Хабре], карты нормалей — это текстуры, использующие зелёный, красный и синий каналы для изменения способа отражения света от поверхности модели, когда он падает соответственно сбоку, сверху и спереди модели (помните, что это упрощённое объяснение и оно верно не на 100%).

image

Проблема в том, что некоторые приложения считают, что зелёный канал должен показывать модель как освещённую снизу, а другие считают, что он должен показывать модель как освещённую сверху. Иногда это называют «правостороннесть карты нормалей» (normal map right-handiness):

  • OpenGL-приложения (правосторонние, положительный зелёный канал): Blender, Maya, Modo, Toolbag, Unity.
  • DirectX-приложения (левосторонние, отрицательный зелёный канал): 3DStudio Max, CryEngine, Source Engine, Unreal Engine.
  • Substance Painter может работать с обоими типами и экспортировать оба типа карт нормалей.

Проблема: некоторые части кажутся плоскими/в них отсутствуют какие-то детали

Представьте, что при запекании карт нормалей программа запекания испускает лучи из поверхности lowpoly-модели, следуя по нормалям lowpoly, пока лучи не пересекутся с highpoly-моделью и не повернутся. После этого программа запекания берёт эту информацию и сохраняет её в карту нормалей.

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

image

Решение: зависит от того, как программа запекания позволяет управлять расстоянием запекания:

  • Некоторые программы ищут детали только снаружи lowpoly и игнорируют то, что находится «внутри» lowpoly-модели (однако большинство современных программ запекания выполняет поиск в обоих направлениях). В таком случае нужно модифицировать модели так, чтобы lowpoly полностью находилась внутри highpoly.
  • Другие программы, например Max, используют клетку (cage) — «экструдированную» версию lowpoly, которую можно изменять для точного управления границами процесса запекания.
  • Другие программы позволяют задавать расстояние запекания числом (в Substance Painter это max frontal/rear distance).

Проблема: карта нормалей имеет искажённые детали

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

image

Решение: я более подробно писал об этой теме в другом туториале [перевод на Хабре], но в целом решения бывают такими:

  • Сгладьте острый угол, добавив фаску (bevel).
  • Преобразуйте ребро острого угла в резкое ребро (hard edge)/разделите грани на разные группы сглаживания (smoothing group).
  • Используйте настраиваемые нормали (custom normals)/весовые нормали (weighted normals).

Проблема: карта нормалей выглядит пикселизированной или содержит полосы

Earthquake (AKA бог карт нормалей) написал очень хорошее объяснение этой проблемы.

Если lowpoly и highpoly очень похожи, то бОльшая часть карты нормалей будет иметь один базовый цвет карты нормалей, а другими цвета будут в местах отличия lowpoly от highpoly.

Если ситуация обратная: lowpoly и highpoly очень отличаются, то карта нормалей будет иметь гораздо большее разнообразие цветов и начнут возникать градиенты:

image

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

  • Сделайте lowpoly более похожей на highpoly: благодаря этому карте нормалей придётся делать меньше работы и она будет более похожей на первое изображение, что позволит избежать больших и плавных градиентов. Также может помочь изменение нормалей lowpoly, чтобы они лучше соответствовали highpoly.
  • Используйте 16-битные карты нормалей: по умолчанию в большинстве изображений используется 8-битная глубина цвета. Это значит, что каждый канал цвета текстуры может использовать 8 разных значений (0 или 1). Для всех трёх каналов цвета это даёт нам 256 возможных цветов.

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

image

16-битные значения могут использовать 16 различных битовых значений на каждый канал, что составляет 65536 возможных цветов. Это означает, что диапазон плавных градиентом может быть больше. Учтите, что 16-битные изображения больше по размерам, чем 8-битные (потому что содержат больше информации). Кроме того, иногда 16-битные изображения содержат альфа-канал; тогда они называются 24-битными изображениями. [Прим. пер.: тут у автора очевидная ошибка.]

image

Проблема: на отдельных частях модели заметны пиксели

Очевидным решением будет увеличение UV-«острова» (island) этой части модели или использование более крупных текстур, но давайте рассмотрим и менее очевидные решения:

    Запекайте с удвоенным разрешением карты нормалей, а затем уменьшайте размер изображения: если вы используете текстуру 512×512, то запекайте карту нормалей с разрешением 1024×1024, а затем преобразуйте изображение в 512×512. Благодаря этому каждый пиксель окончательной текстуры будет получать информацию от четырёх пикселей, создавая своего рода «сглаживание» (antialiasing) и снижая пикселизацию. Это также справедливо и для других запечённых изображений; кроме того, стоит сохранять версии текстур высокого разрешения на случай, если позже вам захочется увеличить детали в некоторых областях.

image

image

image

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

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

Кроме того, вы можете изучить небольшой туториал Earthquake, который помог мне немного больше понять нормали вершин и карты нормалей.

Дополнительную информацию о картах нормалей можно узнать из wiki сайта Polycount.

  • карты нормалей
  • 3d-моделирование
  • запекание нормалей
  • 3d-редакторы
  • игровые движки
  • normal mapping

Узел «Карта нормале黶

The Normal Map node generates a perturbed normal from an RGB normal map image. This is usually chained with an Image Texture node in the color input, to specify the normal map image. For tangent space normal maps, the UV coordinates for the image must match, and the image texture should be set to Non-Color mode to give correct results.

Входы¶

Сила Сила эффекта от карты нормалей. Цвет Цвета в цветовом пространстве RGB, кодирующие нормаль в указанном пространстве.

Свойства¶

Пространство Входные RGB-цвета могут быть в одном из трёх пространств: «Касательном», «Пространстве объекта» и «Пространстве мира». Карты нормалей в касательном пространстве наиболее распространены, поскольку они поддерживают преобразование объекта и деформацию полисетки. Карты нормалей в пространстве объекта продолжают оставаться привязанными к поверхности объекта после его трансформации, в то время как карты нормалей в пространстве мира – нет. UV-разметка Имя UV-разметки, из которой берутся касательные накладываемых нормалей. Когда узел соединён с узлом «Изображение-текстура», эта UV-разметка должна быть такой же, как и та, что используется для наложения текстуры.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *