forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Проекты C++ (http://forum.boolean.name/forumdisplay.php?f=56)
-   -   heightmap->normalmap tool (http://forum.boolean.name/showthread.php?t=19075)

Samodelkin 05.04.2014 21:10

heightmap->normalmap tool
 
Вложений: 10
В общем, я в процессе работы над движком подумал что неплохо было бы иметь свой конвертер карт высот в карты нормалей.
Я не художник поэтому не хотел связываться с фотошопами и плагинами для них.
К тому же у меня всё автоматизировано на батниках поэтому хотелось иметь легкую тулзу с командной строкой.
Еще одним недостатком найденных мной в инете тулз была невозможность менять порядок координат в карте нормалей (и приходилось менять в шейдере, что является неправильным) и к тому же имелось много готовых карт нормалей, но с разным порядком координат, и было бы неплохо их конвертировать в один формат.
Поэтому я сделал такую тулзу.


Вложение 20349
Вложение 20355


Основные фичи:
* Генерация карт нормалей (с установленным форматом координат) из карт высот.
* Конвертация карт нормалей из одного формата координат в другой.
* Командная строка.
* Работа в 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

Пример работы тулзы:
Вложение 20343->Вложение 20344

Генерация нормали в текущем текселе происходит с учетом соседних текселей изображения карты высот.
Ключом -t можно генерировать изображение для тайла.

Например есть такая карта высот:
Вложение 20345

Если сгенерировать без тайла будет:
Вложение 20346

А если с тайлом, то будет:
Вложение 20347
Обратите внимание на крайние тексели изображения (увеличьте с помощью чего-нибудь) - если изображения замостить то будет плавный переход.

Выходное изображение можно отформатить с помощью -f=...
По умолчанию идет обычный формат pxpypz - подходит как раз для моих шейдеров.
Но можно поменять как порядок так и знак: -f=nynxpz или например -f=pxpxpx

Ключ -c говорит только переформатировать одну нормал карту в другую.
Например если использовать -f=nxnypz
То из выпуклых букв:
Вложение 20344

Получатся впуклые:
Вложение 20348

//================================================== ============

Добавил ключ с параметром "--power".
Теперь можно регулировать "силу" нормал карты.
Однако имейте ввиду что при одновременном использовании хаймепы и нормалмепы в шейдере их значения нужно правильно соотносить.

-p=10.0
Вложение 20354
Вложение 20353

ARA 05.04.2014 21:31

Ответ: heightmap->normalmap tool
 
Для этих целей самое наверное лучшее решение - старый добрый Crazy bump. Есть батчинг. Кушает даже psd формат. Генерит нормалмапы из фото, хейтмапы из нормалмап, нормалмапы из хейтмап и спекуляр в нагрузку.


Mr_F_ 05.04.2014 22:42

Ответ: heightmap->normalmap tool
 
Samodelkin, покажи как твой генератор работает с более сложными хейтмапами, более объёмными и жирными формами.
Много видел тулз, которые способны на нормалмапу аля небольшой рельеф - но только у крейзи бампа хорошая сочная объёмность с учётом крупных форм.

Посмотри крейз - там отдельно настраивается интенсивность разного размера объёмностей - думаю, он даунсемплит хейт и считает нормали из версий разного разрешения, потом их совмещает друг с другом в одну (догадки).

Samodelkin 05.04.2014 23:01

Ответ: heightmap->normalmap tool
 
crazybump я посмотрю.
Тут же дело в том что я вообще ничего подходящего не нашел - если крези бамп подойдет то и нефиг велосипеды строить.

Цитата:

окажи как твой генератор работает с более сложными хейтмапами, более объёмными и жирными формами.
Ты имеешь ввиду что слишком плоско?
Я тогда добавлю параметр силы и будет сочней если кому надо.
Вычисления идут в 3д так что никакого ограничения на сочность и рельефность нет - главное чтобы формат изображения давал возможность это закодировать.
Опять же от шейдера зависит, он может работать и с 48 битной float16 текстурой.

Тут такой момент: отношение данных в нормалпаме и хаймапе должно быть однозначным.
Я взял по умолчанию размер текселя 1.0 и диапазон высоты хаймепы тоже 1.0, поэтому если в хаймепе два текселя черный и белый рядом, то нормаль между ними будет 45 градусов.
Дальше уже в шейдере можно одним и тем же коэффициентом двигать сочность хаймепы и нормалмепы и рельефность будет правильно меняться.
Просто я это всё к тому что в этой тулзе лучше не добавлять коэффициентов ,а делать это в шейдере где есть все данные о геометрии.

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

Генерить из диффузы не обладая полными данными о источнике света и материале не совсем правильно - я такой способ не одобряю.
Тоже самое спекуляра касается.
Я щитаю это должен делать художник по материалам вручную.

Samodelkin 07.04.2014 00:05

Ответ: heightmap->normalmap tool
 
(Обновил первый пост)
* Добавил ключ -p, --power - можно сделать более сочные нормали.
* Чуток поправил коды загрузки изображения.
(Картинки тоже в первом посте добавил внизу)

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

Посмотрел crazybump - он платный !!!

Еще вопрос у меня такой: допустим есть у меня хайполи и лоуполи геометрия в максе и нужно снять хеймэпы и нормалмэпы (или только хеймэпы), с помощью чего лучше всего это делать?
Или так вообще не делают?
Тогда как?

moka 07.04.2014 00:24

Ответ: heightmap->normalmap tool
 
Ещё есть плагин для Photoshop'а от Nvidia.
https://developer.nvidia.com/nvidia-...dobe-photoshop

Mr_F_ 07.04.2014 00:31

Ответ: heightmap->normalmap tool
 
Цитата:

Ещё есть плагин для Photoshop'а от Nvidia.
он немногим отличается от тулзы автора - крейзи бампу в подмётки не годится.

Цитата:

он платный !!!
ты знаешь, что делать.

Цитата:

Еще вопрос у меня такой: допустим есть у меня хайполи и лоуполи геометрия в максе и нужно снять хеймэпы и нормалмэпы (или только хеймэпы), с помощью чего лучше всего это делать?
xNormal или прямо в максе

moka 07.04.2014 00:38

Ответ: heightmap->normalmap tool
 
Цитата:

Сообщение от Mr_F_ (Сообщение 278505)
он немногим отличается от тулзы автора - крейзи бампу в подмётки не годится.

Ну вот и выложил, иначе выходит что автор изобретает велосипед уже существующей туулзы от Nvidia.

Samodelkin 07.04.2014 01:16

Ответ: heightmap->normalmap tool
 
Цитата:

Сообщение от moka (Сообщение 278509)
Ну вот и выложил, иначе выходит что автор изобретает велосипед уже существующей туулзы от Nvidia.

Я упоминал про то что не хочу связывать с фотошопом и его плагинами - мне нужна тулза, которую в перспективе можно интегрировать в тулсет для своего движка.
Да и наверное батчинга у нее нет.
Или ты специально выложил чтобы я НЕ делал как у них? Ок, тогда я посмотрю.

Mr_F_ 07.04.2014 02:32

Ответ: heightmap->normalmap tool
 
Цитата:

мне нужна тулза, которую в перспективе можно интегрировать в тулсет для своего движка.
насколько мне известно, в основе нвидия плагина лежит либа NVTT:
http://code.google.com/p/nvidia-text...ng_Normal_Maps


Часовой пояс GMT +4, время: 16:58.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot