информационно-развлекательный портал о графике и дизайне
Скачать фотошоп (актуальная и старые версии)
Введение в карты нормалей
Этим уроком я надеюсь помочь всем начинающим понять как использовать карты нормалей в своих моделях.
В этом уроке мы будем создавать кубик, показанный выше, используя простой бокс и карту нормалей.
Вы узнаете несколько подсказок и трюков. Я собираюсь рассказать все шаг за шагом, так что любой сможет повторить урок. Я использую 3DS Max 8, но техника применима к любомй 3d программе, поддерживающей карты нормалей.
Я надеюсь урок Вам понравится.
Давайте начнем!

Прежде всего проверьте, что Вы работаете с теми же единицами измерения, что и я. Перейдите в меню Customize (Настройки) и в Units Setup (Установки единиц) проверьте, что выбраны Generic Units.
Второе - Вам нужно выбрать используемый драйвер. Перейдите в меню Customize снова и на этот раз в Preferences (Предпочтения). В всплывающем окне установите Currently Installed Driver (Текущий драйвер) в Direct3D 9.0.

Перейдите на закладку Viewports, нажмите кнопку Choose Driver (Выбрать драйвер), установите флажок Direct3D,
нажмите кнопку Advanced Direct3D..., проверьте, что выбрано DirectX 9.0.
БВА

Сначала Вам нужно сделать низкополигональную модель.
Сделаем box с размерами:
Lenght: 50
Width: 50
Height: 50
Это будет низкополигональная модель, так что переименуем ее в LowPolyDice.

Теперь Вам нужно сделать высокополигональную модель. Т.к. геометрия лоуполи и хайполи моделей должна занимать одно пространство Clone (Клонируем) LowPolyDice и назовем его HighPolyDice. Проверьте при клонировании, что выбрано Copy (Копирование) а не Instance.
Перед тем как делать хайполи модель всегда лучше спланировать, что Вы будете делать. Есть два пути сделать карту нормалей:

  • сделать лоуполи и хайполи модели и сгенерировать карту нормалей, используя 3dsmax
  • сделать только лоуполи модель и использовать Фотошоп для генерации карты нормалей.
После нескольких тестов я нашел, что лучший путь - комбинация этих двух. Если Вы имеете сглаженные ребра на модели лучше сделать карту из высокополигональной модели, но если на Вашей модели есть текст, или другие тонкие детали легче сделать ее в Фотошопе. Сначала это Вас запутает, т.к. Вы не знаете когда делать модель, а когда оставить ее для Фотошопа. Сейчас я покажу Вам как сделать кубик. Для скругления формы кубика и для дырок я сделаю высокополигональную модель, а текста я буду использовать Фотошоп. Я мог бы сделать и дырки в Фотошопе, но я захотел иметь более детализированную хайполи модель, так чтобы Вы могли увидеть что может делать карта нормалей, сгенерированная 3dsmax.
Далее описываются шаги, которые нужно проделать, чтобы получить хайполи модель:
1. Выделите все ребра модели и примените Chamfer (Фаску) со значением 2.
После этого выделите все ребра в углу и Connect (Соедините) их.
Этот шаг гарантирует, что кубик сохранит свою кубическую форму, когда будет применен модификатор MeshSmooth.
2. Выберите ребра вокруг кубика - Connect их с 2 сегментами и передвиньте их ближе к границе.
Это делается т.к. когда мы будем моделировать дырки нужно их несколько отделить от ребер.
3. Повторяем шаг 2, но на этот раз оставляем ребра на месте, так что расстояние между ними одинаковое.
4. Выделяем все грани, на которых должны быть дырки.
Применяем Inset со значением 2 и проверим, что выбрано By Polygon.
Не изменяя выбора полигонов применяем модификатор Bevel используя значения:
Height: -2
Outline Amount: -1
Проверьте снова что выбрано By Polygon.
  Картинка справа поможет Вам определить на какой грани сколько дырок.
5. Применим модификатор MashSmooth Iteration:3. Обычно достаточно значение 2 для итераций, но т.к. геометрия проста я могу позволить себе более сглаженный результат.
Хайполи модель готова!

Перед генерацией карты нормалей нам нужно unwrap (развернуть) лоуполи модель. Тут некоторые вещи,которые нужно знать о развертке:

  • хайполи модель разворачивать не надо
  • Вы должны быть уверены, что нет полигонов, которые используют тоже UV пространство
Т.к. большинство из временного текстурного пространства очень важно есть путь разделить пространство текстур в карте нормалей. После того как Вы развернули модель просто как Вы это делаете когда не собираетесь делать карту нормалей , с полигонами использующими тоже пространство текстуры, offset (Сместите) UVs которая сверху другой UVs со значением 1 по U или V осям. Т.о. они будут использовать текстуры из следующей tile и карта нормалей будет генерироваться верно, т.к. 3dsmax не визуализирует в текстуры UVs которые не в гловном боксе UV редактора. После того как Вы сгенерируете карту нормалей Вы можете сместить UVs назад со значением -1. Это для более профессионального рассмотрения, результат будет тот же.

Есть еще две важные вещи, на которые нужно обращать внимание при развертке лоуполи модели:

  • seams (швы)
  • streaching (растяжение)
Здесь Вы можете найти преимущества наличия хайполи модели. Если Вы имеете хайполи модель Вам не нужно заботиться о швах и растяжении, т.к. Макс будет заботиться о них. В большинстве случаев, однако лучше избегать растяжений, т.к. на картах с низким разрешением они будут видны. Чем меньше растяжений, тем больше швов Вы имеете. Вам нужно заботиться только о гранях, где Вы хотите добавить детали в Фотошопе. Очень трудно сделать настройки, если область, в которой нужно сделать модификации имеет шов в середине ее.
Развертка этой модели очень простая. Примените модификатор Unwrap и выберите Flatten Mapping (Плоское картирование) из меню Mapping. Карта UV выглядит как эта:
Как Вы можете видеть есть много швов, но это не проблема, т.к. мне не нужно рисовать в Фотошопе на ребрах, нужно только сделать изменения в середине полигонов, где будет текст.
Здесь есть множество пустого места. Мы исправим это позднее. По некоторым причинам карта нормалей, генерируемая 3dsmax, квадратная. Но после того как мы сделаем карту при разрешении 512x512 мы можем изменить ее до 512x256 и затем снова настроить UV так что она совпадет с новой разверткой.
Все что Вам нужно сделать сейчас - передвинуть грань сверху и поместить ее в правый угол. После этого развертка выглядит так:

У меня по умолчанию Flatten Mapping выключено.
Чтобы его включить нажмите кнопку Edit, перейдите на уровень граней в модификаторе Unwrap UVW,
в меню открывшегося окна выберите Mapping=>Flatten Mapping.
БВА

Теперь, когда мы развернули нашу модель, collaps (сверните) стек, т.к. нам больше не нужно делать изменений в развертке и выведите диалог Render2Texture нажав 0 на клавиатуре или перейдя в меню Render и выбрав Render To Texture
Вот что Вам нужно знать об этом окне:

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

  2. В свитке Projection Mapping проверьте что флажок Enabled установлен и LowPolyDice выбрано и затем нажмите на кнопку Pick. Всплывет диалог Add targets (Добавить цель), где выберите HighPolyDice объект и нажмите Add. Если диалог пустой проверьте не скрыт (hide) ли объект HighPolyDice. В этой точке Вы можете увидеть что появился модификатор Projection в стеке LowPolyDice. Мы вернемся к нему позднее.

  3. Теперь нажмите кнопку Options (Опции) и в появившемся диалоге проверьте что Use Cage (11.) установлен и затем нажмите в том же диалоге кнопку Setup (Установка) (10.). Это выведет еще одно меню, в котором в свитке Global SuperSampling Вы можете выбрать опции для фильтрации визуализации Вашей карты нормалей. Наилучшая установка для этого Max 2.5 Star. Так что просто проверьте, что Enable Global Supersampler включен и Max 2.5 выбран. Если Вы не хотите визуализировать карту нормалей с фильтрацией просто установите флажок Disable all Samplers.

  4. В большинстве случаев Вы не используете Mapping Coordinates так что оставьте здесь все как есть. Если Вы нажмете render (визуализировать) и получившаяся текстура черная проверьте что выбрано Use Existing Channel (Использовать существующий канал) и значение Channel 1. Но пока не нажимайте render, нужно сделать много изменений прежде чем сделать это. Если Вы изменили канал для UV проверьте, что тут установлен тот же.

  5. Вернемся к окну Визуализации в текстуру. Нажмите кнопку Add и выберите NormalsMap из появившегося диалога и нажмите Add Elements.

  1. В области File Name and Type (Имя и тип файла) выберите путь куда Вы хотите сохранить Вашу карту и тип файла. Я рекомендую tga или bmp файлы. Не используйте jpg, т.к. компрессия значительно ухудшит качество карты нормалей.

  2. В области Target Map Slot (Целевой слот карты) Вы можете указать куда будет добавлена карта после визуализации. Я предпочитаю оставлять это место пустым, т.к. мен нравится добавлять ее вручную в Редакторе материалов. Если хотите, можете указать здесь Bump.

  3. Укажите size (размер) карты. Указывайте всегда окончательный размер, т.к. изменение размера впоследствии ухудшает качество. Для этой модели укажите 512.

  4. Кнопка render визуализирует карту. Если Вы нажмете ее сейчас, Вы увидите, что карта нормалей выглядит странно. Это потому, что Cage (каркас) не настроен.

Перед тем как нажать на кнопку Render Вам нужно настроить Cage в модификаторе Projection. Это очень важная часть - не забывайте о ней. Чтобы сделать это закройте диалог Render to Texture (не беспокойтесь о сделанных изменениях - они сохранятся) и нажмите на модификаторе Projection, появившемся над Editable Poly.

Модификатор Projection имеет подобъекты подобные модификатору EditPoly но только points (точки) могут настраивать контейнер.
Перед тем как что-то делать с каркасом проверьте, что включено Shaded и затем нажмите Reset (Сброс). Опция Shaded включается, чтобы можно было увидеть где каркас пересекает хайполи модель а Reset сбрасывает Cage к форме лоуполи модели, что является хорошим стартом для настройки каркаса. Если вы имеете нерегулярную лоуполи модель большинство времени Вы будете перемещать точки инструментом Move так чтобы каркас не пересекал хайполи модель, но если Вы имеете модель похожую на нашу, намного проще использовать опцию Push.

Каркас должен быть как можно ближе к хайполи модели, но не пересекать ее.

Для этой модели лучший путь настроить каркас - Сбросить его, затем просто ввести значение 0.1 в Push Amount. После того как Вы нажмете Enter вы увидите, что Amount сбросилось в 0. Не беспокойтесь об этом, изменения в каркасе сделаны.

После того, как вы настроите каркас, выведите снова диалог Render to Texture и нажмите Render. Вы увидите окно, подобное тому, какое появляется при простой визуализации, но изображение в нем - UV карта. Это окно полезно, т.к. в нем можно увидеть, что каркас пересекает хайполи модель. Если это так, Вы увидите красные области. Это значит, что этих местах Ваш каркас пересекает хайполи. Если Вы получили это просто сделайте push каркаса немного больше.

Вот еще подсказка: Когда вы имеете более сложную геометрию лучше перейти в режим вершин (Cage) и перетаскивать вершины вручную, пока каркас не станет верным. Если Вы используете ползунок push вы вытянете все вершины на одно расстояние, что может привести к проблемам со сложной геометрией, так что используйте его только тогда, когда Вы уверены, что при этом каркас не пересечет другие части хайполи. Хороший пример - рука. Если Вы используете ползунок push каркас пересечет себя и хайполи модель между пальцами. Здесь лучше настраивать вершины каркаса вручную.

Карта нормалей выглядит так:я

Теперь мы применим карту нормалей к модели и посмотрим как она выглядит. Чтобы сделать это откройте в Фотошопе сохраненную карту нормалей. Сохраните файл с расширением .psd, т.к. мы собираемся делать в нем изменения и сохранение файла в другом формате после каждого изменения просто расточительство времени. Лучше иметь один PSD файл со множеством слоев.

Теперь перейдем в Макс и откроем Редактор материалов (M). Выберем пустой слот и перейдем в слот и перейдем к слоту Bump. Сначала установим значение в 100 (по умолчанию 30). Нажмем кнопку None и в появившемся окне выберем Normal Bump. Нажмем кнопку Normal и в появившемся окне выберем Bitmap. загрузим .psd файл, который Вы только что сохранили. Есть еще одна вещь, которую нужно сделать, чтобы увидеть карту нормалей в окне. В редакторе материалов включите DX Display of Standard Material в свитке DirectX Manager.

Как Вы можете видеть есть еще один слот здесь - Additional Bump. Это полезно, если Вы хотите добавить добавочные неровности к модели, но они будут видны только на визуализации, а не в окне просмотра.

Примените материал к низкополигональной модели и нажмите иконку Show Map in Viewport (Показать материал в окне). Если Вы все сделали правильно, Вы увидите лоуполи модель, выглядящую почти как хайполи.
Чтобы увидеть результат лучше создайте светильник Omni и переместите его вокруг модели, чтобы увидеть как она реагирует на него.

Т.к. все установки уже сделаны, теперь Вам просто нужно поработать в Фотошопе , чтобы внести изменения в карту нормалей, и вернуться назад в Макс, чтобы увидеть результат.
Прежде чем мы продолжим этот урок, Вам нужен nVidia плагин для Фотошопа, чтобы сделать grayscale слой в слоях карты нормалей. Чтобы получить его перейдите по www.developer.nvidia.com/object/photoshop_dds_plugins.html и загрузите плагин. Он очень легко инсталлируется. После инсталляции нужно перегрузть Фотошоп. Если Вы сделали это, мы можем продолжить добавлять детали к карте. Откройте Фотошоп снова и загрузите PSD файл.

Для добавления деталей к карте сделайте еще один слой, выберите инструмент Text Tool, измените цвет текста на black (черный) и напишите Las Vegas в нем. Нажмите кнопку Create warped text (Создать искаженный текст) и выберите стиль Arc. Введите значение +80 для Bend

Сделайте еще слой и повторите процесс, но на этот раз введите текст "Casino" со значением Bend -60.

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

Сделайте текстовые слои видимыми и после этого сделайте новый слой. Используйте Merge Visible (Shift+Ctrl+Alt+E), чтобы объединить текст в один слой. С этим выбранным слоем перейдем к меню Filter и в инструментах NVIDIA Tools выберите NormalMapFilter

Тут что Вам нужно знать о NVIDIA Normal Map Filter:
Invert X/Y: Если детали, которые Вы только что добавили выглядят инвертированными установите его.
Scale: Это устанавливает глубину деталей. В дольшинстве случаев Вы тестируете различные значения, пока не получите нужный результат. Для нашего текста введите 4. Если Вы думаете, что это чересчур много введите значение помньше.
Average RGB: Если выбрано это плагин возьмет в рассмотрение значение всех каналов (RGB), это то, что вы хотите в большинстве случаев. Другая возможная опция Normalize Only, будет рассматривать карту как будто она карта нормалей. Это опция выбирается когда вы имеете только крату нормалей и работаете с ней напрямую, а не с слоями.
Set to 1.0: всегда должна быть выбрана
3D Preview: помогает увидеть в реальном времени как карта нормалей будет выглядеть.

Теперь нажмите Ok для генерации карты нормалей. Слой выглядит как пример справа. Из этого слоя Вам нужен только текст, так что лучше удалить остаток слоя. neutral color (Нейтральный цвет) для карты нормалей R:128 G:128 B:255 так выберите Magic Wand Tool, введите значение 0 для Tolerance и проверьте Anti-alias, Contiguous и Sample All Layer выключены. Выберите нейтральный цвет и нажмите delete (уадлить).

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

Сделайте копию карты нормалей и поработайте над ней, чтобы сделать карту diffuse и карту specular. Легче работать над картой нормалей, т.к. Вы можете видеть где добавлять детали. Также полезно добавить wire на верхний слой если модель сложная. Поместите карту specular в Specular Color и Specular Level слот. Если Вы не поместите ее в оба слота, она не будет работать. Карта оражений воздействует на цвет specular модели, а power на нее.

В этой точке Вы можете оптимизировать текстуру, уменьшив ее до размера 512x256, как я говорил ранее. Чтобы сделать это Crop (Обрежте) область текстуры, которая используется моделью и затем resize ее до размера 512x256. Только сделайте это когда изменение размера не воздействует на качество текстуры путем, который сделает это очевидным. Этот кубик пример, где Вы можете сделать это если размер текстуры важен, пространство используется 512x343 так если Вы сделаете немного меньше Вы увидите, что 87 пикселей растяжения более приемлемы, чем 169 пикселей потери. Сделав текстуру 512x256 вы уменьшаете ее вполовину. После сделайте изменения во всех текстурах (диффузной, отражения и нормалей) перейдите в 3dsmax и развертку модели для новой текстуры. Эта часть тоже очень легкая, все что Вам нужно сделать выделить всю развертку UVs и масштабировать ее так, чтобы она разместилась внутри UV бокса.

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

Здесь 3 Omni светильника, как Вы можете видеть. Один наверху - освещает всю сцену, он имеет Тени и множитель 1.2. Другие 2 omnis сзади имеют множитель 0.5 и не отбрасывают теней. Чтобы сделать хорошую смесь между фоном и плоскостью, на которой располагаются кубики, сделаем плоскость и поместим Matte/Shadow на него. Все что Вам нужно сделать далее - изменить цвет фона и нажать визуализацию.

Некоторые пояснения от автора, ответы на вопросы.

Давайте начнем с UV.
Внизу слева в Редакторе UV Вы видите... то, что Вы видите на рисунке внизу

Проверьте, что иконка слева нажата (если Вы не сделаете этого UV будут свернуты одну линию), выберите UV, который Вы хотите сместить (offset) и затем введите 1 в U или V. Нажмите enter. Значение снова станет 0.0 а UV будет смещено на 1 налево или вниз, в зависимости от выбранной Вами оси. Это просто для того, чтобы быть уверенным, что UV точно где они должны быть. Другой метод - передвинуть их вручную, но таким путем Вы можете потерять несколько пикселей.

Вопрос: Должны ли занимать лоуполи и хайполи одно пространство? И должен ли каркас включать в себя обе модели?
Каркас должен вмещать в себя хайполи модель, а обе модели должны располагаться в одном месте. Давайте рассмотрим пример плоскости и неровностей на ней. Лоуполи модель - это плоскость, а хайполи - плоскость с неровностями на ней. Когда Вы делаете каркас он должен быть больше хайполи. И вот почему: когда Макс строит карту нормалей, он измеряет расстояние от лоуполи модели до хайполи и строит карту основываясь на этом расстоянии. Для нашей плоскости хайполи и лоуполи на ребрах одинаковы, они отличаются в местах неровностей. Значит на ребрах карта нормалей будет иметь нейтральный цвет. В местах неровностей цвет карты будет зависеть от расстояния между лоуполи и хайполи. Вершин у лоуполи меньше чем у хайполи, значит программе нужно как-то указать в какой области сравнивать модели. Эту функцию выполняет каркас. Если где-то хайполи выступает за каркас, то такие места не будут приниматься во внимание при подсчете карты. При этом Вы увидите красные пятна на карте.

Используются технологии uCoz