Часть 1: что такое карты нормалей и как они работают
Часть 2: как запекаются карты нормалей
Часть 3: типы карт нормалей
Это четвёртая часть туториала о картах нормалей, но она независима от остальных частей и её можно читать отдельно.
Здесь я перечисляю проблемы карт нормалей, с которыми я сталкивался за годы работы, и некоторые решения, позволяющие их устранить.
Проблема: на рёбрах модели присутствуют «чёрные линии» или «вставки»
Такое происходит, когда у модели есть резкие рёбра (hard edges), поскольку вершины модели имеют нормали, полностью перпендикулярные поверхности полигона, из-за чего программа запекания может пропустить некоторые детали (оставляя на модели чёрные линии).
Решение: программы запекания карт нормалей учитывают эту проблему при создании карт нормалей и пытаются снизить её влияние, вычисляя немного больше информации за нормалями вершин, но чтобы сохранить её, им нужен зазор между UV-развёртками полигонов.
Здесь есть более подробное объяснение, но на практике правило довольно простое: когда на модели есть резкое ребро, нужно отделять в UV соединённые им грани.
Проблема: карта нормалей выглядит СОВЕРШЕННО неправильно, особенно под некоторыми углами
Эта проблема может возникать по множеству причин. Давайте обсудим некоторые из них:
- Вы используете неправильное касательное пространство: нормали вашей lowpoly-модели, которые мы пытаемся модифицировать при помощи карты нормалей, могут вычисляться в программе запекания иначе, нежели в программе, использованной для рендеринга модели. Если эти вычисления отличаются, карта нормалей может выглядеть очень странно, особенно под некоторыми углами.
Также возможно, что вы используете в качестве карты нормалей касательного пространства карту нормалей мирового пространства. В таком случае убедитесь, что вы выполняете запекание карты нормалей касательного пространства, и используете её в этом качестве.
Решение: старайтесь всегда использовать для вычисления карт нормалей базис касательного пространства Mikk. Это стандартизованный способ вычисления нормалей, позволяющий избегать подобных проблем. Если программа запекания карт нормалей не может использовать Mikk, попробуйте воспользоваться программой наподобие handplane для переключения между различными касательными пространствами.
- Вы используете в карте нормалей гамма-коррекцию: карты нормалей — это не обычные изображения с информацией о цвете. Они содержат информацию о нормалях поверхностей, и не ведут себя как цветные изображения. Гамма-коррекция — это регулирование цветов изображения, способное нежелательным образом изменять цвет карты нормалей. Чтобы убрать гамма-коррекцию из карты нормалей, смените цветовое пространство карты нормалей на linear/linear color/raw или снимите флажок sRGB в движке Unreal.
- Вы не используете карту нормалей касательного пространства как карту нормалей касательного пространства: убедитесь, что движок не использует карту нормалей касательного пространства как карту нормалей пространства объекта, рельефную карту (bump map), карту смещений (displacement map) и т.д…
- Нормали lowpoly-модели в программе запекания отличаются от нормалей lowpoly в программе рендеринга: это может происходить, если в процессе экспорта/импорта теряется информация о группах сглаживания (smoothing groups)/резких рёбрах (hard edge), если вы используйте изменённые/весовые нормали, а программа рендеринга не поддерживает их или отбрасывает эту информацию.
В таком случае сравните lowpoly в обоих приложениях и если они отличаются, то попробуйте изменить параметры импорта/экспорта, используемые форматы файлов (файлы obj теряют информацию о нормалях) и проверьте совместимость своей программы с настраиваемыми нормалями.
Проблема: как мне создать карту нормалей острого конуса?
Решение: вам это… не нужно. Не обязательно создавать карты нормалей для всего. Острый конус — классический пример этого, но существует множество других случаев, когда карты нормалей не являются решением.
Мы используем карты нормалей для изменения направления нормалей lowpoly-моделей. Иногда направление нормалей правильно и не требует никаких изменений, а иногда нормали lowpoly чрезвычайно повёрнуты (как в случае острого шипа) и детали из highpoly-модели неправильно сопоставляются с поверхностью lowpoly-модели. В таких случаях я просто удаляют детали карты нормалей при помощи такого цвета:
Этот цвет на 50% красный, на 50% зелёный и на 100% синий, и он не меняет направления нормалей карты нормалей касательного пространства, поэтому можно использовать его для удаления деталей в местах с неудачной проекцией.
Острый конус — это просто пример одного из случаев, когда карты нормалей могут не решить ваших проблем. Важно здесь помнить, что в некоторых случаях карта нормалей не является наилучшим решением, её возможности ограничены и мы не можем ожидать, что они будут вести себя так, как нам нужно, в любой ситуации. Иногда мы тратим много времени, пытаясь заставить работать карту нормалей, когда можно было бы просто добавить деталей в diffuse-текстуру или в lowpoly, а не пытаться передать деталь при помощи карты нормалей.
Проблема: детали на моей модели выглядят вывернутыми.
Это очень распространённая проблема, и её можно наблюдать во многих видеоиграх, даже AAA-уровня.
Как мы видели в этом туториале [перевод на Хабре], карты нормалей — это текстуры, использующие зелёный, красный и синий каналы для изменения способа отражения света от поверхности модели, когда он падает соответственно сбоку, сверху и спереди модели (помните, что это упрощённое объяснение и оно верно не на 100%).
Проблема в том, что некоторые приложения считают, что зелёный канал должен показывать модель как освещённую снизу, а другие считают, что он должен показывать модель как освещённую сверху. Иногда это называют «правостороннесть карты нормалей» (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. В таком случае мы теряем детали и карта нормалей имеет области плоского цвета.
Решение: зависит от того, как программа запекания позволяет управлять расстоянием запекания:
- Некоторые программы ищут детали только снаружи lowpoly и игнорируют то, что находится «внутри» lowpoly-модели (однако большинство современных программ запекания выполняет поиск в обоих направлениях). В таком случае нужно модифицировать модели так, чтобы lowpoly полностью находилась внутри highpoly.
- Другие программы, например Max, используют клетку (cage) — «экструдированную» версию lowpoly, которую можно изменять для точного управления границами процесса запекания.
- Другие программы позволяют задавать расстояние запекания числом (в Substance Painter это max frontal/rear distance).
Также можно попробовать сделать lowpoly и/или highpoly более похожими друг на друга, чтобы лучи смогли получить детали по всей поверхности модели. Ещё один вариант заключается в запекании двух карт нормалей с разными расстояниями cage и их смешивании в разных частях текстур. Некоторые пуристы создания карт нормалей могут на вас за это ругаться, так что берегите уши.
Проблема: карта нормалей имеет искажённые детали
Это очень типичная проблема. Такое происходит, когда нормали lowpoly неправильно соответствуют деталям highpoly, поэтому кажутся наклонёнными (на самом деле, если смотреть на них с направления нормалей вершин, они соответствуют идеально). Такое обычно происходит, когда некоторые грани образуют очень острый угол.
Решение: я более подробно писал об этой теме в другом туториале [перевод на Хабре], но в целом решения бывают такими:
- Сгладьте острый угол, добавив фаску (bevel).
- Преобразуйте ребро острого угла в резкое ребро (hard edge)/разделите грани на разные группы сглаживания (smoothing group).
- Используйте настраиваемые нормали (custom normals)/весовые нормали (weighted normals).
Проблема: карта нормалей выглядит пикселизированной или содержит полосы
Earthquake (AKA бог карт нормалей) написал очень хорошее объяснение этой проблемы.
Если lowpoly и highpoly очень похожи, то бОльшая часть карты нормалей будет иметь один базовый цвет карты нормалей, а другими цвета будут в местах отличия lowpoly от highpoly.
Если ситуация обратная: lowpoly и highpoly очень отличаются, то карта нормалей будет иметь гораздо большее разнообразие цветов и начнут возникать градиенты:
Такие плавные градиенты вызывают проблемы, потому что для их представления нужно множество цветов, а самые распространённые способы сжатия текстур основаны на снижении общего количества цветов.
Решения:
- Сделайте lowpoly более похожей на highpoly: благодаря этому карте нормалей придётся делать меньше работы и она будет более похожей на первое изображение, что позволит избежать больших и плавных градиентов. Также может помочь изменение нормалей lowpoly, чтобы они лучше соответствовали highpoly.
- Используйте 16-битные карты нормалей: по умолчанию в большинстве изображений используется 8-битная глубина цвета. Это значит, что каждый канал цвета текстуры может использовать 8 разных значений (0 или 1). Для всех трёх каналов цвета это даёт нам 256 возможных цветов.
При наличии плавных градиентов мы можем замечать на модели полосы, потому что изображение не имеет достаточного количества цветов для представления такого небольшого изменения цвета.
16-битные значения могут использовать 16 различных битовых значений на каждый канал, что составляет 65536 возможных цветов. Это означает, что диапазон плавных градиентом может быть больше. Учтите, что 16-битные изображения больше по размерам, чем 8-битные (потому что содержат больше информации). Кроме того, иногда 16-битные изображения содержат альфа-канал; тогда они называются 24-битными изображениями. [Прим. пер.: тут у автора очевидная ошибка.]
Также существуют изображения с большей глубиной цвета, но для карт нормалей они не используются, потому что 16 бит более чем достаточно.
- Используйте дизеринг: нехватка цветов в текстурах — это проблема, которой уже несколько десятков лет, и десятки лет назад было придумано её решение — использование дизеринга. Идея заключается в том, чтобы перемежать пиксели в текстуре, обозначая градиент и при удалении это выглядит вполне хорошо. Обычно дизеринг можно включить при экспорте текстуры.
- Убедитесь, что карта нормалей правильно сжата: при сжатии текстур компьютер берёт области близких цветов и объединяет их, создавая блоки одного цвета, снижая количество цветов в изображении. Для обычных изображений это обычно нормально, но ужасно для карт нормалей: это не только уничтожает градиенты, но и может объединить информацию каналов цвета. Для карт нормалей придуманы специальные алгоритмы сжатия. Убедитесь, что игровой движок интерпретирует изображение как карту нормалей (обычно это можно сделать, выбрав опцию ассета текстуры, пометив его как карту нормалей), и параметры сжатия будут настроены автоматически.
Проблема: на отдельных частях модели заметны пиксели
Очевидным решением будет увеличение UV-«острова» (island) этой части модели или использование более крупных текстур, но давайте рассмотрим и менее очевидные решения:
- Запекайте с удвоенным разрешением карты нормалей, а затем уменьшайте размер изображения: если вы используете текстуру 512×512, то запекайте карту нормалей с разрешением 1024×1024, а затем преобразуйте изображение в 512×512. Благодаря этому каждый пиксель окончательной текстуры будет получать информацию от четырёх пикселей, создавая своего рода «сглаживание» (antialiasing) и снижая пикселизацию. Это также справедливо и для других запечённых изображений; кроме того, стоит сохранять версии текстур высокого разрешения на случай, если позже вам захочется увеличить детали в некоторых областях.
Заметьте, на этом изображении карты нормалей имеют одинаковое разрешение, но та, которую мы запекли с разрешением 1024, выглядит более сглаженной и похожей на highpoly, потому что в процессе уменьшения она сохранила в себе дополнительную информацию.
- Можно накладывать UV islands друг на друга, чтобы они использовали одинаковую информацию карты нормалей на разных частях модели. Просто переместите одну сторону модели на 1 единицу за наружу UV-пространства, чтобы программа запекания не пыталась получить детали с обеих сторон одновременно.
Можно пойти ещё дальше и использовать в некоторых деталях trim-текстуры или декали для оптимизации использования текстур.
- Текстуры используют сетку пикселей, а пиксели квадратны. Если какие-то детали образуют линию, попробуйте выровнять эту линию горизонтально или вертикально. Благодаря этому выровняются сетка пикселей и детали текстуры:
Проблема: моя модель симметрична, но с разных сторон карта нормалей отличается.
При применении к модели симметрии направления нормалей могут измениться из-за того, что изменился способ соединения граней. Иногда это означает, что можно получить шов прямо по центру модели. Чтобы избежать этого, сделайте так, чтобы нормали lowpoly в самом центре были выровнены, и при необходимости настройте сглаживание.
Ещё одна возможная причина — триангуляция: при импорте моделей в игровой движок они всегда триангулируются и иногда этот процесс может изменить нормали lowpoly, а по диагоналям граней lowpoly могут появиться артефакты. Чтобы избежать этого, триангулируйте модель перед запеканием, запеките карту нормалей, а затем примените модификатор симметрии.
Кроме того, вы можете изучить небольшой туториал Earthquake, который помог мне немного больше понять нормали вершин и карты нормалей.
Дополнительную информацию о картах нормалей можно узнать из wiki сайта Polycount.
Мы уже разобрались с теорией и терминологией, поговорили о типах карт нормалей и их различиях. Сегодня ты узнаешь, как подготовить модель к запеканию normal map, избегая типичных ошибок.
Хард-софт эджи
Hard Edge — жесткая грань между двумя плоскостями. В 3ds Max используется подход Smoothing Groups. Для создания жесткого эджа достаточно назначить на плоскости разные группы сглаживания.
Soft edge — гладкая грань. Чтобы создать ее в 3ds Max, на плоскости нужно назначить одинаковые группы сглаживания.
Чтобы грани запеклись как надо, пользуйся правилом «Hard edge — UV seam»: для каждой жесткой грани лоуполи модели нужно создавать шов на UV. Иначе детали и грани запекутся некорректно.
Важно! Это не значит, что UV швы нельзя делать и в других местах. Технически, их можно расположить где угодно, лишь бы на финальном ассете они не были заметны.
Градиенты
Градиенты на 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$
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
$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$
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
$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
- Вперед
Автор |
Сообщение |
|
---|---|---|
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
-
из 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-карты
- Открыть или показать окно настроек набора текстур: …
- В окне настроек набора текстур нажмите кнопку Bake Mesh Maps, чтобы открыть окно настроек Baker:
- Нажмите кнопку 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-модели, то потеряете контроль над картой нормалей.
Плохая корреляция карт нормалей
Чтобы контролировать сглаживание lowpoly-модели, нам нужны разделённые (split) нормали вершин (для создания жёстких рёбер) или усреднённые (averaged) нормали вершин (для создания гладких рёбер).
Как оказалось, не все 3D-программы используют для усреднения нормалей вершин одинаковые вычисления. Это значит, что в разных 3D-редакторах lowpoly-модель будет выглядеть иначе, а её нормали вершин будут указывать немного в разных направлениях. Обычно это не представляет большой проблемы, потому что эти отклонения очень малы, но они влияют на внешний вид модели; и эти различия усиливаются при использовании карт нормалей, потому что карты нормалей изменяют нормали lowpoly-модели, которые в разных программах различаются.
Индустрия 3D-графики работает над устранением этой проблемы; недавно появился стандарт под названием Mikk space. Это метод вычисления нормалей вершин, который могут использовать все 3D-приложения, чтобы нормали вершин во всех 3D-программах выглядели одинаково. Однако нужно учесть, что пока его используют не все 3D-приложения.
Ещё один способ снижения этого влияния заключается в том, чтобы не очень сильно полагаться на карты нормалей при запекании. Попробуйте сделать так, чтобы lowpoly-модель больше напоминала highpoly-модель и используйте больше жёстких рёбер на плоских поверхностях. В таком случае карте нормалей не придётся выполнять всю работу и небольшие отклонения станут менее заметными.
Скос деталей карт нормалей
Когда компьютер усредняет направление нормали у нормалей вершин lowpoly-модели, большие изменения в углах поверхности могут «скосить» нормали lowpoly-модели и они больше не будут перпендикулярными поверхности lowpoly.
Your browser does not support HTML5 video.
Так как программа запекания нормалей при поиске деталей highpoly использует направления нормалей lowpoly, то если эти направления будут скошенными, то они будут выглядеть скошенными на карте нормалей:
Это очень распространённая проблема, для которой найдено несколько решений. Идеального решения нет, всё зависит от геометрии.
1. В некоторых 3D-программах запекания существует опция повторного запекания (rebaking) этих частей с временным изменением нормалей lowpoly, чтобы они запекались без скоса. Например, такая опция есть в Marmoset Toolbag. Пользователь Reddit под ником Tanagashi любезно объяснил мне, что некоторые программы наподобие xNormal могут тесселировать lowpoly, чтобы добавить новые вершины и сделать нормали перпендикулярными к поверхности lowpoly, запекать карту нормалей в пространстве объекта, а затем преобразовывать её в касательное пространство на основании исходных нормалей lowpoly. С помощью новой карты нормалей программа может создавать маски для управления тем, где использовать исходную карту нормалей, а где созданную из тесселированной lowpoly-модели.
2. Добавление вершин сделает переход между нормалями вершин менее скошенным, потому что один угол в 90º будет разделён на несколько меньших градусов, делая второй переход менее скошенным. Очевидно, что это увеличивает количество полигонов, и поскольку вы добавляете геометрию, я рекомендую использовать эти дополнения для создания более интересного силуэта модели.
3. Разделение усреднённых нормалей вершин (делая ребро жёстким/используя отдельные smoothing groups): таким образом, каждая вершина будет иметь несколько нормалей, каждая из которых перпендикулярна к поверхности lowpoly. Не забывайте, что когда 3D-программа имеет разделённую нормаль вершины, то она на самом деле создаёт дубликат вершины, увеличивая таким образом количество вершин и немного снижая производительность. Кроме того, как мы увидим позже, жёсткие рёбра создают проблему «чёрных рёбер».
4. Можно изменять нормали моделей, чтобы изгибать нормали lowpoly, чтобы они были перпендикулярными нормалям highpoly. Помните, что не все программы позволяют использовать изменённые нормали (в Zbrush есть только усреднённые нормали, файлы OBJ и устаревшие FBX не содержат специальной информации о нормалях). По сути, существует два способа изменения нормалей:
- Взвешенные нормали (Weighted normals): это автоматический метод, похожий на усреднённые нормали вершин. Идея заключается в том, что при усреднении нормалей вершин не все грани должны иметь одинаковую силу: крупные грани «притягивают» к себе нормали вершин сильнее, чем мелкие грани. Благодаря этому крупные грани, которые обычно важнее, будут иметь более качественное проецирование деталей. Особенно хорошо это работает с highpoly-панелями.
- Собственные нормали (Custom normals): при помощи инструментов из 3D-редактора мы можем изгибать нормали lowpoly. Это относительно новая идея, для реализации которой не существует стандартизированных инструментов. Помните, что изгибание нормалей может создавать очень странное нежелательное затенение в других частях модели, поэтому эта техника обычно комбинируется с фасками (bevels). Некоторые люди называют эту технику «midpoly-моделированием».
Cage/baking distance
По умолчанию, испускаемые с поверхности lowpoly лучи проходят ограниченное расстояние, чтобы lowpoly не получала информацию о нормалях от далёких частей highpoly. Это расстояние обычно называется «frontal/rear distance», потому что лучи могут испускаться по направлению внутрь, наружу, или в обоих направлениях. На рисунке ниже это расстояние показано красным:
Некоторые 3D-приложения (например, 3ds Max) также позволяют использовать «клетку» (cage). Cage — это «копия» lowpoly-модели, которую можно модифицировать таким образом, чтобы она идеально заключала в себе highpoly. Также в некоторых случаях (не всегда) она позволяет нам менять направление лучей, не изменяя при этом исходные нормали вершин lowpoly. Это может помочь получит наилучшие граничные случаи запекания и избежать скосов; однако нужно помнить, что мы запекаем, используя не направление вершин нормалей, но в конечном итоге применим карту нормалей для изменения истинных нормалей lowpoly, поэтому результат может выглядеть странно.
Швы на рёбрах
Как мы видели, если имеется модель с жёсткими рёбрами (некоторые рёбра имеют больше одной smoothing group, или некоторые рёбра помечены как «hard»), то программа запекания разделяет нормаль вершин между двумя гранями. У этой операции есть хорошие и плохие стороны.
Хорошо в ней то, что нормали не усредняются, поэтому присутствует меньше искажений нормалей: нормали вершин полностью перпендикулярны к поверхности lowpoly. Также это может сделать lowpoly более красивой, если у неё есть грани под резкими углами, более подходящими для жёстких рёбер.
Плохо то, что теперь между нормалями существует пробел, и это может означать, что мы можем потерять информацию, если lowpoly имеет пробел в нормалях там, где она не может получить деталей highpoly. Более того, некоторые части проекции lowpoly могут пересекаться и конкурировать за одно UV-пространство. Оба эффекта создают шов вдоль ребра, заметность которого зависит от движка.
Однако этого можно легко избежать при помощи простого трюка: если две грани разделены жёстким ребром, то нужно поместить каждую грань на отдельный UV-остров, оставив между ними пространство. Чтобы снизить влияние проблемы разделённых нормалей, программы запекания пытаются немного дополнительной информации за пределами вершин нормалей, но для этого им требуется на текстуре дополнительное пространство. Если грани, разделённые жёстким ребром, соединены в UV, то для сохранения этой дополнительной информации на текстуре не будет места.
Заключение
Подготовив lowpoly-модель и сделав её как можно ближе к highpoly-модели, я начинаю работать над сглаживанием перед UV. Я задаю сглаживание для lowpoly (если объект органический, то я начинаю с полностью сглаженной модели, если он имеет твёрдую поверхность, то я задаю угол сглаживания в пределах 30-60º и настраиваю сглаживание, пока результат не будет выглядеть хорошо).
Подготовив сглаживание модели, я начинаю работать над UV, разделяя все жёсткие рёбра на отдельные UV-острова (чтобы избежать швов на рёбрах).
Если возникают ошибки со скосами, то я добавляю дополнительные рёбра (обычно я делаю фаски (bevel), чтобы сохранить округлость силуэта). Это срабатывает для большинства моих моделей, но я могу исправлять ошибки со скосами, если использую для запекания Marmoset Toolbag, или применяя собственные/взвешенные нормали.
При наличии ошибок проецирования я изменяю baking distance/cage, модифицирую lopoly/highpoly, чтобы они лучше подходили для запекания, или удаляю карты нормалей на отдельных очень жёстких частях, например, на концах конусов.
Следующая статья будет инструкцией по устранению проблем с запеканием карт нормалей и обсуждением наиболее часто встречающихся проблем и решений.
Карты нормалей — это тип карты рельефа. Это особый тип текстуры, который позволяет добавлять детали поверхности, такие как неровности, канавки и царапины, к модели, которая отражает свет, как будто они представлены реальной геометрией.
Например, вы можете захотеть показать поверхность с канавками и винтами или заклепками на поверхности, например корпус самолета. Один из способов сделать это — смоделировать эти детали как геометрию, как показано ниже.
В зависимости от ситуации обычно не рекомендуется моделировать такие мелкие детали как «настоящую» геометрию. Справа вы видите многоугольники, необходимые для создания детали одной головки винта. Для большой модели с большим количеством мелких деталей поверхности потребовалось бы отрисовывать очень большое количество полигонов. Чтобы избежать этого, мы должны использовать карту нормалей для представления мелких деталей поверхности и полигональную поверхность с более низким разрешением для большей формы модели.
Если вместо этого мы представим эту деталь с помощью карты рельефа, геометрия поверхности может стать намного проще, а деталь будет представлена в виде текстуры, которая модулирует отражение света от поверхности. Это то, что современное графическое оборудование может делать очень быстро. Ваша металлическая поверхность теперь может быть плоской низкополигональной плоскостью, а винты, заклепки, канавки и царапины будут отражать свет и казаться объемными из-за текстуры.
В современных конвейерах разработки игр художники будут использовать свои приложения для 3D-моделирования для создания карт нормалей на основе исходных моделей с очень высоким разрешением. Затем карты нормалей сопоставляются с готовой к игре версией модели с более низким разрешением, так что исходные детали с высоким разрешением визуализируются с использованием карты нормалей.
Рефленое наложение — это относительно старый графический метод, но он по-прежнему является одним из основных методов, необходимых для создания детализированной реалистичной графики в реальном времени. Карты рельефа также часто называют картами нормалей или картами высот, однако эти термины имеют немного разные значения, которые будут объяснены ниже.
Что такое нормали поверхности?
Чтобы действительно объяснить, как работает карта нормалей, мы сначала опишем, что такое «нормаль» и как она используется в освещении в реальном времени. Возможно, самым простым примером будет модель, в которой каждый многоугольник поверхности освещается просто в соответствии с углами поверхности относительно источника света. Угол поверхности можно представить в виде линии, выступающей в перпендикулярном направлении от поверхности, и это направление (которое является вектором) относительно поверхности называется «нормалью к поверхности» или просто нормально.
На изображении выше левый цилиндр имеет базовое плоское затенение, и каждый многоугольник затенен в соответствии с его относительным углом к источнику света. Освещение на каждом полигоне постоянно по всей площади полигона, потому что поверхность плоская. Вот те же два цилиндра с их каркасной сеткойосновным графическим примитивом Unity. Меши составляют большую часть ваших 3D-миров. Unity поддерживает триангулированные или четырехугольные полигональные сетки. Поверхности Nurbs, Nurms, Subdiv должны быть преобразованы в полигоны. More info
See in Словарь visible:
Модель справа имеет то же количество полигонов, что и модель слева, однако затенение кажется гладким — освещение, пересекающее полигоны, создает впечатление изогнутой поверхности. Почему это? Причина в том, что нормаль к поверхности в каждой точке, используемой для отражения света, постепенно меняется по ширине многоугольника, так что для любой заданной точки на поверхности свет отражается как если бы эта поверхность был изогнут, а не плоским постоянным многоугольником, каким он является на самом деле.
В виде 2D-диаграммы три полигона поверхности вокруг внешней стороны заштрихованного цилиндра будут выглядеть следующим образом:
Нормали поверхности представлены оранжевыми стрелками. Это значения, используемые для расчета того, как свет отражается от поверхности, поэтому вы можете видеть, что свет будет реагировать одинаково по длине каждого полигона, потому что нормали поверхности указывают в одном направлении. Это дает «плоское затенение» и является причиной того, что полигоны левого цилиндра имеют четкие края.
Однако для гладкого заштрихованного цилиндра нормали поверхности плоских многоугольников различаются, как показано здесь:
Направления нормалей на плоской поверхности многоугольника постепенно меняются, так что затенение поверхности создает впечатление плавной кривой (как показано зеленой линией). Это не влияет на реальную полигональную природу сетки, а только на то, как рассчитывается освещение на плоских поверхностях. Эта кажущаяся изогнутая поверхность на самом деле отсутствует, и просмотр граней под углами взгляда покажет истинную природу плоских многоугольников, однако с большинства углов обзора цилиндр выглядит как гладкая изогнутая поверхность.
При использовании этого базового плавного затенения данные, определяющие направление нормали, фактически сохраняются только для каждой вершины, поэтому изменяющиеся значения по всей поверхности интерполируются от одной вершины к другой. На диаграмме выше красные стрелки указывают сохраненное направление нормали в каждой вершине, а оранжевые стрелки указывают примеры интерполированных направлений нормали по площади многоугольника.
Что такое сопоставление нормалей?
Планирование нормалей продвигает эту модификацию нормалей поверхности на один шаг вперед, используя текстуру для хранения информации о том, как изменять нормали поверхности по всей модели. Карта нормалей — это текстура изображения, наложенная на поверхность модели, похожая на обычные цветные текстуры, однако каждый пиксельнаименьшая единица в компьютерном изображении. Размер пикселя зависит от разрешения вашего экрана. Пиксельное освещение рассчитывается для каждого пикселя экрана. Подробнее
См. в Словарь в текстуре карты нормалей (называемой texel) представляет собой отклонение направления нормали к поверхности от «истинной» нормали к поверхности плоского (или сглаженного интерполированного) многоугольника.
На этой диаграмме, которая снова представляет собой 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), который находится «вверху» для целей сопоставления нормалей и не представляет собой изменение поверхности модели. Это цвет, который вы видите в плоских областях «примерной» карты нормалей ранее на этой странице.
Значение (0,43, 0,91, 0,80) дает вектор (–0,14, 0,82, 0,6), что представляет собой довольно крутую модификацию поверхности. Подобные цвета можно увидеть в ярко-голубых областях карты нормалей каменной стены в верхней части некоторых краев камня. В результате эти грани улавливают свет под совсем другим углом, чем более плоские поверхности камней.
Карты нормалей
Как импортировать и использовать карты нормалей и карт высот
Карту нормалей можно импортировать, как обычно, поместив файл текстуры в папку ресурсов. Однако вам нужно сообщить Unity, что эта текстура является картой нормалей. Это можно сделать, изменив параметр «Тип текстуры» на «Карта нормалей» в инспектореокна Unity, в котором отображается информация о текущем выбранном игровом объекте, активе или настройках проекта, что позволяет вам проверять и редактировать значения. More info
See in Словарь settings.
Чтобы импортировать черно-белую карту высоттекстуру в оттенках серого, в которой хранятся данные о высоте объекта. Каждый пиксель хранит разницу высот перпендикулярно лицу, которое представляет пиксель.
Посмотрите в Словарь как на карту нормалей, процесс почти идентичен, за исключением того, что вы необходимо установить флажок «Создать из оттенков серого».
Если выбран параметр «Создать из оттенков серого», в инспекторе появится ползунок Bumpiness. Вы можете использовать это, чтобы контролировать, насколько крутыми являются углы в карте нормалей при преобразовании из высот в вашей карте высот. Низкое значение шероховатости будет означать, что даже резкий контраст на карте высот будет преобразован в плавные углы и неровности. Высокое значение создаст преувеличенные выпуклости и очень контрастные реакции освещения на неровности.
После того как у вас есть карта нормалей в ваших ресурсах, вы можете поместить ее в слот карты нормалей вашего материала в инспекторе. В стандартном шейдере есть слот карты нормалей, и многие из старых устаревших шейдеров также поддерживают карты нормалей.
Если вы импортировали карту нормалей или карту высот и не пометили ее как карту нормалей (выбрав Тип текстуры: Карта нормалей, как описано выше), инспектор материалов предупредит вас об этом и предложит исправить это так:
Нажатие кнопки «Исправить сейчас» имеет тот же эффект, что и выбор Тип текстуры: карта нормалей в настройках инспектора текстур. Это будет работать, если ваша текстура действительно является картой нормалей. Однако, если это карта высот в оттенках серого, она не обнаружит это автоматически, поэтому для карт высот вы всегда должны выбирать параметр «Создать из оттенков серого» в окне инспектора текстуры.
Вторичные карты нормалей
Вы также можете заметить, что внизу в инспекторе материалов для стандартного шейдера есть второй слот карты нормалей. Это позволяет вам использовать дополнительную карту нормалей для создания дополнительных деталей. Вы можете добавить карту нормалей в этот слот так же, как и в обычный слот карты нормалей, но цель здесь состоит в том, чтобы вы использовали другой масштаб или частоту тайлинга, чтобы две карты нормалей вместе давали высокий уровень детализацииТехника Уровень детализации (LOD) – это оптимизация, которая уменьшает количество треугольников, которые Unity должна обрабатывать. визуализировать для GameObject, когда его расстояние от камеры увеличивается. Подробнее
См. в Словарь в разных масштабах. Например, ваша обычная карта нормалей может определять детали облицовки стен или транспортных средств с канавками для краев панелей. Вторичная карта нормалей может обеспечить очень точную детализацию выпуклостей для царапин и износа на поверхности, которая может быть мозаичной в 5-10 раз больше масштаба базовой карты нормалей. Эти детали могут быть настолько мелкими, что их можно увидеть только при внимательном рассмотрении. Чтобы иметь такое количество деталей на базовой карте нормалей, потребуется, чтобы базовая карта нормалей была невероятно большой, однако, комбинируя две карты разных масштабов, можно достичь высокого общего уровня детализации с двумя относительно небольшими текстурами карты нормалей.