В общем, я в процессе работы над движком подумал что неплохо было бы иметь свой конвертер карт высот в карты нормалей.
Я не художник поэтому не хотел связываться с фотошопами и плагинами для них.
К тому же у меня всё автоматизировано на батниках поэтому хотелось иметь легкую тулзу с командной строкой.
Еще одним недостатком найденных мной в инете тулз была невозможность менять порядок координат в карте нормалей (и приходилось менять в шейдере, что является неправильным) и к тому же имелось много готовых карт нормалей, но с разным порядком координат, и было бы неплохо их конвертировать в один формат.
Поэтому я сделал такую тулзу.
hm2nm_tool.zip
hm2nm_tool_v002.zip
Основные фичи:
* Генерация карт нормалей (с установленным форматом координат) из карт высот.
* Конвертация карт нормалей из одного формата координат в другой.
* Командная строка.
* Работа в DIB (независимым от девайса или gapi форматом).
* Не требуется сторонних библиотек, а значит код в будущем легко портировать.
Однако от сюда следует, что пока поддерживается только 24 битный bmp - я еще не написал коды для работы с другими форматами изображения.
С другой стороны это не является задачей этой тулзы.
Это хелп:
>hm2nm.exe [keys]...
keys:
-d, --destination=PATH destination file
-s, --source=PATH source file
-h, --help this help
-v, --version tool version
-i, --info view source file info
-t, --tile tile image
-f, --format=XYZ format of the output image:
px, nx positive/negative X axis
py, ny positive/negative Y axis
pz, nz positive/negative Z axis
"pxpypz" by default
-c, --convert convert normalmap->normalmap (used to change the format)
-p, --power=POWER scale of normals
example:
>hm2nm.exe -s=myhm.bmp -d=mynm.bmp -t -p=2.0
>hm2nm.exe -s=mynm.bmp -d=mynm2.bmp -c -t -f=nxnypz
Пример работы тулзы:
->
Генерация нормали в текущем текселе происходит с учетом соседних текселей изображения карты высот.
Ключом -t можно генерировать изображение для тайла.
Например есть такая карта высот:
Если сгенерировать без тайла будет:
А если с тайлом, то будет:
Обратите внимание на крайние тексели изображения (увеличьте с помощью чего-нибудь) - если изображения замостить то будет плавный переход.
Выходное изображение можно отформатить с помощью -f=...
По умолчанию идет обычный формат pxpypz - подходит как раз для моих шейдеров.
Но можно поменять как порядок так и знак: -f=nynxpz или например -f=pxpxpx
Ключ -c говорит только переформатировать одну нормал карту в другую.
Например если использовать -f=nxnypz
То из выпуклых букв:
Получатся впуклые:
//================================================== ============
Добавил ключ с параметром "--power".
Теперь можно регулировать "силу" нормал карты.
Однако имейте ввиду что при одновременном использовании хаймепы и нормалмепы в шейдере их значения нужно правильно соотносить.
-p=10.0