Как исправить карту нормалей

Часть 1: что такое карты нормалей и как они работают Часть 2: как запекаются карты нормалей Часть 3: типы карт нормалей Это четвёртая часть туториала о карта...

image

Часть 1: что такое карты нормалей и как они работают

Часть 2: как запекаются карты нормалей

Часть 3: типы карт нормалей

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

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

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

image

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

image

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

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

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

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

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

    image

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

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

  • Вы используете в карте нормалей гамма-коррекцию: карты нормалей — это не обычные изображения с информацией о цвете. Они содержат информацию о нормалях поверхностей, и не ведут себя как цветные изображения. Гамма-коррекция — это регулирование цветов изображения, способное нежелательным образом изменять цвет карты нормалей. Чтобы убрать гамма-коррекцию из карты нормалей, смените цветовое пространство карты нормалей на linear/linear color/raw или снимите флажок sRGB в движке Unreal.
  • Вы не используете карту нормалей касательного пространства как карту нормалей касательного пространства: убедитесь, что движок не использует карту нормалей касательного пространства как карту нормалей пространства объекта, рельефную карту (bump map), карту смещений (displacement map) и т.д…
  • Нормали lowpoly-модели в программе запекания отличаются от нормалей lowpoly в программе рендеринга: это может происходить, если в процессе экспорта/импорта теряется информация о группах сглаживания (smoothing groups)/резких рёбрах (hard edge), если вы используйте изменённые/весовые нормали, а программа рендеринга не поддерживает их или отбрасывает эту информацию.

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

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

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

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 может работать с обоими типами и экспортировать оба типа карт нормалей.

Решение: инвертировать зелёный канал карты нормалей. У большинства игровых движков есть опция текстур инвертирования карты нормалей, или же вы можете вручную инвертировать зелёный канал текстуры в Photoshop (перейдите во вкладку каналов, выберите зелёный канал и нажмите Ctrl+i).

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

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

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

image

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

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

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

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

Это очень типичная проблема. Такое происходит, когда нормали 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-битными изображениями. [Прим. пер.: тут у автора очевидная ошибка.]

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

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

    image

  • Убедитесь, что карта нормалей правильно сжата: при сжатии текстур компьютер берёт области близких цветов и объединяет их, создавая блоки одного цвета, снижая количество цветов в изображении. Для обычных изображений это обычно нормально, но ужасно для карт нормалей: это не только уничтожает градиенты, но и может объединить информацию каналов цвета. Для карт нормалей придуманы специальные алгоритмы сжатия. Убедитесь, что игровой движок интерпретирует изображение как карту нормалей (обычно это можно сделать, выбрав опцию ассета текстуры, пометив его как карту нормалей), и параметры сжатия будут настроены автоматически.

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

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

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

    image

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

  • Можно накладывать UV islands друг на друга, чтобы они использовали одинаковую информацию карты нормалей на разных частях модели. Просто переместите одну сторону модели на 1 единицу за наружу UV-пространства, чтобы программа запекания не пыталась получить детали с обеих сторон одновременно.

    Можно пойти ещё дальше и использовать в некоторых деталях trim-текстуры или декали для оптимизации использования текстур.

  • Текстуры используют сетку пикселей, а пиксели квадратны. Если какие-то детали образуют линию, попробуйте выровнять эту линию горизонтально или вертикально. Благодаря этому выровняются сетка пикселей и детали текстуры:

    image

    image

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

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

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

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

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

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

Хард-софт эджи

Hard Edge — жесткая грань между двумя плоскостями. В 3ds Max используется подход Smoothing Groups. Для создания жесткого эджа достаточно назначить на плоскости разные группы сглаживания.

Soft edge — гладкая грань. Чтобы создать ее в 3ds Max, на плоскости нужно назначить одинаковые группы сглаживания.

Чтобы грани запеклись как надо, пользуйся правилом «Hard edge — UV seam»: для каждой жесткой грани лоуполи модели нужно создавать шов на UV. Иначе детали и грани запекутся некорректно.

На выделенной грани расположен hard edge, но не сделан разрез на UV. В результате — артефакт.

На выделенной грани расположен hard edge и сделан разрез на UV — угол запекся корректно.

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

На маленьком цилиндре правило «Hard edge — UV seam» нарушено, поэтому там появился артефакт. На большом цилиндре все правильно.

Градиенты

Градиенты на normal map возникают, потому что карта нормалей пытается выровнять градиент на шейдинге объекта. Простыми словами, если на Low Poly во вьюпорте видно градиенты, а на High Poly их нет — они появятся на карте нормалей.

Карта нормалей таким образом пытается привести вид Low poly объекта к виду High poly.

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

Это может вызвать сложности, если для модели нужно создавать лоды (LODs — Level of details, несколько вариаций одной и той же модели с постепенным уменьшением детализации и снижением количества треугольников). В таком случае, после удаления некоторых граней, градиент может появиться на LOD01 и создать визуальные артефакты.

Потяжки

Потяжки можно отнести к градиентам, но разберемся с ними отдельно.

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

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

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

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

Совпадение High Poly и Low Poly моделей

При запекании карты нормалей, вся информация о деталях на поверхности и сглаженности граней полностью переносится с High poly модели. Если угол High poly в пространстве расположен не в том же месте, где и у Low poly, — на карте нормалей появится пробел.

Если что-то подобное появилось на твоем объекте — в первую очередь проверяй соответствие хайполи и лоуполи. Иногда хайполи перед сглаживанием нужно немного сдвинуть / увеличить относительно лоуполи, чтобы после сабдивайда / турбосмуза они оказались в одинаковых координатах. Это костыль, но в некоторых ситуациях он может помочь.

Сечения на цилиндрах

Проблема с выбором количества сечений на цилиндрах косвенно относится к теме сопоставления хайполи и лоуполи моделей. Если у Low poly слишком мало сечений, то после запекания появятся пробелы на верхней и нижней плоскости. Причина та же — несоответствие Low и High poly версий объекта.

Сравнение запекания цилиндров с разным количеством сечений.

Летающая геометрия

Летающая геометрия (Float geometry) — это техника создания «парящих» над поверхностью элементов хайполи.

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

Average normal

В настройках запекания всегда можно найти функцию уравнивания нормалей. Она усредняет нормали для запекания — так можно сделать углы более плавными.

Но есть у этой настройки и обратная сторона: из-за выравнивания нормалей на углах, детали на ровных поверхностях могут начать «плыть». И чем ближе деталь к углу — тем сильнее.

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

Ложная перспектива

Ложная перспектива, или Fake perspective, используется художниками при создании дополнительных элементов на high poly — деталей, которые не поддерживаются сеткой Low poly объекта. Например, любая летающая геометрия.

Суть ложной перспективы в том, чтобы немного сужать вершины элементов по отношению к их основе. Основа — место, в котором элемент «вшивается» в тело объекта.

Это нужно, чтобы элемент было видно на карте нормалей после запекания. Если не следовать этому правилу, геометрия может полностью или частично скрываться на normal map.

Размер элементов и разрешение текстуры

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

Чем меньше разрешение, тем хуже видно маленькие элементы и тонкие фаски.

Если на твоем проекте используется низкий тексель, старайся делать фаски толще, а запекаемые элементы — больше. Таким образом, они не будут теряться после запекания.

(Texel density — количество пикселей на единицу площади объекта. Texel density 1024px/m означает, что на один квадратный метр объекта должно выделяться 1024 пикселя)

Отверстия в High Poly

Если в финальной версии объекта планируется запечь отверстия, но нет возможности промоделировать их геометрией — обязательно зашивай все эти дыры на High poly. Иначе на карте нормалей появятся странные артефакты.

В такой ситуации для создания отверстий лучше промоделить экструды, зашить их, а потом — закрасить черным цветом в карте Albedo.

Пример правильного запекания отверстий.

Плотность High Poly

«Чем плотнее сетка — тем лучше результат на карте нормалей» — хороший аргумент, но до определенного момента.

Если взять текстуру с разрешением 2048х2048 и развертку, которая занимает 100% UV пространства — максимальное количество доступных нам пикселей равняется 4 194 304. И это фантастическая ситуация. В реальной жизни развертка может быть заполнена на 70% плюс оверлапы и паддинг. В результате эта цифра уменьшается на 30-40% процентов.

Так как в один пиксель можно запечь информацию об одной плоскости — нет никакого смысла создавать хайполи модели на 20-30 млн треугольников.

Можно возразить: «Но ведь ничего плохого в большом количестве полигонов нет. Лучше перестраховаться и сделать чуть больше нужного». Отчасти это верно, но такой подход создаст две проблемы.

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

Во-вторых, тяжелая геометрия тормозит работу программ и экспорт/импорт геометрии из софта в софт.

Вывод: хайполи должна выглядеть красиво и сглажено, но не стоит перегружать геометрию лишними треугольниками.

Количество доступных пикселей, в зависимости от разрешения текстуры

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

В следующей статье подойдем к вопросу запекания normal map с практической стороны и поговорим о кнопках в разных программах. Stay tuned!

$begingroup$

enter image description here

hey, I’m just using unity, I’m having a problem with the normal map, like the picture above, if I use blender I just need to change the sRGB to non-color data, but when I import it to unity using the fbx format, why is the result like the picture above? I’ve been looking for tutorials on YouTube but can’t find the results, thank you

https://drive.google.com/file/d/1taEKN33XByWa-eFgzsyOpS3JYOltuYe9/view?usp=sharing

  • unity
  • 3d
  • shaders

asked Aug 31, 2020 at 14:34

Santi Yulianti's user avatar

$endgroup$

4

  • $begingroup$
    It looks like your normal map contains information for just one side of the weapon, and the two halves have been unwrapped over one another, mirroring this data to the other side of the weapon. This can have a side effect of inverting the tangent space, making it look like the normal map is describing bumps on the inside of the surface, instead of the outside. If your 3D modelling software generates its tangents correctly, this should not be a problem — double-check that your export settings include tangent vectors.
    $endgroup$

    Aug 31, 2020 at 14:42

  • $begingroup$
    I’m a little clueless, can you give me a practice video example? I gave you the blender file
    $endgroup$

    Aug 31, 2020 at 14:47

  • $begingroup$
    As I understand it, you mean that, I still haven’t applied mirror modiffier? or a problem with the uv that maybe the uv part is reversed but not the 3d part
    $endgroup$

    Aug 31, 2020 at 14:56

You must log in to answer this question.

$begingroup$

enter image description here

hey, I’m just using unity, I’m having a problem with the normal map, like the picture above, if I use blender I just need to change the sRGB to non-color data, but when I import it to unity using the fbx format, why is the result like the picture above? I’ve been looking for tutorials on YouTube but can’t find the results, thank you

https://drive.google.com/file/d/1taEKN33XByWa-eFgzsyOpS3JYOltuYe9/view?usp=sharing

  • unity
  • 3d
  • shaders

asked Aug 31, 2020 at 14:34

Santi Yulianti's user avatar

$endgroup$

4

  • $begingroup$
    It looks like your normal map contains information for just one side of the weapon, and the two halves have been unwrapped over one another, mirroring this data to the other side of the weapon. This can have a side effect of inverting the tangent space, making it look like the normal map is describing bumps on the inside of the surface, instead of the outside. If your 3D modelling software generates its tangents correctly, this should not be a problem — double-check that your export settings include tangent vectors.
    $endgroup$

    Aug 31, 2020 at 14:42

  • $begingroup$
    I’m a little clueless, can you give me a practice video example? I gave you the blender file
    $endgroup$

    Aug 31, 2020 at 14:47

  • $begingroup$
    As I understand it, you mean that, I still haven’t applied mirror modiffier? or a problem with the uv that maybe the uv part is reversed but not the 3d part
    $endgroup$

    Aug 31, 2020 at 14:56

You must log in to answer this question.

  • Форум
  • 3D Studio MAX

Как выровнять нормали?

  • из 2

  • 2
  • Вперед

Автор

Сообщение

Вставить имя в ответ
Перейти в профиль

diargon345Diargon345

Репутация: 3

На сайте c 13.02.2016
Сообщений: 36

03.04.2016 01:07

Получается вот такое. (некорректное затенение полигонов) Как это исправить? Пробовал через edit normals. Раньше не работал с этим модификатором. Ничего не выходит. Пробовал через normal. Ничего не выходит. В синьке есть волшебная кнопочка выровнять нормали. И такое проходит. А в максе как?

c7e49c85f4504e2c9fbafd805db8b336.jpg

6c5fa59ba696473d936e52568a0fcc2f.jpg

Вставить имя в ответ
Перейти в профиль

dedora

Репутация: 9067

На сайте c 14.06.2012
Сообщений: 2784
Киев

03.04.2016 01:15

reset  и normal

Вставить имя в ответ
Перейти в профиль

diargon345Diargon345

Репутация: 3

На сайте c 13.02.2016
Сообщений: 36

03.04.2016 01:17

Цитата Dedora:

reset  и normal

Где взять этот reset?

Вставить имя в ответ
Перейти в профиль

dedora

Репутация: 9067

На сайте c 14.06.2012
Сообщений: 2784
Киев

03.04.2016 01:20

Цитата diargon345Diargon345:

Цитата Dedora:

reset  и normal

Где взять этот reset?

В молотке. rezet ixform

эдит поли . Селект ол вертекс-> велд.

Вставить имя в ответ
Перейти в профиль

diargon345Diargon345

Репутация: 3

На сайте c 13.02.2016
Сообщений: 36

03.04.2016 01:34

Попробовал reset. Он часть точек объединил в одну. Часть точек оставил на месте. а часть точек вообще унёс куда то в неизвестном направлении.

Попробовал все точки велдом обработать. Не помогло. А по поводу непонятного вопроса. Видишь меш? Там ненужные чёрные пятна. Нужно их убрать. Как?

Вставить имя в ответ
Перейти в профиль

dedora

Репутация: 9067

На сайте c 14.06.2012
Сообщений: 2784
Киев

03.04.2016 01:38

Видишь-ли  макс любит родную поли. По-этому  ничего и не получается.

Понимаю двигло от авто или крафт . А здесь смоделить 16 полигонов заново -это пару минуток. Похоже что поли все твои имеют разные нормали каждая. Вся проблема в этом.

Стоп. А если попробуй сохранить из макса как obj или fbx и потом импортируй назад?  Давай пробуй , вперед. Доложишь.

Вставить имя в ответ
Перейти в профиль

diargon345Diargon345

Репутация: 3

На сайте c 13.02.2016
Сообщений: 36

03.04.2016 01:43

Это и есть родная поли. Я смоделил 1-ю часть — всю ок. Преступил ко 2-й. И на 2-й появились эти затемнения. и чё то мне подсказывает что когда я буду моделить остальные части у меня тоже могут оказаться эти затемнения. И тогда придётся переделывать не 16, а 16000 полигонов. Мне как то будет в лом. Хочу обрубить проблему у её основания. ну и ещё понять как это лечить.

Вставить имя в ответ
Перейти в профиль

dedora

Репутация: 9067

На сайте c 14.06.2012
Сообщений: 2784
Киев

03.04.2016 01:45

Устал не понимать. Нормально скрин сделай сначала.

Все. устал. мож че не догоняю smiley-unknw.gif

Вставить имя в ответ
Перейти в профиль

diargon345Diargon345

Репутация: 3

На сайте c 13.02.2016
Сообщений: 36

03.04.2016 01:46

Цитата Dedora:

Похоже что поли все твои имеют разные нормали каждая. Вся проблема в этом.

Ну я как бы изначально об этом писал. Я тебя удивлю, даже тема так называется smiley-smile.gif

Цитата Dedora:

Стоп. А если попробуй сохранить из макса как obj и потом импортируй назад?  Давай пробуй , вперед. Доложишь.

Ок. пытка не пытка. Ща попробуем

Вставить имя в ответ
Перейти в профиль

dedora

Репутация: 9067

На сайте c 14.06.2012
Сообщений: 2784
Киев

03.04.2016 01:50

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

Доклад окончен.

Вставить имя в ответ
Перейти в профиль

diargon345Diargon345

Репутация: 3

На сайте c 13.02.2016
Сообщений: 36

03.04.2016 01:58

После экспорта и последующего импорта obj.

ecace91a5f772e3b8e930a5803cac7e8.jpg

Сначала только где-то нормали отображались некорректно. теперь они полностью с катушек съехали. smiley-smile.gif

Вставить имя в ответ
Перейти в профиль

dedora

Репутация: 9067

На сайте c 14.06.2012
Сообщений: 2784
Киев

03.04.2016 02:00

ф4 нажимается ?

Вставить имя в ответ
Перейти в профиль

diargon345Diargon345

Репутация: 3

На сайте c 13.02.2016
Сообщений: 36

03.04.2016 02:01

Да

Вставить имя в ответ
Перейти в профиль

VladimirG

Репутация: 3881

На сайте c 16.11.2007
Сообщений: 1064
Almaty

03.04.2016 03:58

diargon345Diargon34

Что гадать? Модель скинь !

Вставить имя в ответ
Перейти в профиль

red-rimm

Репутация: 11339

На сайте c 25.10.2011
Сообщений: 949
Пенза

03.04.2016 08:49

может, группы сглаживания?

Вставить имя в ответ
Перейти в профиль

dimonty

Репутация: 1444

На сайте c 22.09.2006
Сообщений: 251

03.04.2016 09:30

Мне тоже кажется что с нормалями все норм, если были вывернуты были бы или не видны или черными

Вставить имя в ответ
Перейти в профиль

Skorpionchik

Репутация: 2528

На сайте c 25.02.2009
Сообщений: 2341
Kyiv

03.04.2016 10:45

Edit Nornals

Вставить имя в ответ
Перейти в профиль

kofsh

Репутация: 521

На сайте c 27.03.2008
Сообщений: 708

03.04.2016 12:16

Создайте плэйн, конвертните его в mesh (не в Editable Poly), а именно в Editable Mesh, после чего приаттачте к нему проблемную геометрию.

И теперь уже сделайте конверт Editable Poly. Отпишитесь что получилось.

Вставить имя в ответ
Перейти в профиль

diargon345Diargon345

Репутация: 3

На сайте c 13.02.2016
Сообщений: 36

03.04.2016 14:11

Цитата VladimirG:

diargon345Diargon34

Что гадать? Модель скинь !

max

obj

Цитата dimonty:

Мне тоже кажется что с нормалями все норм, если были вывернуты были бы или не видны или черными

Я практически уверен что дело в нормалях. Нормали повернуты конечно в ту сторону, но помомне просто не под тем углом. Поэтому полигоны не черные и они видны, но из-за неправильного градуса получаются вот такие вот затенения.

Цитата Skorpionchik:

Edit Nornals

Я в самом начале писал что так у меня ничего не получилось. Пробовал юнифи, брейк.

Цитата kofsh:

И теперь уже сделайте конверт Editable Poly. Отпишитесь что получилось.

Не помогло. Получилось то же что и было.

Вставить имя в ответ
Перейти в профиль

SamoreZ

Репутация: 1035

На сайте c 31.12.2007
Сообщений: 448
Кемерово

03.04.2016 14:29

тайна разгадана

c3195f061ccd6db5b5f8eb18f22e8e92.jpg

  • из 2

  • 2
  • Вперед

Для тех, кто хочет инвертировать штамп нормали твердой поверхности в Substance Painter, вам нужно щелкнуть правой кнопкой мыши слой> Добавить уровни> Затронутый канал: Нормальный> Выбрать красный, затем Инвертировать> Выбрать зеленый, затем Инвертировать. Это изменит направление карты нормалей (от вдавливания к выталкиванию или наоборот).

Как перевернуть карту нормалей?

Вы можете легко перевернуть карту нормалей в блендере. Откройте карту нормалей в средстве просмотра изображений> Инвертировать> перевернуть зеленый канал.

Как инвертировать дизайнера вещества?

инвертировать цвет маски, удерживая ctrl или alt.

Как перевернуть карту нормалей в Maya?

Гамма-коррекция на картах нормалей может изменить направление нормалей карты. В узле файла карты нормалей выберите «Линейный» в параметре «Цветовой профиль», чтобы избежать применения цветовой коррекции к карте нормалей.

Как перевернуть карту нормалей в блендере?

Чтобы получить доступ к этой опции и/или исправить вывернутую наизнанку или перевернутую грань, сначала выберите ошибочный элемент сетки в режиме редактирования [1] (используя вершину, ребро или грань) и в левом верхнем углу меню «Сетка» щелкните «Нормали» [2], затем Отразить [3] из появившихся опций — Mesh » Normals » Flip.

Как вы обращаете нормали в единстве?

Вариант 1. Отредактируйте сетку сферы так, чтобы нормали указывали внутрь. Вы можете сделать это в своем 3D-приложении: если вы используете Blender, перейдите в режим редактирования, выберите все вершины и ctrl+f->flip normals. Вы можете включить отрисовку нормалей вершин в инструментах сетки в Blender.

Вы можете инвертировать фон маски, щелкнув правой кнопкой мыши > Инвертировать фон маски. Это полезно, если вы хотите избежать разрушения эффектов, прикрепленных к маске.

Как включить симметрию в Substance Painter?

Симметрию можно включить, нажав кнопку «Симметрия» на контекстной панели инструментов. Симметрия доступна только при использовании инструмента рисования.

Можно ли запекать текстуры в Substance Painter?

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

Как вы печете с художником?

Как запекать Mesh-карты

  1. Открыть или показать окно настроек набора текстур: …
  2. В окне настроек набора текстур нажмите кнопку Bake Mesh Maps, чтобы открыть окно настроек Baker:
  3. Нажмите кнопку Bake All или Bake «Your Material Name» в нижней части окна Baker Settings, чтобы начать процесс:

Как использовать карту нормалей в Maya?

Дважды щелкните узел Maya 2D File Texture, и когда он появится в редакторе атрибутов, загрузите карту нормалей в слот «Изображение». В редакторе атрибутов найдите параметр «цветовое пространство» и установите для него значение «Raw». Соедините «выход» узла Maya 2D File Texture с «входом» узла AiNormalMap.

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

Общий принцип запекания карты нормалей относительно прост: у нас есть lowpoly-модель с UV-координатами и highpoly-модель; мы переносим информацию о нормалях с highpoly на lowpoly. Благодаря этому lowpoly будет отражать свет так же, как highpoly.

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

Если вы не контролируете нормали вершин lowpoly-модели, то потеряете контроль над картой нормалей.

image

Плохая корреляция карт нормалей

Чтобы контролировать сглаживание lowpoly-модели, нам нужны разделённые (split) нормали вершин (для создания жёстких рёбер) или усреднённые (averaged) нормали вершин (для создания гладких рёбер).

Как оказалось, не все 3D-программы используют для усреднения нормалей вершин одинаковые вычисления. Это значит, что в разных 3D-редакторах lowpoly-модель будет выглядеть иначе, а её нормали вершин будут указывать немного в разных направлениях. Обычно это не представляет большой проблемы, потому что эти отклонения очень малы, но они влияют на внешний вид модели; и эти различия усиливаются при использовании карт нормалей, потому что карты нормалей изменяют нормали lowpoly-модели, которые в разных программах различаются.

image

Индустрия 3D-графики работает над устранением этой проблемы; недавно появился стандарт под названием Mikk space. Это метод вычисления нормалей вершин, который могут использовать все 3D-приложения, чтобы нормали вершин во всех 3D-программах выглядели одинаково. Однако нужно учесть, что пока его используют не все 3D-приложения.

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

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

Когда компьютер усредняет направление нормали у нормалей вершин lowpoly-модели, большие изменения в углах поверхности могут «скосить» нормали lowpoly-модели и они больше не будут перпендикулярными поверхности lowpoly.

Your browser does not support HTML5 video.

Так как программа запекания нормалей при поиске деталей highpoly использует направления нормалей lowpoly, то если эти направления будут скошенными, то они будут выглядеть скошенными на карте нормалей:

image

Это очень распространённая проблема, для которой найдено несколько решений. Идеального решения нет, всё зависит от геометрии.

1. В некоторых 3D-программах запекания существует опция повторного запекания (rebaking) этих частей с временным изменением нормалей lowpoly, чтобы они запекались без скоса. Например, такая опция есть в Marmoset Toolbag. Пользователь Reddit под ником Tanagashi любезно объяснил мне, что некоторые программы наподобие xNormal могут тесселировать lowpoly, чтобы добавить новые вершины и сделать нормали перпендикулярными к поверхности lowpoly, запекать карту нормалей в пространстве объекта, а затем преобразовывать её в касательное пространство на основании исходных нормалей lowpoly. С помощью новой карты нормалей программа может создавать маски для управления тем, где использовать исходную карту нормалей, а где созданную из тесселированной lowpoly-модели.

image

2. Добавление вершин сделает переход между нормалями вершин менее скошенным, потому что один угол в 90º будет разделён на несколько меньших градусов, делая второй переход менее скошенным. Очевидно, что это увеличивает количество полигонов, и поскольку вы добавляете геометрию, я рекомендую использовать эти дополнения для создания более интересного силуэта модели.

image

image

3. Разделение усреднённых нормалей вершин (делая ребро жёстким/используя отдельные smoothing groups): таким образом, каждая вершина будет иметь несколько нормалей, каждая из которых перпендикулярна к поверхности lowpoly. Не забывайте, что когда 3D-программа имеет разделённую нормаль вершины, то она на самом деле создаёт дубликат вершины, увеличивая таким образом количество вершин и немного снижая производительность. Кроме того, как мы увидим позже, жёсткие рёбра создают проблему «чёрных рёбер».

image

4. Можно изменять нормали моделей, чтобы изгибать нормали lowpoly, чтобы они были перпендикулярными нормалям highpoly. Помните, что не все программы позволяют использовать изменённые нормали (в Zbrush есть только усреднённые нормали, файлы OBJ и устаревшие FBX не содержат специальной информации о нормалях). По сути, существует два способа изменения нормалей:

  • Взвешенные нормали (Weighted normals): это автоматический метод, похожий на усреднённые нормали вершин. Идея заключается в том, что при усреднении нормалей вершин не все грани должны иметь одинаковую силу: крупные грани «притягивают» к себе нормали вершин сильнее, чем мелкие грани. Благодаря этому крупные грани, которые обычно важнее, будут иметь более качественное проецирование деталей. Особенно хорошо это работает с highpoly-панелями.

    image

  • Собственные нормали (Custom normals): при помощи инструментов из 3D-редактора мы можем изгибать нормали lowpoly. Это относительно новая идея, для реализации которой не существует стандартизированных инструментов. Помните, что изгибание нормалей может создавать очень странное нежелательное затенение в других частях модели, поэтому эта техника обычно комбинируется с фасками (bevels). Некоторые люди называют эту технику «midpoly-моделированием».

    image

Cage/baking distance

По умолчанию, испускаемые с поверхности lowpoly лучи проходят ограниченное расстояние, чтобы lowpoly не получала информацию о нормалях от далёких частей highpoly. Это расстояние обычно называется «frontal/rear distance», потому что лучи могут испускаться по направлению внутрь, наружу, или в обоих направлениях. На рисунке ниже это расстояние показано красным:

image

Некоторые 3D-приложения (например, 3ds Max) также позволяют использовать «клетку» (cage). Cage — это «копия» lowpoly-модели, которую можно модифицировать таким образом, чтобы она идеально заключала в себе highpoly. Также в некоторых случаях (не всегда) она позволяет нам менять направление лучей, не изменяя при этом исходные нормали вершин lowpoly. Это может помочь получит наилучшие граничные случаи запекания и избежать скосов; однако нужно помнить, что мы запекаем, используя не направление вершин нормалей, но в конечном итоге применим карту нормалей для изменения истинных нормалей lowpoly, поэтому результат может выглядеть странно.

image

Швы на рёбрах

Как мы видели, если имеется модель с жёсткими рёбрами (некоторые рёбра имеют больше одной smoothing group, или некоторые рёбра помечены как «hard»), то программа запекания разделяет нормаль вершин между двумя гранями. У этой операции есть хорошие и плохие стороны.

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

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

image

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

image

image

Заключение

Подготовив lowpoly-модель и сделав её как можно ближе к highpoly-модели, я начинаю работать над сглаживанием перед UV. Я задаю сглаживание для lowpoly (если объект органический, то я начинаю с полностью сглаженной модели, если он имеет твёрдую поверхность, то я задаю угол сглаживания в пределах 30-60º и настраиваю сглаживание, пока результат не будет выглядеть хорошо).

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

Если возникают ошибки со скосами, то я добавляю дополнительные рёбра (обычно я делаю фаски (bevel), чтобы сохранить округлость силуэта). Это срабатывает для большинства моих моделей, но я могу исправлять ошибки со скосами, если использую для запекания Marmoset Toolbag, или применяя собственные/взвешенные нормали.

При наличии ошибок проецирования я изменяю baking distance/cage, модифицирую lopoly/highpoly, чтобы они лучше подходили для запекания, или удаляю карты нормалей на отдельных очень жёстких частях, например, на концах конусов.

Следующая статья будет инструкцией по устранению проблем с запеканием карт нормалей и обсуждением наиболее часто встречающихся проблем и решений.

Карты нормалей — это тип карты рельефа. Это особый тип текстуры, который позволяет добавлять детали поверхности, такие как неровности, канавки и царапины, к модели, которая отражает свет, как будто они представлены реальной геометрией.

Например, вы можете захотеть показать поверхность с канавками и винтами или заклепками на поверхности, например корпус самолета. Один из способов сделать это — смоделировать эти детали как геометрию, как показано ниже.

Лист авиационного металла с деталями, смоделированными как реальная геометрия.

Лист авиационного металла с деталями, смоделированными как реальная геометрия.

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

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

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

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

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

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

Что такое нормали поверхности?

Чтобы действительно объяснить, как работает карта нормалей, мы сначала опишем, что такое «нормаль» и как она используется в освещении в реальном времени. Возможно, самым простым примером будет модель, в которой каждый многоугольник поверхности освещается просто в соответствии с углами поверхности относительно источника света. Угол поверхности можно представить в виде линии, выступающей в перпендикулярном направлении от поверхности, и это направление (которое является вектором) относительно поверхности называется «нормалью к поверхности» или просто нормально.

Два 12-гранных цилиндра, слева с плоской штриховкой и справа со сглаженной штриховкой.

Два 12-гранных цилиндра, слева с плоской штриховкой и справа со сглаженной штриховкой.

На изображении выше левый цилиндр имеет базовое плоское затенение, и каждый многоугольник затенен в соответствии с его относительным углом к источнику света. Освещение на каждом полигоне постоянно по всей площади полигона, потому что поверхность плоская. Вот те же два цилиндра с их каркасной сеткойосновным графическим примитивом Unity. Меши составляют большую часть ваших 3D-миров. Unity поддерживает триангулированные или четырехугольные полигональные сетки. Поверхности Nurbs, Nurms, Subdiv должны быть преобразованы в полигоны. More info
See in Словарь
visible:

Два 12-гранных цилиндра, слева с плоской штриховкой и справа со сглаженной штриховкой.

Два 12-гранных цилиндра, слева с плоской штриховкой и справа со сглаженной штриховкой.

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

В виде 2D-диаграммы три полигона поверхности вокруг внешней стороны заштрихованного цилиндра будут выглядеть следующим образом:

Плоское затенение трех полигонов, рассматриваемое как 2D-диаграмма

Плоское затенение трех полигонов, рассматриваемое как 2D-диаграмма

Нормали поверхности представлены оранжевыми стрелками. Это значения, используемые для расчета того, как свет отражается от поверхности, поэтому вы можете видеть, что свет будет реагировать одинаково по длине каждого полигона, потому что нормали поверхности указывают в одном направлении. Это дает «плоское затенение» и является причиной того, что полигоны левого цилиндра имеют четкие края.

Однако для гладкого заштрихованного цилиндра нормали поверхности плоских многоугольников различаются, как показано здесь:

Плавное затенение трех полигонов в виде 2D-диаграммы

Плавное затенение трех полигонов в виде 2D-диаграммы

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

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

Что такое сопоставление нормалей?

Планирование нормалей продвигает эту модификацию нормалей поверхности на один шаг вперед, используя текстуру для хранения информации о том, как изменять нормали поверхности по всей модели. Карта нормалей — это текстура изображения, наложенная на поверхность модели, похожая на обычные цветные текстуры, однако каждый пиксельнаименьшая единица в компьютерном изображении. Размер пикселя зависит от разрешения вашего экрана. Пиксельное освещение рассчитывается для каждого пикселя экрана. Подробнее
См. в Словарь
в текстуре карты нормалей (называемой texel) представляет собой отклонение направления нормали к поверхности от «истинной» нормали к поверхности плоского (или сглаженного интерполированного) многоугольника.

Отображение нормалей по трем полигонам, представленное в виде 2D-диаграммы

Отображение нормалей по трем полигонам, представленное в виде 2D-диаграммы

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

Цвета, видимые в необработанном файле карты нормалей, обычно имеют голубоватый оттенок и не содержат реальных светлых или темных оттенков, потому что сами цвета не предназначены для отображения такими, какие они есть. Вместо этого значения RGB каждого тексела представляют собой значения X, Y и Z вектора направления и применяются как модификация базовых интерполированных гладких нормалей полигональных поверхностей.

Пример текстуры карты нормалей

Пример текстуры карты нормалей

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

Пример карты нормалей, примененной к поверхности сетки цилиндра, использованной выше

Пример карты нормалей, примененной к поверхности сетки цилиндра, использованной выше

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

Как получить или сделать карты нормалей?

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

Как визуализировать карты нормалей из 3D-приложения выходит за рамки этой документации, однако основная концепция заключается в том, что 3D-художник создает две версии модели: модель с очень высоким разрешением, содержащую все детали в виде полигонов, и «Готовая к игре» модель с более низким разрешением. Модель с высоким разрешением была бы слишком детализирована для оптимальной работы в игре (слишком много треугольников в сетке), но она используется в приложении 3D-моделирования для создания карт нормалей. Версия модели с более низким разрешением может затем опустить очень тонкий уровень детализации геометрии, который теперь хранится в картах нормалей, чтобы вместо этого ее можно было визуализировать с использованием сопоставления нормалей. Типичным вариантом использования для этого было бы показать выпуклые детали складок, пуговиц, пряжек и швов на одежде персонажа.

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

Вот два примера: простая повторяющаяся текстура каменной стены с соответствующей картой нормалей и атлас текстур персонажа с соответствующей картой нормалей:

Текстура каменной стены и соответствующая ей текстура карты нормалей

Текстура каменной стены и соответствующая ей текстура карты нормалей
Атлас текстуры персонажа и соответствующий ему атлас текстуры карты нормалей.
Атлас текстуры персонажа и соответствующий ему атлас текстуры карты нормалей.

В чем разница между картами рельефа, картами нормалей и картами высот?

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

Слева карта высот для бамп-мэппинга каменной стены. Справа карта нормалей для бамп-мэппинга каменной стены.

Слева карта высот для бамп-мэппинга каменной стены. Справа карта нормалей для бамп-мэппинга каменной стены

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

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

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

Почему сине-фиолетовые цвета?

Понимание этого не обязательно для использования карт нормалей! Можно пропустить этот абзац. Однако, если вы действительно хотите знать: значения цвета RGB используются для хранения направлений X, Y, Z вектора, где Z означает «вверх» (вопреки обычному соглашению Unity об использовании Y как «вверх»). Кроме того, значения в текстуре считаются уменьшенными вдвое с добавлением 0,5. Это позволяет сохранять векторы всех направлений. Следовательно, чтобы преобразовать цвет RGB в направление вектора, вы должны умножить его на два, а затем вычесть 1. Например, значение RGB (0,5, 0,5, 1) или #8080FF в шестнадцатеричном формате дает вектор (0,0, 1), который находится «вверху» для целей сопоставления нормалей и не представляет собой изменение поверхности модели. Это цвет, который вы видите в плоских областях «примерной» карты нормалей ранее на этой странице.

Карта нормалей, использующая только #8080FF, что соответствует вектору нормали 0,0,1 или прямо вверх. Это не меняет нормаль к поверхности многоугольника и, следовательно, не влияет на освещение. Любые пиксели, которые отличаются от этого цвета, приводят к векторам, которые указывают в другом направлении, что, следовательно, изменяет угол, который используется для расчета отражения света в этой точке..

Карта нормалей, использующая только #8080FF, что соответствует вектору нормали 0,0,1 или прямо вверх. Это не меняет нормаль к поверхности многоугольника и, следовательно, не влияет на освещение. Любые пиксели, которые отличаются от этого цвета, приводят к векторам, которые указывают в другом направлении, что, следовательно, изменяет угол, который используется для расчета отражения света в этой точке.

Значение (0,43, 0,91, 0,80) дает вектор (–0,14, 0,82, 0,6), что представляет собой довольно крутую модификацию поверхности. Подобные цвета можно увидеть в ярко-голубых областях карты нормалей каменной стены в верхней части некоторых краев камня. В результате эти грани улавливают свет под совсем другим углом, чем более плоские поверхности камней.

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

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

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

Каменная стена без эффекта рельефа. Края и грани скалы не улавливают направленный солнечный свет в сцене..

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

Как импортировать и использовать карты нормалей и карт высот

Карту нормалей можно импортировать, как обычно, поместив файл текстуры в папку ресурсов. Однако вам нужно сообщить Unity, что эта текстура является картой нормалей. Это можно сделать, изменив параметр «Тип текстуры» на «Карта нормалей» в инспектореокна Unity, в котором отображается информация о текущем выбранном игровом объекте, активе или настройках проекта, что позволяет вам проверять и редактировать значения. More info
See in Словарь
settings.

Чтобы импортировать черно-белую карту высоттекстуру в оттенках серого, в которой хранятся данные о высоте объекта. Каждый пиксель хранит разницу высот перпендикулярно лицу, которое представляет пиксель.
Посмотрите в Словарь
как на карту нормалей, процесс почти идентичен, за исключением того, что вы необходимо установить флажок «Создать из оттенков серого».

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

Настройки Low и High Bumpiness при импорте карты высот в качестве карты нормалей и результирующий эффект на модель.

Настройки Low и High Bumpiness при импорте карты высот в качестве карты нормалей и результирующий эффект на модель.

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

Размещение текстуры карты нормалей в правильном слоте материала с использованием стандартного шейдера

Размещение текстуры карты нормалей в правильном слоте материала с использованием стандартного шейдера

Если вы импортировали карту нормалей или карту высот и не пометили ее как карту нормалей (выбрав Тип текстуры: Карта нормалей, как описано выше), инспектор материалов предупредит вас об этом и предложит исправить это так:

Предупреждение «Исправить сейчас» появляется при попытке использовать карту нормалей, которая не помечена как таковая в инспекторе.

Предупреждение «Исправить сейчас» появляется при попытке использовать карту нормалей, которая не помечена как таковая в инспекторе.

Нажатие кнопки «Исправить сейчас» имеет тот же эффект, что и выбор Тип текстуры: карта нормалей в настройках инспектора текстур. Это будет работать, если ваша текстура действительно является картой нормалей. Однако, если это карта высот в оттенках серого, она не обнаружит это автоматически, поэтому для карт высот вы всегда должны выбирать параметр «Создать из оттенков серого» в окне инспектора текстуры.

Вторичные карты нормалей

Вы также можете заметить, что внизу в инспекторе материалов для стандартного шейдера есть второй слот карты нормалей. Это позволяет вам использовать дополнительную карту нормалей для создания дополнительных деталей. Вы можете добавить карту нормалей в этот слот так же, как и в обычный слот карты нормалей, но цель здесь состоит в том, чтобы вы использовали другой масштаб или частоту тайлинга, чтобы две карты нормалей вместе давали высокий уровень детализацииТехника Уровень детализации (LOD) – это оптимизация, которая уменьшает количество треугольников, которые Unity должна обрабатывать. визуализировать для GameObject, когда его расстояние от камеры увеличивается. Подробнее
См. в Словарь
в разных масштабах. Например, ваша обычная карта нормалей может определять детали облицовки стен или транспортных средств с канавками для краев панелей. Вторичная карта нормалей может обеспечить очень точную детализацию выпуклостей для царапин и износа на поверхности, которая может быть мозаичной в 5-10 раз больше масштаба базовой карты нормалей. Эти детали могут быть настолько мелкими, что их можно увидеть только при внимательном рассмотрении. Чтобы иметь такое количество деталей на базовой карте нормалей, потребуется, чтобы базовая карта нормалей была невероятно большой, однако, комбинируя две карты разных масштабов, можно достичь высокого общего уровня детализации с двумя относительно небольшими текстурами карты нормалей.

Понравилась статья? Поделить с друзьями:
  • Как исправить картофельное пюре взбитое блендером
  • Как исправить заявление на госуслугах на выплату от 8 до 17 лет через госуслуги
  • Как исправить засохшую гуашь
  • Как исправить замечания к коллективному договору
  • Как исправить задание от учителя на учи ру