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

Время на прочтение
9 мин

Количество просмотров 28K

image

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

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

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

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

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

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

image

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

image

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

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

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

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

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

    image

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

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

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

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

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

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

image

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

image

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

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

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

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

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

image

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

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

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

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

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

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

image

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

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

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

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

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

image

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

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

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

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

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

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

image

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

Решения:

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

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

    image

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

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

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

    image

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

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

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

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

    image

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

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

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

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

    image

    image

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

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

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

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

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

Hi, As many users i have recently begun seeing the bugs with the normal and height map generators. As a texture artist, i do not use the additional 3d tools in adobes toolbox but i do use these. So it is an awful shame for them to be moved behind a paywall due to their technical issues with the current photoshop build. 

For this reason i suggest you create some kind of «3d core» that is included in the Creative Cloud All Apps setup, which would include access to these generators and very, very basic tools. Who knows, having convenient access to tools of this type could help encourage creators to bridge the gap and join the substance crew as well, instead of moving on to clip studio paint and xnormals like i am probably going to have to do..

Затем проверяем, совпадают ли фаски. Для этого назначаем на low poly бликующий материал и делаем его прозрачным.

Что делать перед тем, как начать запечку

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

Нейминг

Правильный нейминг сэкономит гору времени во время работы с группами запечки — лишний мусор не будет мешать при работе. Проверяем, совпадает ли нейминг внутри группы low poly с неймингом внутри high poly.

Например:

lowpoly -> barrel
sculpt -> zbrush_barrel
highpoly -> high_barrel

Удаляем мусор

В Maya есть полезная функция File → Optimize Scene Size, которая удаляет из сцены мусор, который нигде не используется. Лишние слои, материалы и пустые группы.

Backup

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

Перед запечкой создаем отдельную папку «Bake» и сохраняем туда бэкап исходного файла до начала запечки — на всякий случай.

Подготовка сцены в Marmoset

Ставим более высокое разрешение

Прежде чем делать запечку, указываем какого размера будут карты. Ставим разрешение карт в 2 раза выше, чем будет у финальной модели. Так часто делают в продакшене, так как текстура в 2к уменьшенная до 1к и выглядит лучше, чем текстура, сделанная сразу в 1к.

Уважаемый гость, добро пожаловать на форум: CRYMOD.NET — Портал сообщества CryENGINE. Если вы здесь впервые, то, пожалуйста, прочитайте раздел Помощь. В этом разделе можно подробно ознакомится с функционалом данной системы. Что бы использовать все возможности системы, необходимо зарегистрироваться. Для этого пройдите по ссылке и узнайте подробнее о процессе регистрации.
В случае если вы уже зарегистрировались – войдите под своей учётной записью.

Инвертирование карты нормалей

Всем привет.
Наблюдение по карте нормалей. Если у вас происходит её инвертирование (должен быть выпуклый рельеф, а у вас при запекании — вогнутый), то фотошопом можно просто инвертировать каналы в её изображении и множитель нормали поменяется на противоположный. Только при экспорте в движок такая нормаль сразу после генерации автоматически не обновится (при первом экспорте из фотошопа — имеется ввиду, т.к. потом всё нормально — чтоб не пугались), поэтому надо в окне материала вырезать ссылку на путь к карте нормалей, а потом её обратно поставить. Столкнулся с инвертированием при генерации карты в xNormal, которую позавчера поставил, вот и решил написать. А так xNormal отличная прога, генерирует нормали и даже ао, плюс к фотошопу добавляются плагины конвертации карт из одной в другую.
Очень удобно. 8o


Про зеленый ты без сомнения прав. Про ndo — я его не юзал, я узал бэту ddo — вроне ниче так, понравилось. Файлы конечно создает гигантские при создании царапин, но видно, что работает, старается. Так что ndo видать тоже нормальная. Надо где-нибудь её раздобыть будет.


Похожие темы

Материал из MODFAQ.RU — моддинг игр серии S.T.A.L.K.E.R., The Elder Scrolls и Fallout

Bump mapping

Автор lafugix
Дополнил FantomICW
Тип статьи руководство
Актуальность ТЧ, ЧН, ЗП
Необходимый софт Adobe Photoshop, NVIDIA Texture Tools, X-Ray SDK

Эта статья[1] о создании правильных карт bump и bump# с помощью Adobe Photoshop и X-Ray SDK. С этими дополнительными составляющими текстурами много кто сталкивался, много кто искал пути правильного их создания. На самом деле, чтобы правильно создать бамп-карты, необходимо освоить как техническую сторону вопроса (делать, так сказать, «по науке»), так и практическую (различные методики работы в фотошопе, обработка текстуры, исправление возможных косяков и т. д.). В данной статье больше всего внимания будет уделяться именно первому пункту, ведь в любом деле лучше сначала выучить основы, а потом, в том числе, самостоятельно обучаясь, получить опыт в практике, улучшить свое мастерство.

Немного о структуре и стилистике статьи, дабы все было в дальнейшем более понятно
Многие игровые текстуры (в Сталкере — все) находятся в формате RGB. Если кто не знает, есть понятие «каналы». Их вкладка в Photoshop находится справа, «Слоев». В RGB это:

  • R — red (красный)
  • G — green (зеленый)
  • B — blue (синий)

При их «смешивании», получаем нормальную окраску изображения. В общем, указания по каналам в данной статье будут даваться в виде, как блок выше.
Иногда в RGB каналов больше (можете сами попробовать добавлять в фотошопе). В игре используется канал Альфа 1 (его еще просто «Альфой» кличут). У него есть, разумеется, свои особые функции. Итого, вот так будут выглядеть указания по каналам:

  • R — что должно быть на красном канале
  • G — что на зеленом
  • B — что на синем
  • Alpha — что на Альфе

Статья разделена на три основные части:
1. Теория. Здесь будут описаны сами карты bump и bump#, а также некоторые другие рабочие карты и элементы (не забудьте заглянуть в подраздел «Мини-словарь терминов статьи»).
2. Работа в фотошопе. Описание действий в фотошопе, которые необходимы для подготовки элементов бампа.
3. SDK. Завершающая часть работы по бампу. Здесь собираются, регистрируются, настраиваются составляющие бампа, а в последствии, — создаются bump и bump#

Теория

Для начала о структуре основных карт и основных понятиях статьи. Всё ниже написанное не обязательно верно на все 100%.

Height Map (карта высот)

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

Normal Map (карта нормалей)

Карту нормалей можно получить следующими способами:
— сгенерировать с высокополигональной модели в 3D-редакторе, в роде 3ds Max, zBrush
— сгенерировать с ранее созданной карты высот с помощью одного из плагинов для Photoshop (плагин NVIDIA, плагин PixPlant, плагин xNormal)
— сгенерировать с ранее созданной карты высот в спец-прогах (xNormal, PixPlant, CrazyBump)
Если разбирать по каналам схематически, то выглядит так:

R - ось X - указывает нормали влево и вправо (горизонтальные)
G - ось Y - указывает нормали вверх и вниз (вертикальные)
B - ось Z - указывает нормали в глубину от поверхности

При включенном RGB на каналах, смотрится как текстура в синих, фиолетовых, сиреневых, даже иногда розовых цветах. Normal Map очень и очень рекомендуется создавать для бампа (тем более, если она с хай-поли модели), а не использовать сокращенный вариант с картой высот (об этом узнаете в разделе SDK ниже). Normal Map, собственно, и предает текстуре различных объемных черт. В дальнейшем, после сборки в SDK, карта станет частью bump.

bump

Карта bump представляет собой обычную карту нормалей в формате A(BGR) (типично для формата сжатия DXT5_nm). Разработчики использовали такой порядок по очень простой причине — DXT компрессия гораздо меньше «портит» текстуру, так как альфа-канал не подвергается компрессии и остается практически в исходном виде. Тут нужно пояснить: еще раз гляньте на каналы карты нормалей. А теперь представьте, что на пустое изображение с каналами RGBA поставили все ту же карту нормалей, только перевернутую по каналам. То есть наполнение R с карты нормалей перешло на канал Альфа (А) карты bump, G перешло в B, B перешло в G. Что касается канала R в бампе, туда поставили Specular Map (карту бликов). О ней можете подробней почитать в мини-словаре терминов.

Также стоит напомнить, что в своем полном виде карта bump создается из карты нормалей + текстурой с спекуляром на Альфе в SDK. Такая-вот текстурная солянка. Думаю, вы знаете, что она в игре делает, но если вы столкнулись с данными терминами первый раз, то все довольно просто: карта делает текстуру объекта более красивой, объемной, с выпуклостями и впадинами, добавляет или запрещает отражение текстурой света от солнца, лампы, фонарика и т. д. Вот, например, новенькому листу металла было бы неплохо придать возможность отражать блики, а кирпичной текстуре задать впадины между кирпичиками. А вот дереву, допустим, никаких отражений света не надо, хотя высоты (впадины и выпуклости) добавить таки можно. Еще замечу, что бампы не нужны для текстур партиклов, текстур интерфейса и еще ряда специфических изображений. К основной текстуре привязывается через файл текстура.thm. Но по поводу этого не беспокойтесь, ведь файл *.thm появляется при создании бампа/подключении бампа к текстуре в SDK.

Каналы:

1.png
Каналы в карте bump
R - Specular map - карта интенсивности блика
G - ось Z - указывает нормали в глубину от поверхности
B - ось Y - указывает нормали вверх и вниз (вертикальные)
Alpha - ось X - указывает нормали влево и вправо (горизонтальные)

bump#

bump# — очень интересная карта, назначение которой для многих непонятно. Так как найти какую-либо информацию насчет правильного названия не удалось, назовём ее просто «Normal error map«. Неизвестно, используются ли подобные технологии в других играх, но встречать ее где-либо, кроме сталкера, не приходилось. Эта карта «исправляет» ошибки сжатия DXT у бампа и генерируется только с помощью SDK, поэтому всякие непонятные действия некоторых пользователей, вроде вставки вместо нее обычной или обесцвеченной карты нормалей, а также описанного в статье Argus’a заливания серым со вставкой в альфа-канал карты высот, использовать нельзя. Выглядит как серое зашумленное изображение. Еще раз стоит напомнить, bump# создается автоматически при генерировании bump в SDK.

Каналы:

R - ошибки оси X карты нормалей
G - ошибки оси Y карты нормалей
B - ошибки оси Z карты нормалей
Alpha - карта высот; используется для параллакса, если использование оного было включено при настройке текстуры

Для сравнения:

Мини-словарь терминов

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

Diffuse texture aka диффузная текстура ака диффуз — основная исходная текстура, для которой делаются дополнительные карты.

Specular Map aka карта бликов — карта, которая в последствии работы в SDK станет частью бампа (на красном канале). Отвечает за отражение текстурой света. Изготавливается либо с диффуза в Photoshop, либо параллельно с диффузом в 3D-редакторе. На карте черным (и оттенками черного) обозначаются места, которые не будут отсвечивать свет), а белым (и оттенками) — которые будут отсвечивать.

Работа в Photoshop

Здесь также понадобится Normal Map Filter от NVIDIA, если вы уже работали с текстурами, он должен быть у вас установлен, так как поставляется в комплекте с *.dds-плагином или другой удобный плагин (озвучены выше, в теории карты нормалей).

Все файлы сохраняются в tga 24 bits/pixel (если нету альфа-канала) или 32 bits/pixel (если есть альфа-канал). Перед сохранением следует перевести изображение из 16-битного в 8-битное.

Карта высот

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

По сути, создание карты высот — процесс творческий, есть лишь несколько советов:

  • Над картой высот работа должна проводиться строго в 16bits, причем с самого начала до финального экспорта в SDK
5.png
Перевод в 16-битное изображение
  • Качественного результата не будет, если просто взять и засунуть диффузную текстуру в генератор, не делайте этого. Придется тщательно поработать над картой высот.
  • Необязательно пытаться показать на карте высот все детали и рельеф сразу, их можно добавить позднее, когда будет сгенерирована карта нормалей.
4.png
Пример добавления деталей
  • Для карты высот, если делаете ее с диффуза, можно взять один из каналов RGB диффузной текстуры или же взять обесцвеченную. При первом варианте, выберите желаемый канал, выделяйте изображения, копируйте, вставляйте его в новый документ. Новое изображение будет в режиме «Градация серого». Рекомендуется перевести опять в RGB, так как не все плагины и фильтры читают «Градацию». При втором варианте, просто создайте дубликат изображения и нажмите Ctrl+Shift+U («Обесцветить»).
  • На текстуре карты высот можно сделать слой поверх фонового, на который нужно скопировать обесцвеченную инвертированную исходную текстуру. Звучит не очень, но это все не сложно. Берем диффуз, нажимаем Ctrl+I (инвертируем). Потом обесцвечиваем, как показано выше. Копируем на новый слой карты высот. Режим наложения выставляем «Перекрытие» («Overlay»). Дальше еще можно сделать слой более прозрачным. В целом, смотрите, чтоб текстура была сбалансированной в плане плоскостей. Ровная часть должна быть заполнена серым оттенком.
  • Очень пригодятся в этом случае инструменты «Осветлитель» и «Затемнитель».
  • Поверх всего можно добавить еще один слой, на котором будете использовать инструменты в роде «Кисти».

Metro 2033 (если кому интересно)

6.png
Пример получаемой карты нормалей из Метро 2033

В метро вместо карт нормалей, как обычно бывает в большинстве игр, используется карта высот — файлы с постфиксом _bump. Они есть только в том случае, если вы распаковывали игру самостоятельно, большая часть сборщиков «Архивов моделей» их в архив не добавляет.
«Состав» карты высот Метро 2033:

R - пустой канал
G - Specular map - карта интенсивности блика
B - пустой канал
Alpha - карта высот

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

Создание происходит следующим образом: берем карту высот, открываем фильтр, задаем настройки по усмотрению. Далее получаем готовую карту нормалей. Нужно осмотреть карту, чтоб там не было мелких не нужных горбиков и прочих недостатков. Скорее всего, все можно будет решить размытием в некоторых местах. Еще, как вариант, чудесная методика размытия, при которой изображение все равно остается более четким:
1. Дублируем фоновый слой.
2. Дубликату выставляем режим «Перекрытие».
3. Применяем один из фильтров размытия (к примеру, «Размытие по гауссу»).
4. Если надо, дублируем этот слой еще пару раз.

Specular Map

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

SDK

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

При наличии уже готовой карты нормалей, изготовленной вами, из другой игры, zBrush или любой другой программы высокополигонального 3D моделирования, остается только добавить ее в SDK. Для чего регистрировать в SDK? Для того, чтоб потом совместить Normal Map с заготовкой для бампа и получить бамп.
Параметры:

  • 0.4:

Type: 2D Texture
Format: 32 bit (8:8:8:8)
MipMap Filter: Kaiser (здесь уже по желанию, рекомендуется Kaiser)

7.png

  • 0.5/0.6, 0.7:

Type: Normal Map
MipMap Filter: Kaiser

8.png

Bump

С использованием отдельной карты нормалей bump карта изготавливается очень просто (заготовку для бампа лучше назвать текстура_bump.tga и поместить в editors/import):

RGB - залить серым цветом, RGB = 128,128,128
Alpha - Specular Map

Параметры добавления в SDK не зависят от версии:
Type: Bump Map, в Special Normal Map указываем добавленную ранее карту нормалей.

Если же вдруг возникло желание обойтись без дополнительной карты нормалей, то добавление в SDK и каналы — меняются:

RGB - карта высот
Alpha - Specular Map

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

Видеоурок[2]

Источники

  1. Статья «Создание, описание особенностей и объяснение работы карт рельефа» на S.T.A.L.K.E.R. Inside Wiki
  2. Канал пользователя «Андрей Непряхин» на YouTube.com

Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Sfc scannow windows 7 как исправить ошибки
  • Как найти уведомление в телефоне хуавей
  • Штрафстоянки в москве как найти машину
  • Как найти комплексное число z если
  • Как составить акт драки в школе

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии