Bump mapping что это

В статье мы подробно рассмотрим отличия карт bump от normal и displacement.

Вы столкнулись с трудностями при назначении карты bump на 3D-объект? Не переживайте! Многие 3D-художники, которые только начали изучать с 3D-текстурирование, испытывают сложности в этой области, не зная, какой тип карт выбрать: bump, normal и displacement.

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

Что такое карты bump

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

Обычно, карты bump – это черно-белые 8-битные изображения. И это только 256 цветов черного, серого или белого. С помощью этих значений карты bump сообщают 3D-редактору всего 2 вещи: деформировать геометрию вверх или вниз.

Когда значения карты bump близки к 50% серого, с поверхностью геометрии практически ничего не происходит. Когда изображение ярче, ближе к белому, детали выдавливаются на поверхности геометрии. Если изображение более темное, ближе к черному, детали вдавливаются в поверхность геометрии.

Карты bump отлично подходят для создания на поверхности модели мелкой детализации, например, пор или морщин на коже. Кроме того, их сравнительно легко создать в таком 2D-редакторе, как Photoshop, помня при этом, что работать нужно только с черно-белыми цветами.

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

Что такое карты normal

Карты нормалей или normal-карты – это улучшенные карты bump. Normal-карты, как и карты bump, создают фейковую детализацию, не добавляя дополнительных деталей геометрии в сцене. В результате, карты нормалей создают на поверхности модели иллюзию детализации, но эта детализация в корне отличается от той, которую создают карты bump.

Как мы уже знаем, карты bump используют черно-белые цвета, чтобы вдавливать или выдавливать поверхность геометрии. Normal-карты работают с RGB-информацией, которая точно отвечает X, Y и Z значениям в 3D-сцене. Эта RGB-информация сообщает 3D-редактору точное направление нормалей каждого полигона поверхности. Ориентация нормалей поверхности, которые часто называются просто нормалями, сообщает 3D- редактору, в какой цвет окрасить тот или иной полигон.

Normal-карты бывают двух типов и выглядят совершенно по-разному в 2D-пространстве.

Наиболее распространенным типом карт нормалей являются normal-карты типа tangent space, которые зачастую сочетают в себе лиловый и синий цвета. Этот тип карт нормалей лучше всего подходит для мешей, которые должны деформироваться при анимации. Normal-карты типа tangent space идеально подходят для персонажей. Для объектов, которые статичны и не испытывают деформаций, больше подходят карты нормалей типа object space. Эти карты окрашены в различные цвета и просчитываются немного быстрее normal-карт типа tangent space.

При использовании карт нормалей нужно понимать несколько моментов. В отличие от bump’а эти карты сложнее создать в 2D-редакторе типа Photoshop. Запекаются normal-карты с хайпольного меша на лоупольный. Однако, есть несколько путей их редактирования. Например, возможность редактирования карт нормалей представлена в MARI.

Читайте также:  Как поменять операционную систему андроид

Кроме того, normal-карты лучше других вписываются в большинство пайплайнов. Но в отличие от карт bump в этом правиле есть исключение. И касается оно мобильного геймдева, поскольку аппаратные средства начали «понимать» карты нормалей сравнительно недавно.

Что такое карты displacement

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

Карты displacement выгодно отличает то, что их можно запечь с хайпольного меша или нарисовать вручную. Карты displacement, как и карты bump, работают с черно-белыми значениями цветов. При этом с легкостью можно использовать и 8-битные карты displacement, но лучший результат можно получить с помощью 16- или 32-битных карт displacement. И, хотя, 8-битные карты displacement лучше выглядят в 2D-пространстве, в на рендере они могут вызвать странные артефакты и пр. из-за недостаточной информации.

А вот что касается времени просчета, то тут все далеко не так круто. Создание дополнительной детализации в режиме реального времени достаточно трудоемкий процесс, с которым 3D-редактор справится не быстро. Кроме того, большинство 3D-редакторов просчитывают displacement уже на рендере. По сравнению с картами bump и normal карты displacement могут серьезно сказаться на времени рендера.

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

Одновременное использование всех карт

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

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

Читайте в нашей предыдущей статье о тонкостях displacement.

Bump Mapping (произносится как бамп маппинг) — метод достижения видимости рельефа на поверхности при помощи текстурирования. Bump — рельеф, Mapping — наложение текстуры на поверхность.

Bump — это рельеф на поверхности, это неровности, шероховатости, выпуклые детали и вмятины.

Bump mapping — это метод, при помощи которого можно достичь видимость bump-а на поверхности при помощи задания очертаний Bump-а в текстуре или текстурах. Существует несколько видов Bump mapping-а:

  • EMBM (Environment map bump mapping). Рельефность, имитируемая искажением отражения или преломления. Этим способом достигается имитация волн на водной поверхности, видимость рельефа на стеклянной и отражающей поверхности.
  • Diffuse bump mapping. Рельефность, имитируемая освещением. Детали на поверхности показываются освещением, затенением в местах неровностей. Это достигается диффузным bump mapping-ом, например, имитация волновой поверхности на песке, и отражённым источником света (спекулярным bump mapping-ом), например, на железных блестящих предметах.
  • Displacement bump mapping. Рельефность, созданная дополнительно генерируемой геометрией.
  • Parallax Mapping. Рельефность, имитируемая параллаксом, то есть смещением разно удалённых частей поверхности при движении наблюдателя. Достигается смещением текстурных координат для каждого пикселя, при отрисовке поверхности.
Читайте также:  Ворона села на крышу машины

Эти методы могут совмещаться и переплетаться с другими методами наложения текстур.

Для реализации bump mapping-а используются разные типы текстур:

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

Карты нормалей, в которых хранятся нормали для соответствующих частей поверхности. Отсюда normal mapping, который является методом достижения bump mapping-а. Нормали линейным преобразованием сопоставляются с цветами. Каждая координата (x, y, z) — для соответствующего цвета (r, g, b). Относительно ровная поверхность, означает, что x и y близки к нулю, а z — к единице, поэтому в таких текстурах преобладает синий цвет с проявлением сиреневых и зелёных оттенков. Карты нормалей можно генерировать из карт высот или из сопоставления сложной геометрии с низкополигональной (polybump).

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

Что такое Bump Mapping (Бамп Маппинг)?

Пикабушник @SuperMopsek в соседнем сообществе (Вот тут) поднял интересную тему – карты нормалей в 3D графике. И даже пошагово показал процесс запекания карты нормалей средствами Blender. Но как показывает практика, такая манера подачи ясна не всем 🙂

Попробую рассказать подробнее, а так же рассказать о некоторых хитростях в использовании нормалей. Используемое ПО – 3DS Max, но принципы общие, и могут использоваться при работе в любом 3D пакете.

-Для чего?
В большинстве случаев, проще использовать некую текстуру, вместо миллионов полигонов (допустим, складочки на футболке ГГ).

– Звучит круто! А как оно работает вообще?

Простыми словами, нормаль – это перпендикуляр к поверхности. По нему движок определяет, под каким углом отражать свет. В случае карт нормалей (normal map), эта информация ложная, текстура хранит информацию о рельефе, которого нет. И плоская поверхность отражает свет так, словно на ней есть неровности. Зачастую подобного "обмана" человеку хватает, чтобы принять низкополигональную модель за что-то более детализированное:

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

Для создания панелей, заклепок и т.д. (как в примере выше) достаточно простого графического редактора и пары плагинов, но для сложных форм необходим детализированный объект-источник, как в примере у @SuperMopsek со скульптурой.

Источником может служить 3D скан, цифровая скульптура, выполненная, например, в Zbrush и т.п.

Читайте также:  Роутер asus rt n13u характеристики

– О, круто, печем нормали со всяких крутых штук на полтора полигона и получаем графон, да?

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

1. Чем дальше конкретная точка хайполи находится от лоуполи, тем сильнее искажение. Потому чем плотнее сетка приемника, тем точнее она прилегает к источнику, и тем меньше будет искажений. Но и нагружать компьютер она будет сильнее. Чтобы найти идеальный вариант, проверяйте силуэт лоуполи – включите отображение без освещения (flat color в случае 3DS Max) и покрутите лоуполи и хайполи поочередно, осматривая со всех сторон. Детали, не влияющие на силуэт, полигонами моделировать не нужно, нормалями их можно перенести с минимальными потерями.

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

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

– Минуууточку, опять упоминаешь группы сглаживания, а это что вообще такое?

А группы сглаживания – тоже результат работы нормалей. Только не текстур, а тех, что хранит сама модель. Дело в том, что каждая вершина хранит в себе информацию о том, куда отражать (vertex normals). А на участках между ними вычисляется среднее значение. Сравните:

На иллюстрации два одинаковых объекта. Но боковая поверхность первого обманывает глаз, т.к. свет отражается под усредненным углом, и в целом картина соответствует цилиндру. Правый же отражает свет вполне честно, и уже явно видно, что в основании лежит многоугольник, а не цилиндр. Такая разница тоже по причине нормалей, только теперь к вершине. Обратите внимание на то, что на левом "цилиндре" их как бы меньше. Просто значения накладывающихся вершин усредняются, если они в одной группе сглаживания, и результат сглаживается. Для работы вручную с группами сглаживания в 3DS Max в EditPoly/EditMesh выделите полигоны , которые должны быть сглажены, и назначьте им незанятую группу во вкладке Polygon Smoothing Group.

Для автоматического сглаживания примените модификатор Smooth, выберите Auto Smooth, затем в Treshold укажите угол между полигонами, начиная с которого поверхности перестают считаться сглаженными.

– А вручную эти нормали к вершинам как-нибудь крутить можно, без этого вашего "smooth"?

Можно, и даже нужно! Таким образом можно добиться поразительных результатов. Но об этом следующим постом, а то этот и так затянулся. А пока превью:

Следующий урок научит вас делать такие вот фаски без запекания, кучи полигонов и искажений от групп сглаживания. И не только этому, разумеется)

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

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

Adblock detector