В своё время на форуме было сломано немало копий в жарких спорах на предмет того, как же правильно переконвертить "зелёные" нормалки сталкера в привычный "синий" формат. Большинство утверждало, что надо просто свапнуть каналы, кое-кто говорил, что даже со всеми свапами получается ерунда. Всё дело в том, что в сталкере не просто свапнуты каналы. Бамп в сталкере хранится в двух текстурах, с суффиксами _bump и _bump#. Вы пытались извлечь его из одной и разумеется получалась ерунда. Вот код шейдера для понимания (shaders\r2\sload.h):
Самое смешное, что авторы сталкера налажали в своём же собственном шейдере. Nu - это у нас пиксель из texture_bump, a NuE соответственно из texture_bump#. Во первых в трёхкомпонентную нормаль они пытаются записать четыре компонента. По умолчанию последний компонент - т.е. X у нас не пишется вовсе, т.к. для него нехватает места. Следовательно нормаль расположена в порядке: альфа - X, синий - Y, зелёный - Z. красный - это вообще спекуляр-мапа и не имеет к бампу отношения. NuE.xyz - это ошибка диффузии. DXT корёжит нормалки и этим никого не удивишь. GSC придумала записывать разницу ошибки в отдельную текстуру. Довольно топорное решение, но ведь и GSC это не Crytek. Как придумали, так и сделали. А дальше самое смешное - вместо того чтобы взять хейтмапу из альфа-канала (компонента w), они берут Z-компоненту диффузии ошибки нормали и используют её как хейтмапу.
Можете сами открыть любую _bump# текстуру и посмотреть как выглядит альфа и как B-канал.
Пакетный конвертор текстур под названием stalker2tga переделан из maketex и работает в обратную сторону - из dds текстур создаёт tga. Интерфейс по тому же принципу кнопки "сделать круто". Достаточно распаковать gamedata из паков сталкера, положить программку в gamedata\textures, запустить её и подождать пока она сама управится.
Обратите внимание, что хейтмапа сохраняется в альфа-канал глосс-мапы.
Update at 17.05.2019
- исправлен баг детектирования альфа-канала в DXT3.
Вложение: stalker2tga.zip (27.5 кб)
Этот файл был скачан 387 раз.
__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.
Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo
Дядя Миша писал: Тулза не для сталкера, тулза для того чтобы использовать нормалмапы из сталкера, например в параное.
То есть, чтобы воровать модели из Сталкера в Параною, я так это понял?
__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.
Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo