Как сделать бамп текстуру в фотошопе

Bump mapping

Normal’ный ликбез

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

Это будет наша “высокодетализированная” модель, хайполи, усложнять не будем, здесь и так все необходимое есть.

В качестве низко-детализированной модельки будет куб.

Что мы можем получить? Т.к. тема у нас про бамп и дисплейсмент, то их и получим, не буду вдаваться в технический процесс создания подобных карт, после него имеем две текстуры:

Черно-белая карта высот (она же карта дисплейсмента, названия гуляют от движка к движку)

И цветастая карта нормалей. Начну с первой, как более простой в плане понимания и реализации.

Карта высот черно белая, потому что в ней не требуется ничего кроме одного значения- непосредственно высоты, для этого достаточно одного канала в rgb картинке, или просто монохромного формата файла. Черный соответствует нулевой высоте, белый – максимально возможной.

Но тут важно помнить про дискретность цифрового мира и ограничения возможностей растровых форматов, к примеру, у большинства форматов на один канал всего 8bit, а это означает всего-то 256 градаций, вот и представьте себе рельеф, например, метр высотой, а мелкие детали на нём будет по 3 сантиметра, так себе детализация. Можно увеличивать разрядность картинки, её разрешение, но все это ведет к существенному увеличению веса файла. Как полумера – интерполяция между значениями высот, как видно из пэйнт примера- это лишь отчасти приблизит данные в текстуре к исходной поверхности.

Вторая текстура – карта нормалей. Вообще, нормали – это что-то из школьной геометрии, но если по простому, то, тыкая пальцем перпендикулярно поверхности, ваш палец и будет “нормалью”, т.е. вектором перпендикулярным касательной.

Почему текстура цветная? Да это только так кажется, на самом деле там две черно-белых карты перемешаны, наклон нормали по X и Y. Даже в фотошопе можно глянуть, если зайти в режим отображения RGB каналов. Серый цвет соответствует полностью перпендикулярному вектору нормали, черный – наклон в одну в сторону, белый – в противоположную.

Она могла бы так и остаться серой, если бы в синий канал не записывали дополнительную информацию об общем отклонении вектора от строго перпендикулярного положения, где белый – вектор никуда не отклонен, черный – вектор сильно отклонен, практически упал на поверхность. Не шибко полезные данные.

Вот мои и подобрались, к самому вопросу, бамп мэппинг что это? Возможные переводы bump – кочка,ухаб, выпуклость. В названии и лежит вся суть. При прорисовке светотени на полигоне, движок анализирует яркости рядом стоящих текселей из карты высот и на основе перепада высот, наклоняет уже новый вектор нормали в нужную сторону. Важно понимать, что все это работает только на уровне, сделать потемнее/сделать посветлее пиксель, т.н. пиксельный шейдер, хорошо видно по правой стенке куба, что там никакая не Семенович, а нулевой размер (кстати женщины активно пользуются похожими фэйками в макияже, но там это ближе к ambient occlusion :DDD)

Алгоритм такого бампа не позволяет полностью передавать все детали рельефа, основные проблемы – это та самая низкая битность растровых файлов и лимит градаций, поверхности с легким наклоном не будут выглядеть таковыми, на них появятся ступеньки.

Поэтому удел старого доброго бампа – текстуры микрорельефа, небольших неровностей, трещинок, бугорков, только чтобы создать небольшие затенения или игру бликов на шероховатых поверхностях.

Но зачем напрягать движок вычислением нормали из каких-то там перепадов, давайте скормим ему уже предпросчитанные нормали, запеченные в текстуре. Заодно и от ступенек можно избавиться, ведь 256 градаций на поворот нормали по одной оси + интерполяция = на глаз уже не заметно дискретности.

Большая прелесть карты нормалей в том, что для длинного затяжного подъема или спуска поверхности не нужно постоянно повышать или понижать яркость текселей, достаточно одного цвета, который говорит движку: “вот тут нормаль всегда смотрит на юго-запад, рисуй тень вот так, а блик вот так”. Однако разрешение текстуры, чем оно ниже, тем заметнее артефакты, например здесь заметен тонкий блик по контуру объекта, это блестит ненарочно образованная фаска, промежуточное значение между перпендикулярно записанной нормалью на плоскости и горизонтально нормалью на боку объекта.

Обратите внимание на конус сверху, от него не осталось и следа, это пример той детали, которую просто технически нормал бамп не может запечь, для него это таже плоскость, подумаешь немного выше, если карта высот оставляла хотябы кружок, то тут константа – #7f7fff.

Читать еще:  С какого возраста можно сделать карту сбербанка

Если убавить интенсивность, то “кочки”, нарисованные по методу normal bump выглядят неплохо, подходит такой метод уже для более глубоких деформаций: трещин, впадин, труб и панелей на объекте, болтиков, фэйковых фасок, закруглений граней, но кубик как был плоским, таковым и остался. Это не рельеф, а скорее барельеф.

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

Вот и я нет, дробим дальше.

1,700,000 полигонов на кубике. Круто, че. До изначальной формы все еще далеко.

Хорошо, что в vray есть свои методы displacement. Позволяющие раздробить поверхность на сотни миллионов полигонов, при этом не забивая ВСЮ память.

И тут не без ложки дегтя, пресловутые 8 бит, выглядит будто пьяный столяр ночью стамеской орудовал. Ярко-выраженные ступеньки, там где их не должно быть.

Но если все же прибегнуть к помощи 32-битных форматов, да с плавающей запятой, тогда можно сохранить очень много информации о высоте в каждом текселе, появляется плавность, но такая текстура весит в разы больше 8-битного собрата, а о jpeg вообще умолчу, там информации еще меньше.

Помните как выглядели эти элементы в оригинале.

Так я напомню. Пример того, что неподвластно простому дисплейсменту.

Но и это научились обходить, объединив подходы height map и normal bump в так называемый vector displacement map, к сожалению на своем примере мне нечем было запечь подобную текстуру, но пример из интернета намекает на возможности.

Еще я намеренно упустил parallax mapping, тоже сугубо попиксельный эффект, промежуточный способ между бампом и дисплейсментом, но т.к. в моей специализации параллакс практически не применим, то и рассказать со своим взглядом на эту технологию у меня не выйдет. Знаю только, что у параллакса тоже свои ограничения по применению, связанные с тем, что текстура как бы вдавливается в полигон, вызывая всякие артефакты на гранях поверхностей, кубик с параллаксом все равно останется кубиком, но с хитронарисовынными тенями и бликами, чтобы глаз обмануть.

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

Создание текстур рельефа bump

Материал из S.T.A.L.K.E.R. Inside Wiki

Содержание

Создание карт рельефа bump & bump#

Внимание! Уроки рассчитаны на пользователей, уже достаточно хорошо освоивших фотошоп. Различные вопросы типа “а где находится эта кнопачка. ” здесь не рассматриваются. Названия функций приведены на русском языке, у кого фотошоп англоязычный, ориентируйтесь по смыслу.

На данном уроке попробую подробно описать порядок создания карт рельефа в игре с помощью фильтра карт нормалей от nVidia. Действия, которые описаны ниже, я не буду называть ни самыми рациональными, ни самыми простыми. Просто так делаю я сам, и не обязую следовать им в точности.

Так вот, большинство текстур в игре имеют по два одноименных собрата с индексами _BUMP и _BUMP#. так вот эти две дополнительных текстуры и являются рельефом, или “бампом”.

К примеру, имеем мы текстуру STON.dds:

А сейчас будем делать для нее бампы. Как было сказано ранее, рельеф начинается с карты высоты, фильтр от nVidia здесь пока не нужен.

Карта высот

Большинство текстур имеют такое случайное свойство, как зависимость яркости от рельефа. например на большинстве фотографий кирпича прослойки либо темнее, либо светлее кирпича, чаще темнее. Так же это относится к доскам, текстурам ландшафта. Выпуклости имеют одну яркость, а впадины – другую. Этим можно сильно упростить создание карты высот. Например для основы карты высот можно взять один из каналов текстуры STON.dds. там как раз впадины темнее, выпуклости светлее – то что нам надо:

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

Читать еще:  Как тональный крем сделать на тон светлее

карта высоты готова. сделаем с нее дубликат, переведем в РГБ и найдем фильтр карт нормалей, он находится в самом низу списка фильтров.

Карты нормалей

Вот так выглядит окно фильтра. практически ничего менять здесь не надо, важна только группа “height generation”. Здесь можно выбрать тип фильтра, потыкав в разные режимы, можно увидеть в окне просмотра, что чем ниже режим, тем более размытой получается карта. В данный момент нам нужен самый первый режим “4 samples”, он дает наибольшую четкость, а при низких разрешениях текстуры это очень важно. Далее стоит обратить внимание на параметр “Scale” – это, как бы назвать, “сила рельефности” что ли, чем выше число, тем более рельефной будет текстура. Я обычно выставляю значение от 5 до 10. в редких случаях выше. Все зависит от того, насколько резки перепады на карте высоты. Для данной текстуры можно выставить значение 10. Жмем ОК. Получаем изображение такого вида:

Для полного счастья сталась только карта интенсивности блика.

Карта интенсивности блика

Она показывает, насколько сильно отражает свет данный участок текстуры. Чем ярче пиксель, тем сильнее он отражает свет. Так как на данной текстуре у нас камни, карта интенсивности блика будет стремиться к черному, ведь камни – это не стекло и не металл, ни зайчиков, ни свое отражение на них не увидеть. Можно эту карту залить черным, а можно дать некоторым камушкам шанс немного побликовать:

Ну вот. Теперь все для текстур бампа готово. осталось только разложить все по нужным каналам и сохранить.

Первой проще делать текстуру bump#. Для этого берем карту высоты, копируем изображение на свежесозданную альфу, а каналы РГБ заливаем однородным серым цветом (за серый принимается цвет в середине всего диапазона яркости, т.е. лучше всего брать 127 или 128). Далее остается только сохранить ее:

С текстурой bump все сложнее. По непонятной причине разработчиками игры был выставлен обратный порядок каналов. Т.е. то что фильтр nVidia располагает в порядке RGB(A), в текстуре bump порядок обратный, т.е ABGR. Это составляет определенную сложность и затрату времени при конвертировании “синенькой” текстуры, создаваемой фильтром, в “зелененькую” текстуру bump. Я обычно делаю это так:

с текстуры bump# делается дубликат и сохраняется как bump, далее на нее с помощью копипаста вставляются каналы из “синенькой” текстуры, которая была недавно сгенерирована фильтром. Порядок такой:

а чтобы довести текстуру bump до конца и сделать ее истинно “зелененькой”, в канал R нужно вставить карту интенсивности блика. Все, можно сохранять. должно получиться вот так:

Вот и все, карты рельефа для сталкера готовы. Остается только посмотреть, как будет выглядеть в игре:

Дополнение

Кстати, забыл упомянуть, если исходная текстура бесшовная, то необходимо сохранять бесшовность всех карт, из которых состоит рельеф!

А если есть вопросы – спрашивайте, обязательно отвечу

Исправил грамматические ошибки –Ork 10:39, 27 октября 2010 (UTC)

В чем разница между bump, normal и displacement?

В статье мы подробно рассмотрим отличия карт bump от normal и displacement.

Вы столкнулись с трудностями при назначении карты bump на 3D-объект? Не переживайте! Многие 3D-художники, которые только начали изучать с 3D-текстурирование, испытывают сложности в этой области, не зная, какой тип карт выбрать: bump, normal и displacement.

Все три типа карт создают дополнительную детализацию на поверхности геометрии. Некоторые из этих деталей «настоящие», другие нет. Итак, попытаемся разобраться, в чем же заключается разница между картами bump, normal и displacement.

Что такое карты bump

Карты bump являются одним из старейших типов карт. И первое, что нужно понять – это то, что bump создает фейковую детализацию. И это правда, поскольку карты bump создают иллюзию глубины на поверхности модели с помощью трюка со светом. Никакой дополнительной детализации при этом не добавляется.

Обычно, карты bump – это черно-белые 8-битные изображения. И это только 256 цветов черного, серого или белого. С помощью этих значений карты bump сообщают 3D-редактору всего 2 вещи: деформировать геометрию вверх или вниз.

Когда значения карты bump близки к 50% серого, с поверхностью геометрии практически ничего не происходит. Когда изображение ярче, ближе к белому, детали выдавливаются на поверхности геометрии. Если изображение более темное, ближе к черному, детали вдавливаются в поверхность геометрии.

Карты bump отлично подходят для создания на поверхности модели мелкой детализации, например, пор или морщин на коже. Кроме того, их сравнительно легко создать в таком 2D-редакторе, как Photoshop, помня при этом, что работать нужно только с черно-белыми цветами.

Читать еще:  Что можно сделать в майнкрафте без модов

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

Что такое карты normal

Карты нормалей или normal-карты – это улучшенные карты bump. Normal-карты, как и карты bump, создают фейковую детализацию, не добавляя дополнительных деталей геометрии в сцене. В результате, карты нормалей создают на поверхности модели иллюзию детализации, но эта детализация в корне отличается от той, которую создают карты bump.

Как мы уже знаем, карты bump используют черно-белые цвета, чтобы вдавливать или выдавливать поверхность геометрии. Normal-карты работают с RGB-информацией, которая точно отвечает X, Y и Z значениям в 3D-сцене. Эта RGB-информация сообщает 3D-редактору точное направление нормалей каждого полигона поверхности. Ориентация нормалей поверхности, которые часто называются просто нормалями, сообщает 3D- редактору, в какой цвет окрасить тот или иной полигон.

Normal-карты бывают двух типов и выглядят совершенно по-разному в 2D-пространстве.

Наиболее распространенным типом карт нормалей являются normal-карты типа tangent space, которые зачастую сочетают в себе лиловый и синий цвета. Этот тип карт нормалей лучше всего подходит для мешей, которые должны деформироваться при анимации. Normal-карты типа tangent space идеально подходят для персонажей. Для объектов, которые статичны и не испытывают деформаций, больше подходят карты нормалей типа object space. Эти карты окрашены в различные цвета и просчитываются немного быстрее normal-карт типа tangent space.

При использовании карт нормалей нужно понимать несколько моментов. В отличие от bump’а эти карты сложнее создать в 2D-редакторе типа Photoshop. Запекаются normal-карты с хайпольного меша на лоупольный. Однако, есть несколько путей их редактирования. Например, возможность редактирования карт нормалей представлена в MARI.

Кроме того, normal-карты лучше других вписываются в большинство пайплайнов. Но в отличие от карт bump в этом правиле есть исключение. И касается оно мобильного геймдева, поскольку аппаратные средства начали «понимать» карты нормалей сравнительно недавно.

Что такое карты displacement

Когда же дело доходит до создания дополнительной детализации для лоупольных мешей в игру вступают карты displacement, которые способны творить чудеса. Карты displacement создают физическую детализацию меша, на который они назначаются. Для создания displacement’а меш необходимо подразделить несколько раз или тесселировать, чтобы разрешения хватило для создания реальной геометрии.

Карты displacement выгодно отличает то, что их можно запечь с хайпольного меша или нарисовать вручную. Карты displacement, как и карты bump, работают с черно-белыми значениями цветов. При этом с легкостью можно использовать и 8-битные карты displacement, но лучший результат можно получить с помощью 16- или 32-битных карт displacement. И, хотя, 8-битные карты displacement лучше выглядят в 2D-пространстве, в на рендере они могут вызвать странные артефакты и пр. из-за недостаточной информации.

А вот что касается времени просчета, то тут все далеко не так круто. Создание дополнительной детализации в режиме реального времени достаточно трудоемкий процесс, с которым 3D-редактор справится не быстро. Кроме того, большинство 3D-редакторов просчитывают displacement уже на рендере. По сравнению с картами bump и normal карты displacement могут серьезно сказаться на времени рендера.

Ничто не справится с детализацией так, как это сделают карты displacement. И, поскольку поверхность геометрии изменяется на самом деле, это отражается и на силуэте модели. Но при этом всегда нужно оценивать реальную необходимость, а также преимущества использования карт displacement.

Одновременное использование всех карт

В некоторых случаях для одного и того же объекта можно использовать карту bump или normal в сочетании с displacement. При этом карту displacement лучше всего использовать для значительных изменений геометрии, а карты bump и normal для добавления мелких деталей.

Вне зависимости от того, какую карту вы выберите, принцип их работы необходимо понимать в любом случае, это только поможет еще лучше использовать преимущества карт bump, normal и displacement.

Читайте в нашей предыдущей статье о тонкостях displacement.

Источники:

http://pikabu.ru/tag/Bump%20mapping/hot

http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%83%D1%80_%D1%80%D0%B5%D0%BB%D1%8C%D0%B5%D1%84%D0%B0_bump

В чем разница между bump, normal и displacement?

Ссылка на основную публикацию
Статьи на тему: