383

Normal'ный ликбез

тут @MrGonar, спросил.

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

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

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

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

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

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

Карта высот черно белая, потому что в ней не требуется ничего кроме одного значения- непосредственно высоты, для этого достаточно одного канала в 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, тоже сугубо попиксельный эффект, промежуточный способ между  бампом и дисплейсментом, но т.к. в моей специализации параллакс практически не применим, то и рассказать со своим взглядом на эту технологию у меня не выйдет. Знаю только, что у параллакса тоже свои ограничения по применению, связанные с тем, что текстура как бы вдавливается в полигон, вызывая всякие артефакты на гранях поверхностей, кубик с параллаксом все равно останется кубиком, но с хитронарисовынными тенями и бликами, чтобы глаз обмануть.


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

Вы смотрите срез комментариев. Показать все
0
Автор поста оценил этот комментарий

вроде в теме но нихрена н понял

бамп фактически говорит как отрисовывать модель(делаем тени,то есть иммитируем мелкий рельеф, упрощаем модель)


что будет если карту дисплейсмент (кирпичной стены например) кинем на обычный плейн?

бамп кирпичи создаст (оставив 2 триса), а дисплейсмент что сделает?

раскрыть ветку (13)
1
Автор поста оценил этот комментарий
Дисплэйсмент 2 триса разобьёт на 2 миллиона трисов. И каждую вершину каждого нового триса выдавит перпендикулярно изначальным двум поликам. А дальше обычный рендер геометрии.
раскрыть ветку (12)
1
Автор поста оценил этот комментарий

а ну тогда я все правильно понял.

чем дисплейсмент от height отличается?

раскрыть ветку (11)
1
Автор поста оценил этот комментарий
Первое метод, второе входные данные в этом методе. Height map и displacement map это разные названия одной и той же текстуры.
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

ну теперь я спокоен.

Я бы отметил, что плюс бампа в том, что он не меняет геометрию. А Дисплейсмент позволяет быстро сгенерировать эту геометрию

0
Автор поста оценил этот комментарий

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

раскрыть ветку (8)
1
Автор поста оценил этот комментарий
А теперь глянь текстуру из моего предыдущего поста. В исходнике там было 4млн полигонов на кусочек 30х30см. И представь геометрией поле камней километр на километр. Геометрией это смерть компу, а текстурой пару Гб памяти, ведь дисплэйсмент адаптивен
0
Автор поста оценил этот комментарий

теперь я вас не понял.

Меньше полигонов->меньше ресурсов тратится на рендер.Бамп позволяет сымитировать качество высокополигональной модели. Количество полигонов при этом не меняется->быстро рендрится. Очень важно при риал тайм рендере.

раскрыть ветку (6)
0
Автор поста оценил этот комментарий
@brave24 Я про последнюю часть поста. Там по карте высот и нормалей геометрия детализируется до той же плотности треугольников, что и изначальная модель.
раскрыть ветку (5)
0
Автор поста оценил этот комментарий

есть ещё запечение

раскрыть ветку (4)
1
Автор поста оценил этот комментарий

Запечение это сохранение предрасчитанных данных в текстуре.

Вот по запечённым данным ТС в конце восстанавливает геометрию.

Т.е. была качественная модель, с неё сняли карты и наложили на низкополигональную модель. С помощью displacement эту модель разбили на большое количество треугольников. И я не пойму - где выигрыш?

раскрыть ветку (3)
0
Автор поста оценил этот комментарий

может дисплейсментом создается модель middle poly, чтобы запеклось адекватно. Все же для запечения нужна адекватная основа. Некоторые детали моделить лень, вот он и дисплейсментом.

раскрыть ветку (2)
0
Автор поста оценил этот комментарий
Некоторые детали моделить лень

Всё равно не пойму. Как их лень моделить, если они уже смоделены (карты то запечёные есть, а они делаются с модели)?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

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


Хотя это дикое извращение

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества