Статья № 51 bump mapping;
 Автор Kirk Barnes, 22.06.2003 [прислать статью]


Данная статья взята с сайта id-games.narod.ru и размещена с разрешения автора.

Уважаемый всеми продвинутыми мэпперами мира програмист q3map2 господин [Ydnar] порадовал нас нововведением, известным как "рельефное текстурирование" (bumpmapping).

Что нам понадобится, чтобы самим сделать этот эффект:

1. Adobe Photoshop (версии 6-7)
2. Плагин от Nvidia который генерит карты высот скачать его можно [здесь]
(данный плагин требует установленного в системе DirectX 9)
3. Notepad для написания шейдера.
4. q3map2 версии не ниже 2.3.24. Скачать новую версию можно [здесь]
5. Если у Вас установлен Photoshop версии 7.0 - не помешает на будущее (например, для работы с TGA текстурами, содержащими альфа-канал) установить файлик [Targa.8bi] от шестого фотошопа, в директорию File Formats (например - C:\Program Files\Adobe\Photoshop 7.0\Plug-Ins\File Formats) поверх существующего файла.
(targa.8bi от седьмого фотошопа НЕ сохраняет файлы TGA, содержащие альфа-канал)

Работа в Photoshop:

После того как был скачан плагин для Photoshop'a его необходимо подключить к нему. Для этого плагин NormalMapFilter.8BF копируем в папку плагинов программы (к примеру - C:\Program Files\Adobe\Photoshop 7.0\Plug-Ins\Filters). После этого запускаем программу и открываем файл с текстурой, к которой мы хотим сгенерить карту высот.

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

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

Нажимаем ОК.
Появляется окно фильтра, в котором мы выбираем - Filter Type: 4 sample (Filter type означает, по какому количеству сэмплов расчитывается фильтр). Значение 4 является оптимальным
Затем в окне Scale выбираем уровень высоты. Потом в окне Alternate Conversions выставляем, по какому принципу раскладывается цвет (оптимально - Max R,G,B).
После чего нажимаем ОК. Полученную карту высоты сохраняем как файл TGA 32 bit. Итак - мы получили карту высот.

Пишем свой шейдер:

Типовой шейдер имеет следущий вид:
textures/box/nukebox
{
qer_editorimage textures/box/box1.tga
(текстура которая видна в радианте)
q3map_normalimage textures/box/box1_bump.tga
(карта высот сгенеренная в photoshop)
{
map $lightmap
}
{
map textures/box/box1.tga
(собственно сама накладываемая текстура)
blendfunc gl_dst_color gl_zero
}
}

Подготовка брашей в Radiant.

Браши на которых будут класться текстуры с "бампом", необходимо сделать func_group, присвоить этой группе ключ -lightmapscale со значением 0.1. Надо учитывать, что данный эффект не расчитан на использование везде. Чем больше браш - тем меньше виден рельеф.

Считаем карту:

Для компиляции необходимо, чтобы bsp расчитывался с ключем -meta, а light с ключем -super 2 (чем выше значение тем лучше).

Вот то, что должно в результате получиться в игре:

А вот тестовый режим, в котором можно расмотреть сам рельеф: (Чтобы его вызвать надо набрать в консоли /r_lightmap 1)

Cкачать заготовку можно [тут] 1.5mb