Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Проекты > Проекты C++

Ответ
 
Опции темы
Старый 05.04.2014, 21:10   #1
Samodelkin
Мастер
 
Регистрация: 12.01.2009
Сообщений: 978
Написано 388 полезных сообщений
(для 631 пользователей)
heightmap->normalmap tool

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


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
Пример работы тулзы:
Название: h1.bmp
Просмотров: 1141

Размер: 192.1 Кб->Название: n1.bmp
Просмотров: 1088

Размер: 192.1 Кб

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

Например есть такая карта высот:
Название: h2.bmp
Просмотров: 1131

Размер: 192.1 Кб

Если сгенерировать без тайла будет:
Название: n2_1.bmp
Просмотров: 1123

Размер: 192.1 Кб

А если с тайлом, то будет:
Название: n2_2.bmp
Просмотров: 1109

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

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

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

Размер: 192.1 Кб

Получатся впуклые:
Название: n3.bmp
Просмотров: 1182

Размер: 192.1 Кб

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

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

-p=10.0
Название: n5.bmp
Просмотров: 1241

Размер: 192.1 Кб
Название: n4.bmp
Просмотров: 1112

Размер: 1.74 Мб

Последний раз редактировалось Samodelkin, 06.04.2014 в 23:55.
(Offline)
 
Ответить с цитированием
Эти 6 пользователя(ей) сказали Спасибо Samodelkin за это полезное сообщение:
ABTOMAT (05.04.2014), ARA (05.04.2014), impersonalis (05.04.2014), pax (07.04.2014), SBJoker (05.04.2014), St_AnGer (07.04.2014)
Старый 05.04.2014, 21:31   #2
ARA
ТЫ ЧООО?
 
Аватар для ARA
 
Регистрация: 26.02.2007
Сообщений: 3,369
Написано 2,020 полезных сообщений
(для 7,192 пользователей)
Ответ: heightmap->normalmap tool

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

__________________
Вертекс в глаз или в пиксель раз?
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо ARA за это полезное сообщение:
Mr_F_ (05.04.2014), pax (07.04.2014), Samodelkin (05.04.2014)
Старый 05.04.2014, 22:42   #3
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: heightmap->normalmap tool

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

Посмотри крейз - там отдельно настраивается интенсивность разного размера объёмностей - думаю, он даунсемплит хейт и считает нормали из версий разного разрешения, потом их совмещает друг с другом в одну (догадки).
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Samodelkin (05.04.2014)
Старый 05.04.2014, 23:01   #4
Samodelkin
Мастер
 
Регистрация: 12.01.2009
Сообщений: 978
Написано 388 полезных сообщений
(для 631 пользователей)
Ответ: heightmap->normalmap tool

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

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

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

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

Генерить из диффузы не обладая полными данными о источнике света и материале не совсем правильно - я такой способ не одобряю.
Тоже самое спекуляра касается.
Я щитаю это должен делать художник по материалам вручную.
(Offline)
 
Ответить с цитированием
Старый 07.04.2014, 00:05   #5
Samodelkin
Мастер
 
Регистрация: 12.01.2009
Сообщений: 978
Написано 388 полезных сообщений
(для 631 пользователей)
Ответ: heightmap->normalmap tool

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

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

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

Еще вопрос у меня такой: допустим есть у меня хайполи и лоуполи геометрия в максе и нужно снять хеймэпы и нормалмэпы (или только хеймэпы), с помощью чего лучше всего это делать?
Или так вообще не делают?
Тогда как?
(Offline)
 
Ответить с цитированием
Старый 07.04.2014, 00:24   #6
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: heightmap->normalmap tool

Ещё есть плагин для Photoshop'а от Nvidia.
https://developer.nvidia.com/nvidia-...dobe-photoshop
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Samodelkin (07.04.2014)
Старый 07.04.2014, 00:31   #7
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: heightmap->normalmap tool

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

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

Еще вопрос у меня такой: допустим есть у меня хайполи и лоуполи геометрия в максе и нужно снять хеймэпы и нормалмэпы (или только хеймэпы), с помощью чего лучше всего это делать?
xNormal или прямо в максе
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Samodelkin (07.04.2014)
Старый 07.04.2014, 00:38   #8
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: heightmap->normalmap tool

Сообщение от Mr_F_ Посмотреть сообщение
он немногим отличается от тулзы автора - крейзи бампу в подмётки не годится.
Ну вот и выложил, иначе выходит что автор изобретает велосипед уже существующей туулзы от Nvidia.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Mr_F_ (07.04.2014)
Старый 07.04.2014, 01:16   #9
Samodelkin
Мастер
 
Регистрация: 12.01.2009
Сообщений: 978
Написано 388 полезных сообщений
(для 631 пользователей)
Ответ: heightmap->normalmap tool

Сообщение от moka Посмотреть сообщение
Ну вот и выложил, иначе выходит что автор изобретает велосипед уже существующей туулзы от Nvidia.
Я упоминал про то что не хочу связывать с фотошопом и его плагинами - мне нужна тулза, которую в перспективе можно интегрировать в тулсет для своего движка.
Да и наверное батчинга у нее нет.
Или ты специально выложил чтобы я НЕ делал как у них? Ок, тогда я посмотрю.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
moka (07.04.2014)
Старый 07.04.2014, 02:32   #10
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: heightmap->normalmap tool

мне нужна тулза, которую в перспективе можно интегрировать в тулсет для своего движка.
насколько мне известно, в основе нвидия плагина лежит либа NVTT:
http://code.google.com/p/nvidia-text...ng_Normal_Maps
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо Mr_F_ за это полезное сообщение:
HolyDel (07.04.2014), moka (07.04.2014), Samodelkin (07.04.2014)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com