Создание, описание особенностей и объяснение работы карт рельефа
Материал из S.T.A.L.K.E.R. Inside Wiki
W.I.P Допиливаю как состав статьи со стилем изложения, так и исправляю возможные опечатки (конец писался глубокой ночью)
В этой статье я постараюсь объяснить создание правильных карт bump и bump# с помощью Adobe Photoshop и X-ray SDK. ТАК ВЕРСТАЮТ ТОЛЬКО МУДАКИ
Т.к. я в основном занимаюсь персонажами, то параллакс (или псевдопараллакс - тем, кто работает с шейдерами, виднее) как таковой тут не рассматривается. Благодаря одному юзеру с ап-про и надобности сделать пару "кирпичиков" узнал, что альфа таки юзается для этого самого параллакса.
Сие подобие статьи планирую до конца лета привести в более-менее адекватное состояние.
Содержание
Теория
Для начала попытаюсь объяснить структуру карт bump и bump#, а также, что же собой они представляют. Всё ниженаписанное не обязательно верно на все 100%.
bump
Карта bump представляет собой обычную карту нормалей в формате A(BGR) (типично для формата сжатия DXT5_nm). Разработчики использовали такой порядок по очень простой причине - DXT компрессия гораздо меньше "портит" текстуру, так как альфа-канал не подвергается компресии и остается практически в исходном виде.
Каналы:
R - Specular map - карта интенсивности блика G - ось Z - указывает нормали в глубину от поверхности B - ось Y - указывает нормали вверх и вниз (вертикальные) Alpha - ось X - указывает нормали влево и вправо (горизонтальные)
bump#
Bump# - очень интересная карта, назначение которой для многих непонятно. Так как нагуглить какую-либо информацию насчет правильного названия мне не удалось, я называю ее просто "Normal error map". Не знаю, используются ли подобные технологии в других играх, но встретить ее где-либо, кроме сталкера, мне не удалось. Эта карта "фиксит" ошибки сжатия DXT у бампа и генерируется только с помощью СДК, поэтому всякие непонятные действия некоторых пользователей, вроде вставки вместо нее обычной или обесцвеченной карты нормалей, а также описанного в статье Argus'a заливания серым со вставкой в альфа-канал карты высот, использовать нельзя. Выглядит как серое зашумленное изображение.
Каналы:
R - ошибки оси X карты нормалей G - ошибки оси Y карты нормалей B - ошибки оси Z карты нормалей Alpha - карта высот; не используется
Для сравнения:
Работа в фотошопе
Здесь также понадобится NormalMapFilter от nVidia, полагаю, у вас он уже установлен, так как он идет в комплекте с dds плагином. Все файлы сохраняются в tga 24 bits/pixel или 32 bits/pixel в зависимости от того, используется ли альфа-канал. Перед сохранением следует перевести изображение из 16-битного в 8-битное.
Карта высот
На карте высот белым цветом обозначены выпуклости, черным - впадины. Если бамп делается для текстур окружения, то можно начать работу с оригинальной текстуры, если же бамп делается для персонажа, то такой способ обычно неприемлем, зачастую из-за камуфляжа, который никак не должен сказываться на рельефе ткани. По сути, создание карты высот - процесс творческий, могу дать лишь несколько советов:
- Над картой высот работа должна проводиться строго в 16bits, причем с самого начала до финального экспорта в SDK
- Качественного результата не будет, если просто взять и засунуть диффуз в генератор, над текстурой придется тщательно поработать.
- Не обязательно пытаться показать на карте высот все детали и рельеф сразу, их можно добавить позднее, когда будет сгенерирована карта нормалей.
Пример сделан прямо во время написания статьи
Metro 2033
В метро вместо карт нормалей, как обычно бывает в большинстве игр, используется карта высот - файлы с постфиксом _bump. Они есть только в том случае, если вы распаковывали игру самостоятельно, большая часть сборщиков "Архивов моделей" их в архив не добавляет.
"Состав" карты высот Метро 2033:
R - пустой канал G - Specular map - карта интенсивности блика B - пустой канал Alpha - карта высот
SDK
Карта нормалей
При наличии уже готовой карты нормалей, изготовленной вами, из другой игры, zBrush или любой другой программы высокополигонального 3d моделирования, остается только добавить ее в SDK. Параметры:
- 0.4:
Type: 2D Texture, Format: 32 bit (8:8:8:8), MipMap Filter: Kaiser (здесь уже по желанию, я всегда использую Kaiser)
- 0.5/0.6, 0.7:
Type: Normal Map, MipMap Filter: Kaiser
Bump
С использованием отдельной карты нормалей bump карта изготавливается очень просто:
RGB - серый цвет, 128,128,128 Alpha - Specular Map
Параметры добавления в SDK не зависят от версии:
Type: Bump Map, в Special Normal Map указываем добавленную ранее карту нормалей.
Если же вдруг возникло желание обойтись без дополнительной карты нормалей, то добавление в SDK и каналы меняются:
RGB - карта высот Alpha - Specular Map
Это единственный вариант, когда параметр Virtual height действительно влияет на интенсивность получаемого бампа.