зачем нужна карта нормалей

Это норма — 3: типы карт нормалей

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

Карта нормалей касательного пространства (Tangent space normal map): самый распространённый сегодня тип карт нормалей; именно о нём мы говорили в предыдущих статьях. Он модифицирует направление нормалей модели на основании направления нормалей её вершин (то есть нам нужно контролировать нормали вершин lowpoly-модели).

зачем нужна карта нормалей. 8620ac5aaca576891aaa13188c1d3a75. зачем нужна карта нормалей фото. зачем нужна карта нормалей-8620ac5aaca576891aaa13188c1d3a75. картинка зачем нужна карта нормалей. картинка 8620ac5aaca576891aaa13188c1d3a75.

Карта нормалей касательного пространства Mikk (Mikk tangent space normal map). Не все 3D-редакторы вычисляют среднее нормалей вершин одинаково. Это приводит к тому, что в разных движках внешний вид карт нормалей отличается, поэтому нам нужно запекать карту нормалей при помощи того же способа, который использует программа рендеринга (это называется «использовать синхронизированный рабочий процесс (synched workflow)»)

Mikk предложил способ вычисления нормалей вершин, который должен был стать универсальным, чтобы все программы вычисляли их одинаково. С точки зрения рабочего процесса это означает, что можно использовать низкополигональную модель (lowpoly) со всеми её усреднёнными нормалями (с одной группой сглаживания (smoothing group) или со сглаживанием всех граней), запечь карту нормалей в касательном пространстве Mikk, и это будет выглядеть точно так же, как высокополигональная модель (highpoly), без необходимости устранения ошибок сглаживания или отделения жёстких граней в UV. В будущем я напишу туториал о том, как это делается.

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

зачем нужна карта нормалей. image loader. зачем нужна карта нормалей фото. зачем нужна карта нормалей-image loader. картинка зачем нужна карта нормалей. картинка image loader.

Двухканальная карта нормалей касательного пространства (2-channel tangent space normal map): оказывается, что при помощи информации, хранящейся в двух из трёх каналов карты нормалей, компьютер может вычислить третий, снизив занимаемый объём памяти ценой увеличения количества вычислений. Так как обычно в большем дефиците находится память, такая оптимизация используется часто и некоторые движки выполняют её автоматически (например, Unreal Engine, когда мы устанавливаем для сжатия нормалей текстуры параметр «normal map»). Освободив один канал карты нормалей, мы можем уменьшить размер текстуры или использовать этот канал для metalness/roughness/opacity…

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

зачем нужна карта нормалей. 8057f667375cac84c5838caf29d9d5ef. зачем нужна карта нормалей фото. зачем нужна карта нормалей-8057f667375cac84c5838caf29d9d5ef. картинка зачем нужна карта нормалей. картинка 8057f667375cac84c5838caf29d9d5ef.

Карта нормалей мирового пространства (World space normal map): эта карта нормалей вместо того, чтобы модифицировать направление нормалей вершин, полностью их игнорирует и меняет способ отражения света lowpoly-моделью в мировом пространстве (world space) (при запекании она считает, что нормали вершин параллельны осям мира).

Можно сказать, что карта нормалей касательного пространства сообщает модели «ты должна отразить свет вправо», а карта нормалей мирового пространства — «ты должна отразить свет на восток».

зачем нужна карта нормалей. 722f07479fc336a72c697cf215f590d6. зачем нужна карта нормалей фото. зачем нужна карта нормалей-722f07479fc336a72c697cf215f590d6. картинка зачем нужна карта нормалей. картинка 722f07479fc336a72c697cf215f590d6.

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

зачем нужна карта нормалей. 2721a072e67f8ebbebc213c77cba9000. зачем нужна карта нормалей фото. зачем нужна карта нормалей-2721a072e67f8ebbebc213c77cba9000. картинка зачем нужна карта нормалей. картинка 2721a072e67f8ebbebc213c77cba9000.

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

Стоит также помнить, что мировые координаты в разных приложениях реализованы по-разному: в Unreal, 3D Studio Max, Blender вверх направлена ось Z, а в Maya, Modo и Cinema4D — ось Y. Это значит, что при переносе между приложениями карты нормалей мирового пространства могут портиться.

Карта нормалей пространства объекта (Object space normal map): это улучшенная версия предыдущего типа карт, и она очень на него похожа. Идея заключается в том, что при перемещении модели в мире её карта нормалей мирового пространства должна переориентироваться относительно объекта.

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

Наклонные карты нормалей (Bent normal maps): по сути, в них сочетается информация AO и карты нормалей, наклоняющая направления нормалей так, чтобы свет стремился отражаться к тем частям модели, на которые попадает свет.

Такие карты используются для улучшения Ambient Oclussion и чтобы избежать эффекта под названием «утечка света» (light leaking), при котором модель может отражать свет теми частями, которых он не может достичь. Лично я никогда ими не пользовался, но исследовал бы их возможности, если бы столкнулся с заметной «утечкой света». Более подробную информацию можно найти здесь, здесь и здесь.

16-битные карты нормалей (16 bit normal maps): иногда, когда на карте нормалей присутствует очень плавный градиент, мы можем замечать появление полос. Эти полосы возникают из-за нехватки цветов для представления плавного градиента, обычно вызванной сжатием текстур.

Узнать больше о 16-битных картах нормалей можно у самого бога туториалов — Earthquake.

зачем нужна карта нормалей. 0aa3dca55bf9928f7366d2313f63f36b. зачем нужна карта нормалей фото. зачем нужна карта нормалей-0aa3dca55bf9928f7366d2313f63f36b. картинка зачем нужна карта нормалей. картинка 0aa3dca55bf9928f7366d2313f63f36b.

зачем нужна карта нормалей. 540d263d61737ce8b11fd5ae6cd32a6d. зачем нужна карта нормалей фото. зачем нужна карта нормалей-540d263d61737ce8b11fd5ae6cd32a6d. картинка зачем нужна карта нормалей. картинка 540d263d61737ce8b11fd5ae6cd32a6d.

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

Так какой же из типов мы должны использовать?

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

Следует запекать карту нормалей в том же касательном пространстве, что и в программе рендеринга. Наиболее распространённое касательное пространство — это Mikk, так что по возможности используйте его.

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

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

Благодарю за прочтение, надеюсь, статья была вам полезна. Спасибо Shnya за комментарии и помощь.

Источник

В чем разница между bump, normal и displacement?

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

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

зачем нужна карта нормалей. 3D papa bump displacement 01. зачем нужна карта нормалей фото. зачем нужна карта нормалей-3D papa bump displacement 01. картинка зачем нужна карта нормалей. картинка 3D papa bump displacement 01.

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

зачем нужна карта нормалей. 3D papa bump displacement 02. зачем нужна карта нормалей фото. зачем нужна карта нормалей-3D papa bump displacement 02. картинка зачем нужна карта нормалей. картинка 3D papa bump displacement 02.

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

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

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

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

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

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

зачем нужна карта нормалей. 3D papa bump displacement 03. зачем нужна карта нормалей фото. зачем нужна карта нормалей-3D papa bump displacement 03. картинка зачем нужна карта нормалей. картинка 3D papa bump displacement 03.

Что такое карты 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 в этом правиле есть исключение. И касается оно мобильного геймдева, поскольку аппаратные средства начали «понимать» карты нормалей сравнительно недавно.

зачем нужна карта нормалей. 3D papa bump displacement 04. зачем нужна карта нормалей фото. зачем нужна карта нормалей-3D papa bump displacement 04. картинка зачем нужна карта нормалей. картинка 3D papa bump displacement 04.

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

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

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

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

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

зачем нужна карта нормалей. 3D papa bump displacement 05. зачем нужна карта нормалей фото. зачем нужна карта нормалей-3D papa bump displacement 05. картинка зачем нужна карта нормалей. картинка 3D papa bump displacement 05.

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

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

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

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

Источник

Почему игры используют карты нормалей?

Балансировка между качеством и производительностью

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

Для обеспечения плавной работы игры необходимы модели с низким уровнем полигонов.

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

Итак, как же найти компромисс между высокой производительностью игры и реалистичными визуальными эффектами?

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

Имитация геометрии с помощью текстур

Как это работает? Карты нормалей (Normal maps) и карты смещения (Displacement maps) представляют собой особые виды текстур, которые влияют на то, как ведет себя свет при попадании на поверхность. Они создают иллюзию глубины, сообщая лучу света отскакивать от имитационных особенностей поверхности, даже если на самом деле их там нет.
зачем нужна карта нормалей. normal maps 2. зачем нужна карта нормалей фото. зачем нужна карта нормалей-normal maps 2. картинка зачем нужна карта нормалей. картинка normal maps 2.
Это позволяет нам достичь высокого уровня детализации, не обременяя игровой движок сложной геометрией. Звучит слишком хорошо, чтобы быть правдой? Имейте в виду, что есть некоторые ограничения для данной техники.

Карты нормалей VS карты высот

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

Наиболее очевидное различие заключается в том, что карты высот создаются лишь в оттенках серого, потому что они отображают только разницу высот. Черный (0) — «вниз», белый (1) — «вверх», а 0.5 означает отсутствие изменения высоты.

Существует несколько различных типов карт высот, с которыми вы, возможно, уже знакомы.

Bump maps — это способ старой школы для добавления деталей к низкополигональным объектам. Они используются так же, как и обычные карты, за исключением того, что они содержат только информацию о высоте, а не информацию об угле.
зачем нужна карта нормалей. normal maps 3. зачем нужна карта нормалей фото. зачем нужна карта нормалей-normal maps 3. картинка зачем нужна карта нормалей. картинка normal maps 3.
Displacement maps иногда используются для изменения местоположения фактических вершин объекта. Такое перемещение не добавляет никаких дополнительных деталей. Вместо этого оно используется для создания более сложных объектов. Часто подобным способом генерируется рельеф мира с использованием карт смещения.

Еще карты смещения используются для отображения параллакса (так называемое виртуальное отображение смещения), что является более сложной техникой, в которой игровой движок пытается смещать координаты текстуры относительно камеры. Это довольно ресурсозатратно, но может давать хорошие результаты.
зачем нужна карта нормалей. normal maps 4. зачем нужна карта нормалей фото. зачем нужна карта нормалей-normal maps 4. картинка зачем нужна карта нормалей. картинка normal maps 4.
Normal Maps не содержат информации о высоте. Вместо этого они содержат информацию о углах. Они цветные, потому что значения RGB сообщают рендеру, в каком направлении идет наклон, и насколько он крут.
зачем нужна карта нормалей. normal maps 5. зачем нужна карта нормалей фото. зачем нужна карта нормалей-normal maps 5. картинка зачем нужна карта нормалей. картинка normal maps 5.
Наиболее важным преимуществом этого является то, что мы можем использовать информацию об угле для того, чтобы искусственно сгибать края соседних граней друг к другу, тем самым имитируя эффект фаски. Это невозможно сделать только с информацией о высоте, потому что рендер не может знать, в каком направлении должны быть согнуты края.

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

Вы вряд ли заметите фактическую толщину края в игре, но вы можете заметить тот факт, что, по крайней мере, некоторое количество света должно находится на этих областях.
зачем нужна карта нормалей. normal maps 6. зачем нужна карта нормалей фото. зачем нужна карта нормалей-normal maps 6. картинка зачем нужна карта нормалей. картинка normal maps 6.
Помимо того, что свет на углах выглядит более естественным, этот блеск помогает передать форму объекта, особенно если смотреть на него с расстояния. Так как многие игровые объекты отображаются на экране довольно мелкими, художники часто преувеличивают углы объектов, чтобы помочь игроку увидеть все четко или подчеркнуть важные объекты.

3 типа карт нормалей

Существует три типа карт нормалей, которые дают идентичный результат, но вычисляются немного по-разному.
зачем нужна карта нормалей. normal maps 7. зачем нужна карта нормалей фото. зачем нужна карта нормалей-normal maps 7. картинка зачем нужна карта нормалей. картинка normal maps 7.
Tangent space (касательное пространство)
Как следует из названия, карты нормалей касательного пространства основаны на касательном направлении каждой грани. Эти карты всегда состоят из комбинации трех цветов.

Object space (объектное пространство)
Карты нормалей пространства объектов основаны на всем объекте, а не на его индивидуальных гранях. Такие карты немного быстрее вычисляются графическими картами, но у них есть некоторые недостатки.

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

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

Заключение

Наиболее распространенным типом карт нормалей являются карты касательного пространства, поскольку они наиболее гибки. Но полезно понимать и другие типы, чтобы вы могли использовать их, если это будет необходимо. Для углубленного изучения карт нормалей и того, как моделировать объекты с их использованием и запекать данные карты, посмотрите курс «Введение в моделирование с использованием карт нормалей».
зачем нужна карта нормалей. normal maps 8. зачем нужна карта нормалей фото. зачем нужна карта нормалей-normal maps 8. картинка зачем нужна карта нормалей. картинка normal maps 8.

Источник

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

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

Оглавление:

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

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

Возможности и ограничения КН

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

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

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

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

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

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

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

Типы КН

World space, Object space, Tangent space. Типы отличаются в зависимости от координатной системы в которой зашифрованы нормали.

World Space

World Space КН очень похожи на Object Space, с различием в том, что они используют X, Y и Z мира (мировых координат) как свои. World Space радужные на вид. Т.к. карта зависит от мировых координат, художник не имеет возможности вращать модель, т.к. при этом разрушается освещение модели. Поэтому World Space можно использовать только для статичных объектов. Как и Object, Space World Space не могут иметь тайловую текстуру. (нужны оригинальные координаты)
В World space каждый пиксель текстуры отражает определенный угол в мире. Карта не редактируют нормали low poly а полностью переписывают их. (позволяет хорошо сгладить модель приближая её вид к хай поли)

Object Space КН

Object Space КН используют ориентацию модели как свои X, Y, and Z. Y наиболее часто используется как направленность «вверх», тогда как X – «слева», а Z – направление в котором направлена модель. На вид эти карты радужные т.к. они отображает нормали которые направлены в разные стороны (вместо 180градусов Tangent Space). Object Space могут использоваться для (жестких) вращающихся моделей и не могут иметь тайловую текстуру. (нужны оригинальные координаты)
В Object space каждый пиксель текстуры отражает определенный угол в мире, относительно pivot объекта. (если вращать объект угол будет вращаться с ним)

Tangent Space КН

Tangent Space КН используют текстурное координатное пространство, так что X и Y являются U и V текстурных координат, а Z нормаль поверхности. Эти карты большей мерой светло синие(127,127,255) т.к. синий канал отображает направление полигонов поверхности модели. red (X) и green (Y) каналы смещают это направление.
Tangent space каждый пиксель текстуры отражает нормали относительно нормалей низкополигональной модели. Карта редактируют нормали low poly.
Глядя на Tangent Space КН можно примерно определить, что в ней закодировано: светло-голубые пиксели (R 127, G 127, B 255) отображают нормали поверхности, направленные «спереди» (прямо из экрана). Розовые пиксели – нормали направленные направо. Зеленые – вверх. Фиолетовые – вниз. И темно синие\зеленые налево.

Алгоритмы создания КН

Для создание World space, Object space существует только один алгоритм создания карты. (исключая flip channels) Tangent Space более сложные и могут создаваться несколькими путями. Отображение модели будет результатом двух операций – кодирования в КН и расшифровки КН при рендере. Идеально эти калькуляции должны быть одинаковы, иначе можно получить ошибки отображения. К сожалению, нет единого стандарта в создании Tangent Space КН, каждая программа делает это по-своему, а игровые движки рендерят по-своему.
Не всегда можно угадать эти алгоритмы и подстроить пайплайн под конкретный движок.
Например Unreal – калькуляции не подходят ни к одному 3д приложению, но существуют техники способные улучшить отображение нормалей (шейдинга) в движке. (для лучшего результата можно экспортировать модель в fbx с флажком tangents and binormals.)
Например программа – handplane

Настройки осей для запекания КН в разных программах:

Maya, Marmoset, Unity should be X+Y+Z+ & Max, UDK, CryENGINE 3 should be X+Y-Z+.

Кодирование информации

Разница между High poly и Low-poly хранится в трех цветовых составляющих изображения (красной, зеленой и голубой). Цвет каждого пикселя кодирует информацию о том, в какую сторону была ориентирована нормаль детальной модели по отношению к нормали вершины низкополигональной модели в данной точке развертки. Красная и зеленая компоненты определяют отклонение нормали вправо/влево (X) и вверх/вниз (Y) соответственно. Голубая цветовая это «глубина» (Z), по сути, является обычной картой рельефа (bump map).
Если разделить все каналы получим видимости направленного освещения:
Красный канал (Red) – модель освещена точно справа.

Зеленый канал (Green) – модель освещена точно сверху.

Синий канал (Blue) – модель освещена точно cпереди.

Tangent basis

Когда вы смотрите на tangent-space КН (например, персонажа), вы замечаете разные цвета вдоль швов UV. Это происходит потому что UV островки обычно ориентированы под разными углами на модели, необходимое зло при отображении 3д модели на 2д карте. Тело может быть – вертикальным островком, рука – горизонтальным. Это заставляет нормали КН искривиться (повернуться) для разных направленностей этих UV островков. UV изгибаются, поэтому и нормали должны быть изогнуты для компенсации. tangent basis помогает переориентировать (изогнуть) освещение когда оно попадает на local space поверхности, поэтому свет выглядит равномерным во всей поверхности модели с КН.
Когда художник тайлит tangent-space КН по ширине поверхности модели (например, ландшафт (сшитые UV)), она освещается правильно т.к. модель имеет единое направление в tangent space.
Если же модель имеет разрывы в UV координатах (швы) или КН имеет сильные направленные градиенты вдоль карты, tangent space не будет единым, и поверхности может иметь стык освещения.

Нейтральный цвет КН (Flat Color)

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

Возможности и ограничения КН

Плюсы (+)

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

КН в сочетании с затемнениями на текстуре цвета отлично передают вдавленности.

КН хорошо передают мелкие детали поверхности.

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

Минусы (-)

КН не изменяют силуэт.

КН плохо сглаживают геометрию.

КН лучше всего работают для углов в 45 градусов и меньше. (более всего критично для запекания)

Выводы:

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

Лучшая область применения КН:

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

•создание видимости рельефной поверхности.

Основные факторы влияющие на запекание КН

Это группы сглаживания (Smoothing groups), развертка (UV) и ограничивающая сетка (Cage)

Влияние сглаживания на запекание карт

Запекание КН зависит от сглаживания, примененного к полигонам модели. Если полигоны сглажены – и на КН не будет стыков. (это больше мерой относится к плоскостям т.к. для углы описаны ниже)

Проблема настройки групп сглаживания и UV

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

Пример 1

(1 группа сглаживания, сшитые UV)

Для наилучшего отображения в движке можно использовать Splits (разделения) как UV пространстве так и в группах сглаживания. Это нужно чтоб создавать карты нормалей с меньшим натяжением (tension).
Пример tension – видимые сильные градиенты – компенсация больших перепадов в направлении полигонов (например прямые углы куба) лоу-поли. Обычного нейтрального цвета (фиолет 128 как на фоне) на карте почти нет.

Это КН для 6 гранного куба с одной группой сглаживания.

Low poly без КН

Low poly с КН

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

Пример 2
(несколько групп сглаживания, сшитые UV)

В другом примере используется несколько групп сглаживания. (каждый полигон куба – своя группа). Рельтат тут лучше.

Как видно на карте нормалей на плоских частях модели цвет нейтральный (128 фиолет)

Но проблемы все же присутствуют: на сшитых углах модели видима черная полоска.

Решением данной проблемы в конкретном случае является добавление разрыва на UV добавление Padding.

Пример 3
(несколько групп сглаживания, все UV разорваны)

При этом UV отступают друг от друга на достаточное расстояние. (Padding не смешивается)

Вывод: если есть «разделение» в группах сглаживания, то автоматически нужно делать разделение на UV и оставлять место для Padding.
Некоторые рендеры более корректно просчитывают КН и хорошо отображаются в большинстве случаев. (3 point shader)

Пример 4
(добавление геометрии)

Основной минус – усложнение развертки UV.
Пример: 116 трис, 60 вершин.

Пример 5
Комбинация (добавление геометрии и групп сглаживания)

Более всего рекомендуется использовать комбинацию групп сглаживания и фасок геометрии. Это позволит достаточно просто развернуть UV (полосками на кубах и плоскостями на их крышках).
Пример: 60 трис, 64 вершины. (без учета SG)

Вывод: Острые углы в геометрии лучше разделять по SG и UV.

Проблема запеченной триангуляции

Если неправильно настроено сглаживание – а именно на всю модель одна группа сглаживания – при запекании КН могут запечься и проблемы триангуляции.

Жесткие грани (группы сглаживания) Их влияние на запекание КН.
Планирование UV\жестких граней

Разумно планировать жесткие грани (стыки групп сглаживания) когда создается развёртка UV. Т.к. места в которых вы бы обычно хотели иметь жесткие грани являются также и местами в которых разумно иметь шов UV. Это также позитивно влияет на финальное значение количества вершин в модели, т.к. разрыв UV и групп сглаживания находится в одном месте.
В итоге: Места, где необходим разрыв UV будут сопровождаться жесткой гранью. В местах, где располагается острый угол, но не планируется разрыва UV нужно добавить дополнительную геометрию для смягчения нормалей модели. Поэтому важно так создавать HP и LP модели избегая большого количества острых углов.

Относительно швов на UV:

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

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

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

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

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

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

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

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

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

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

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

Low poly

Low poly c КН

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

Low poly c КН

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

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

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

Вид КН


Развертка UV

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

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

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

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

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

«Discard back-faces hits»

Примеры:

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

Averaged normals

Exported normals

Difference map

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

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

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

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

Выводы:

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

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

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

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

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

Факторы:

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

Источник

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

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