пятница, 23 октября 2015 г.

Туториал для модмейкеров и не только...

...или как не сломать мышку об колено.

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

Название: Текстуры - тонкая материя.
Уровень сложности: Адепт.
Нужности: Photoshop+NVIDIA Tools Normalmap Filter+DDS Plugin, Autodesk 3D Max+Nif Plugin (Importer-Exporter).
Рейтинг: NC-17.
Размер: Миди.
Статус: Закончено.




Текстуры во многих играх "запаковываются" в формат DDS, по своей сути это еще один алгоритм сжатия изображения, как PNG или JPEG, который имеет гибкую систему настроек. Чтоб создавать игровые текстуры, нужно установить DDS Plugin для фотошопа. (Здесь и далее на установке останавливаться не буду, на то есть поисковик, все уже доступно изложили до меня.)
Если открыть чужую текстуру и с ходу начать поверх нее работать, то можно перепутать верх и низ, один элемент с другим, лево и право (да-да,так тоже можно). Некоторые текстуры интуитивно понятны, а в некоторых черт ногу сломит. Дабы не гадать на бобах и не запускать по сто раз игру для проверки, надо выяснить, с чем мы имеем дело :)
Цель описанных далее манипуляций - определить, как лучше работать над текстурой в 2D. Если вы ровненько наложили красивые текстурки и не можете понять, почему же в игре великолепные узоры поплыли, то 3D вам в помощь.
Нам понадобится рассмотреть выбранную модель в 3D максе. Макс у меня открыт почти все время, пока я делаю текстуру, в нем можно быстро посмотреть результат манипуляций в 2D редакторе, подключить сетку для лучшей ориентировки и т.д.
Модели в Скайриме (и еще в некоторых играх) в формате Nif. И для экспорта в макс нужно поставить Nif Plugin.

Нажимаем на эмблему макса в левом верхнем углу, Import.


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



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

Опять жмякаем Import.


Готово, модель с нами.


Выделим ее ЛКМ. Справа, на панели инструментов заходим во вкладку Modify, в списке у вас будет три модификатора.


Щелкаем на верхней строчке ПКМ, выбираем Collapse to -> Yes. (Просто мера предосторожности, чтоб избежать вылетов.)


Добрались до главного. Чуть выше, в Modifier List находим модификатор Unwrap UVW. Весь список не листаем, достаточно щелкнуть по нему и нажать на клавиатуре, все просто. У меня этот модификатор до кучи вынесен на отдельную кнопку, прямо под списком, вместе с другими "горячими" модификаторами :D

[Для справки: этот модификатор позволяет присвоить пространственным точкам модели (вертексам) такое значение на плоскости, при котором рисунок, наложенный в дальнейшем на плоскость в 2D редакторе, не будет искажен на данной объемной модели.]

Open UV Editor.


Открывшееся  окно разворачиваем, в нем нам нужен пункт рендера развертки...Tools -> Render UVW Template.


Теперь выберем размер в пикселях. Корректными значениями будут: 8х8, 16х16,....512х512, 1024х1024, 2048х2048, 4096х4096. Выбирайте размер под свои нужды. Обычно я беру 4к или 2к (для больших и мелких объектов соответственно), изначальный большой размер дает лучшее качество при дальнейшем сжатии. 4к можно потом уменьшить на 2к, 2к на 1к и т.д. без значительных потерь. Уменьшать - не растягивать :D

Render UVW Template.



Полученное изображение сохраняем в формате PNG. Формат PNG очень классный, он сохраняет прозрачность. На кой черт оно нам надо? Изображение помещается в фотошопе на самый верхний слой, оно прозрачное и не содержит ничего лишнего, кроме граней модели. Если исходные текстуры на выбранной вами модели очень мусорные и невозможно из них понять, что к чему относится, то отрендеренная развертка поможет четко разграничить объекты. 


Как я уже писала в самом начале, 3D макс оставляю открытым почти все время текстурирования. Есть еще несколько вещей, которые хотелось бы упомянуть. 
Если после рендера все еще остается непонятным, какой элемент развертки за что отвечает, то можно использовать окно Unwrap, чтобы все прояснить. В левом нижнем углу нужно отметить "выделение по полигонам" и "выделение по элементу". Это позволит выделить элемент полностью, нажав на любой полигон, относящийся к нему. 



Во вьюпорте элемент тоже выделяется.


Очень удобно для выявления вот таких маленьких объектов.


Развертки бывают разные..
Правильно сделанная развертка - залог вкусной текстурки. :3 Плохая развертка несет с собой отчаяние, разрушение и багет :С Она непредсказуема, с ней сложно работать в 2D редакторе. Прежде чем браться за ретекстур не лишним будет проверить, а стоит ли?

Material editor -> Diffuse -> Checker.



Перетаскиваем сферу (материал) на объект. Это стандартный материал макса для проверки на вшивость. Представляет из себя "шахматную доску". Там, где растягиваются квадраты, растянется и итоговая текстура. Все дело в степени потянутости...Есть приемлемые растяжения, а есть не совместимые с жизн работой в 2D редакторе. Некоторые модели лучше оставить в покое, серьезно..для безопасности своих же нервов. 

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


Хорошо.


Плохо ._____.


Приемлемые потягушки.


Сразу несколько примеров.


Все хреново :D


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

Адекватная соразмерность.


Что-то не так...



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

Ладно,перейдем уже к фотошопу.
Начнем с создания Diffuse map, а, проще говоря, нарисуем карту цвета. Одно важное действие, которое полезно предварительно сделать. Создать "маску" для каждого элемента. В кавычках потому, что это не маска слоя. Это всего один слой, на котором у меня лежать все силуэты элементов, залитые каким-нибудь одним цветом.

Вот так это выглядит.


 Зеленые линии - границы элементов (верхний слой).


Маску всегда создаю с небольшим припуском, с помощью инструмента "перо". Никакие сглаживания не делаю, только грубое выделение. Главное - не оставлять открытые участки. 
Все, что происходит в Вегасе, остается в Вегасе.
Все, что происходит дальше - находится между первым слоем и слоем с маской. Слоев получается много, очень много..слишком :\ (Я делаю резервные копии всего, что только можно, поэтому к концу работы собирается огромная группа "Резерв".) 



Для каждого объекта (или материала) создаю свою папку, чтобы они не зависели друг от друга. Я не сливаю слои до последнего, чтоб была возможность скорректировать один элемент, не затрагивая остальные.
В процессе работы на слоях скапливается много шлака. В любой момент можно встать на слой-маску, сделать выделение нужного объекта, инверсию выделения и быстро удалить весь мусор. Или нарезать и примерить пачку фото, в поисках подходящей текстуры.
Кстати, не всегда можно найти подходящую под замысел картинку в и-нете, иногда приходится действовать по вдохновению, my brothers. Например, за основу для подошвы я взяла фото собственного сапога. И вообще, стараюсь фотографировать все, что может пригодиться для текстурирования. Также для создания подошвы мне понадобились старый забор, гвоздодер и наждачка.


Еще слой-маска полезен, если у вас нет возможности или желания запекать карту теней. Выделяем нужный объект и, ориентируясь по слою с разверткой, чисто и быстро накидываем тени. 


Cнова открыв Material editor, можно примерить текстуру на модель: Diffuse -> Bitmap -> Твоя_текстура.jpg\png\tiff....




Теперь уже можно в целом посмотреть на то, что мы натворили. Включив сетку, увидим, как исправить тот или иной косяк, на какое конкретно место что нужно передвинуть.


Теперь пора оживить модель. Normal map - та самая карта, которая дает плоскому Diffuse map рельеф. Грубо говоря, эта карта создает реакцию на свет и тень. Наложив нормали на лоу-поли модель можно добиться эффекта объема.

Мидл-поли штаны и хай-поли обувь.


Normal map штанов.


Реакция на освещение.



Карту для штанов я снимала с хай-поли модели.


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

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


Нам понадобится установить NVIDIA Tools Normalmap Filter для фотошопа.
Сперва нужно обесцветить созданный ранее диффуз. Но перед этим важно учесть одну особенность: темные оттенки воспринимаются как углубления, а светлые - как выпуклости. Что из этого следует? Нужно обратить внимание на материалы: царапины всегда будут светлее основы, а т.к. царапины - это углубления, то придется их сделать темными, чтоб фильтр их понял правильно.

Например, на этой текстуре присутствует два материала: кожа и металл. Оба они имеют царапины.


Простое обесцвечивание даст нам инверсию света и тени при рендере. Правильная основа для применения фильтра будет выглядеть примерно так.



В данном случае я инвертировала сразу оба материала.
Что касается наших ботинок, то на них есть некоторые материалы, которые не нуждаются в инверсии. Колдовать придется с металлом, темными швами и царапинами на подошве. Подошва представляет собой наиболее сложный объект, т.к у нее есть ребристая поверхность, которую НЕ нужно инвертировать, и царапины, которые нужно инвертировать. Упорядочивание слоев и групп может показаться слишком педантичным, но сейчас без этого было бы очень сложно.
Первым шагом я создаю две новые группы Normal и Diff (да-да, снова группы, еще больше групп). В Diff скидываю весь диффуз и отключаю тени, сейчас они не понадобятся. Далее, стоя на группе Diff, нажимаю Ctrl+Alt+Shift+E. Создается слой со всем содержимым, который отправляется в папку Normal (можно перед этим еще фон отключить, но это не столь важно). Применяем к нему обесцвечивание.



Группу Normal пока можно скрыть и заняться сложными пациентами. После обработки, накладываю инвертированные объекты поверх обесцвеченных. Можно еще подтянуть контраст или наоборот, приглушить некоторые моменты. Теперь все готово к применению фильтра Normalmap.


Заходим в Фильтр -> NVIDIA Tools -> NormalMapFilter. В окне настроек можно поменять Scale, попереключать каналы (задействует красный, зеленый, синий или все сразу) и посмотреть на результат. Сейчас меня устроили такие настройки.


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

Вот что получаем на выходе.


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


Добиться лучшего эффекта можно несколькими простыми действиями. Копируем полученный слой, ставим ему режим перекрытия и применяем на нем фильтр Размытие по Гауссу. А дальше только нажимаем Ctrl+J (скопировать слой) и Ctrl+F (применить последний фильтр, в нашем случае "размытие").

Теперь больше похоже на правду.


Кратко о Specular map (карта блеска). Тут уже более-менее без выкрутасов. Нам понадобится простой ч\б вариант диффуза. Регулировка производится таким образом: черный цвет - нет блеска, белый цвет - есть блеск. Металл может быть ржавый, тусклый. Или наоборот - отшлифованный. Кожа может быть матовой, потертой или лакированной. Свойства материала настраиваются в соответствии с задумкой.
Спекуляр может быть сохранен как отдельная карта или вставлен в альфа-канал нормала.


Последним пунктом является сохранение созданных текстур в DDS формате. Файл -> Сохранить как, выбираем расширение DDS. В открывшемся диалоговом окне нам предлагают выбрать тип текстуры и степень сжатия. Подробно про разные алгоритмы сжатия можно почитать тут и еще тут. Сейчас я сохраняю в DXT5.


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







Достаточно было зайти в Скай один раз, чтобы убедиться, что все в порядке.

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



8 комментариев:

  1. Рейтинг завышен, максимум PG-13 ¯\_(ツ)_/¯ А в целом фанфик годный и интересный, хорошее знание канона (^_~)

    ОтветитьУдалить
    Ответы
    1. Спасибо ʕ ᵔᴥᵔ ʔ
      Завысила специально, вдруг для кого-то покажется слишком сложно. В основном из-за 3D макса.

      Удалить
  2. Спасибо огроменное!!! Очень полезная информация,особенно для тех, кто начинает проявлять любопытство к данной тематике...

    ОтветитьУдалить
    Ответы
    1. Пожалуйста :) Рада, что пригодилось.

      Удалить
  3. есть некоторые, грубые ошибки ... но в целом - отлично и познавательно.

    P.S.
    К примеру - цитата:
    "Добиться лучшего эффекта можно несколькими простыми действиями. Копируем полученный слой, ставим ему режим перекрытия и применяем на нем фильтр Размытие по Гауссу. А дальше только нажимаем Ctrl+J (скопировать слой) и Ctrl+F (применить последний фильтр, в нашем случае "размытие")."

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

    К делу: при смешивании карт нормалей... карты накладываете в режиме Overlay (можете размыть если это требуется)... НО !!! Синий канал обоих карт (который и определяет максимальную высоту) - вырезаете из обоих карт и отдельно смешиваете через Multiplay. После этого смешанный вставляете в основную, в которой каналы были совмещены через Overlay.

    Успехов... ;)
    Остальные ошибки не столь критичны - по этому не стоит на них зацикливаться.

    ОтветитьУдалить
    Ответы
    1. А вот этого не знала, благодарю :)
      Главная проблема в основном в том, что приходится всю информацию по крупицам собирать с разных форумов, блогов..порой даже из комментариев к модам. А еще с зарубежных ресурсов, вот уж где максимальная вероятность чего-то не понять. :С Иногда даже специально "мастерские" скрывают от обычных пользователей ( ・_・)

      Удалить
  4. Спасибо. Очень познавательно!

    ОтветитьУдалить