Как использовать карты нормалей в UT2004

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

Что такое карта деталей? Это ч/б картинка, которая кладется поверх любого диффуза в режиме, который в фотошопе называется overlay. Те пиксели, которые светлее чем 128/128/128, сделают нижний слой ярче, те что темнее — соответственно темнее.
Зачем она нужна? Когда используешь бесшовные текстуры неизбежно возникает проблема повторяющегося рисунка. Если сильно растянуть текстуру, вблизи она будет размытой, если не растягивать — издали будет понятно что это одна и та же картинка 20 раз подряд.
Карта деталей это компромисс — она всегда меньшего масштаба чем основная текстура, но видна только вблизи. Таким образом основная текстура кажется детальнее чем она есть на самом деле, и выглядит одинаково хорошо и вблизи и издали. Ну, это в теории так. На практике как не выпендривайся а шейдеры 10-летней давности всегда выглядят как шейдеры 10-летней давности.

Если разрешение и масштаб карты деталей совпадает с разрешением и масштабом диффуза, накладывать их друг на друга — пустая трата видеопамяти. Абсолютно идентичного эффекта можно добиться, склеив эти карты в одну в фотошопе. Суть карты деталей в разнице масштабов, никакого другого магического эффекта она не имеет.
Я подозреваю что вся эта история началась после того как убер раскопал пак персонажей из ут3 для тукея. Забегая вперед хочу сказать что пак этот делал тот еще рукожоп, и материалы там просто караул, не говоря уже про привязку к скелетам.
Вот специально для убера показываю:

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

А теперь почему не нужно делать вообще ничего из вышеперчисленного.

Начнем с того что такое карта нормалей. Карта нормалей это никакая не картинка, это информация о векторах, используемых для расчета освещения, для удобства сохраненная в виде графического файла. Вспомним из школьной геометрии что такое нормаль: https://ru.wikipedia.org/wiki/Нормаль
Чтобы описать нормаль в трехмерном пространстве нужны 3 координаты. Так удачно получилось что все мониторы работают в трехканальном режиме, и подавляющее большинство графических файлов тоже содержит в себе 3 канала — красный, синий и зеленый, — из которых смешиваются все остальные цвета.
Поэтому карты нормалей очень удобно записывать как графические файлы: красный и зеленый каналы - оси x и y, синий канал - ось z. Значение цвета 128 соответствует исходному положению нормали, больше 128 - отклонение в одну сторону, меньше - в другую.

Карта нормалей по своей природе асимметрична. Если нормаль отлоняется влево, соответствующий ей пиксель будет одного цвета, если вправо — совсем другого. Более того, цвет пикселя также зависит от положения полигонов на текстурной развертке, то есть если отрендерить карту нормалей, потом перевернуть развертку вверх ногами, отрендерить еще раз, перевернуть полученный файл обратно в фотошопе и сравнить с предыдущим — они не совпадут.
Какой вывод из этого напрашивается? Используя карты нормалей как простые текстуры ты неизбежно получаешь швы и левые тени. Вот, например, та "карта деталей" из пака персонажей ут3:

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

Тем не менее карты нормалей использовать можно и нужно.

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

Во-вторых, с карты нормалей можно отрендерить оклюжен и спекуляр в любом 3д редакторе. Я делаю в максе, можно в Майе, Блендере и т. д.
Оклюжен в максе рендерится в пару кликов.
Сначала делаем вот такой материал с нашей картой нормалей:

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

Потом открываем render to texture и следуем инструкциям из этого видео, там все несложно.

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

Эту текстуру мы открываем в фотошопе и кладем на диффуз в режиме multiply.
Получится примерно так:

Теперь можно переходить к спекуляру. Для этого понадобится симметрично расставить несколько источников освещения вокруг нашей модели. Я ставлю 6, вообще дело вкуса.

Затем заливаю диффуз черным и выкручиваю спекуляр:

После этого идем в render to texture, выбираем там complete map, убираем галочку с shadows и запекаем. Получится что-то такое:

Это голое освещение, запеченное в текстуру. Чтобы матерчатые штаны и металл не блестели одинаково ярко, нам нужна маска, то есть тот спекуляр что шел в комплекте с моделью.
Кладем его на наш запеченный спек в режиме multiply. Результат скорее всего окажется слишком темным, так что вооружаемся adjustments layers и начинаем подгонять яркость на глаз. С этого момента можно уже периодически экспортировать получившуюся маску в UEd чтобы не делать наугад.
Не исключено что какие-то области придется пригасить вручную, какие-то наоборот высветлить, так как для разных движков спекуляры выглядят по-разному и никогда не подойдут для тукея на 100%. В общем, ручная работа. Основные правила такие: металлы блестят больше, пластик меньше, ткани почти не блестят. Отражение на металле всегда цвета самого металла, для всех остальных материалов оно почти бесцветное.

Последний штрих — sharpen. Шарпить нужно так чтобы маска выглядела вырвиглазно, вот например кусок моего финального спека крупным планом, я рендерил его в 2048х2048:

Хитрость в том, что поскольку это всего лишь маска для кубмапы, на модели она будет выглядеть в разы бледнее чем в фотошопе, в результате чего самые мелкие детали неизбежно пропадут если не принять мер заранее. Вообще UT2004 очень страдает от недостатка резкости.

Ну и в завершение, пару слов о glow/emissive/self-illumination.
Все эти карты в современных движках делаются в расчете на постпроцессинг. В тукее ничего подобного к сожалению нет и белое пятно на self-illumination mask так и будет выглядеть белым пятном, а вовсе не лампочкой.
Поэтому emissive надо дорабатывать вручную в фотошопе. Я добавляю немного блюра, повышаю контраст и подкрашиваю текстуру:

Вот так выглядит финальный шейдер в UEd:

А вот так он выглядит на модели, можете сравнить с тем что было раньше:

utx лежит тут:
http://sta.sh/015qgtipnigx
Upd. Щас сообразил что забыл вложить кубмапу в utx. Если что такая кубмапа есть тут

Вам понадобится модель из UT3 пака.

Я думаю зарелизить исправленную версию, но сначала хочу еще переделать весь риг, потому что он там тоже ужасен, так что пока только текстурки.

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

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

Информация

Автор: Aberiu

Добавил: Aberiu (Другие статьи пользователя)

Дата добавления: 02 Январь 15, 20:09

Категории: Unreal Tournament 2004 - Моддинг

Теги: рукожопие, карты нормалей, убер

Статистика

, 1

Aberiu
Aberiu 04 Январь 15
О, картинки поправили. Спасибо!
Dark Lile
Dark Lile 03 Январь 15
Сохраню эту статью для коллекции хоть наврятли когда она мне уже пригодится...
Aberiu
Aberiu 02 Январь 15
Да, а то я заметил что тут в комментариях сообщения куда-то периодически прпадают. Вот я про спек уже отвечал в комментах к одной из своих моделей а теперь там половины комментов нет.
UberSoldier
UberSoldier 02 Январь 15
В смысле треде? На форуме что ль?

Кстати у меня УТ явно не страдает нехваткой контрастности ha

Aberiu
Aberiu 02 Январь 15
Пости скриншоты у себя в треде, посмотрим.
UberSoldier
UberSoldier 02 Январь 15
Да, про ддс плагин знаю, фотошоп вместе с ним есть. Нормали в любом случае предется по текстуре делать, ибо другово варианта нет, я же модели не буду заного переделывать \.

Хмм, вот щас попробывал с первым пунктом, про видео, получается далеко не стандартный чернобелый дефуз, а такое ощущение что он мне текстуру на кусочки разделил. Тут ничего не зависит что макс 2009? Может лучше другой макс ставить?
Или может я что не догледел.

Но вообще идея мне понравилась и если разобратся и по порядочку потихой текстуры так перерендерить в игре, то думаю толк из этого будет.
Aberiu
Aberiu 02 Январь 15
Если ты хочешь ее делать из диффуза, то кидай на диффуз в фотошопе фильтр high pass, после чего используй nvidia normal map plugin,  загуглишь в интернете он легко находится. Есть еще прога crazybump, но она платная, и в XNormal есть фича convert height map to normal map.

Вообще карты нормалей из диффуза обычно не очень аккуратные, настоящие карты нормалей для персонажей и окружения делаются путем проецирования нормалей с модели высокого разрешения (несколько миллионов полигонов как правило) на игровую модель. Но это для тебя не вариант в силу трудоемкости конечно, просто на всякий случай информирую.
UberSoldier
UberSoldier 02 Январь 15
Через что лучше всего создавать карту нормалей? У меня есть прога битмап2матерьял
UberSoldier
UberSoldier 02 Январь 15
На счет деталей я все знал что к чему и видел разные виды шейдеров, а идея на черно белое под дефуз появилась у меня когда увидел модели в какойто игре где она была заточена в бамп, вот и пихнул в дефуз и да, она в редких случаях делает что то полезное, но все же так в графу я не углублялся, да и в рендерах и максе опыт детский ещё.

Но гайд жесть, попробую сделать так, посмотрим что выйдет. Спасибо, полезная вещь, если так все окружение отрендерить, то думаю ут на годик вперед так продвинется :)
Aberiu
Aberiu 02 Январь 15
В любом случае обесцвечивание карты нормалей это одна из тех глупостей которые происходят от полнейшего непонимания человеком того что он делает.

В принципе есть и другие способы  извчлечь что-нибудь полезное из карты нормалей, но все они технологические и предполагают рендер изображения, а не пляски с бубном в фотошопе. Есть например такая замечательная маленькая бесплатная прога XNnormal, фактически уже стандарт индустрии для запекания всяких карт. Там на закладке tools есть convert tangent space normal map to cavity map. Cavity это по сути дела оклюжен для мелких деталей, маска впадинок и углублений. Вот тут есть иструкция, начиная с "Using Your Normal Map to Create Cavity Maps":
http://www.donaldphan.com/tutorials/xnormal/xnormal_occ.html
Aberiu
Aberiu 02 Январь 15
Код
Occlusion пихать в SelfIlumination?
Я ж вроде подробно описал что с оклюженом делать. Оклюжен это карта рассеянного освещения, его можно класть на диффуз в фотошопе оверлеем или мультиплаем - смотря как лучше выглядит. В тукее ему делать нечего.
GP
GP 02 Январь 15
О синем канале сам не догадалса... Видел недавно статью, что на нормали можно просто поставить черный фон и обесцветить... suspicious
а стоп, в тукее Occlusion пихать в SelfIlumination?
==================================================================
А картинки фиксить не надо, все нормально видно при простым уменьшением масштаба (в самом браузере), у меня много тут обрезало раньше... а картинки удобнее отдельно открывать и зумить если надо...