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


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

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

чет сложна... а в итоге не получается что эти бампы сложнее чем геометрия?

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

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

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

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

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

вот тут соглашусь, фаска...  если я побудил человека поинтересоваться чем-то новым для него, неизведанным, то это же хорошо, да?)

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

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

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

пытаюсь переводить на человеческий... не всегда выходит. Какие слова в первую очередь не ясны?

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

а про лодирование, нет ?

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

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



запастись RAM

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

и абоненментом на ферму. Или у вас своя ?

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

своя небольшая, так и рендерим  по несколько секунд продукта в сутки))

показать ответы
0
Автор поста оценил этот комментарий
Клевая текстура!
Вот про то что GI не учитывает искаженные нормали это прям сюрприз которого я не ожидал, даж не верится.
А как насчет одновременного использования нормала и бампа есть ли в этом смысл?
раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Чтобы сымитировать глобалку и запекают ambient occlusion - тени от всенаправленного света, получается псевдо-GI уже в текстуре. normal и hegight обоюдно -конечно есть смысл! Они будут компенсировать недостатки друг друга, как-то я упустил такой момент, забыл написать. Вот такой пример, на поверхности маленький бугор, имея карту высот и карту нормалей одинакового разрешения, на карте высот хотя бы один пиксель, да запомнит данные, из которых потом интерполированием можно получить примерный рельеф, конечно без всех деталей. А карта нормалей просто проигнорирует подобный выступ, т.к. по её мнению в конкретно этом среднем текселе, нормаль не завалена ни влево ни вправо, максимум может немного вбок завалит, т.к. горку я не симметричную нарисовал. Поэтому бамп по хаймапе хорош для микродеталей как в плане разрешения так и высоты, а нормалбамп хорош для макродеталей, сильных изгибов. Ну а дисплейсмент еще более крупные детали более корректно может показать, с самозатенением, глобалкой и проч.

Иллюстрация к комментарию
показать ответы
0
Автор поста оценил этот комментарий
Хотел вот еще что спросить.
1. Вроде как слышал что используют несколько методов сразу. В одном материале сразу и disp bump и normal. В чем тут суть и для чего каждый из этих методов в отдельности в рамках одного материала.
Вот даже при подключение нормала к VrayMtl, при помощи вирэевской специальной карты, там есть еще дополнительная нода для карты бампа.
2. А еще есть карта которая Bump2Normal, как она работает? просто пересчитывает значения интенсивности в значения отклонения?
3. А как получают прям конкретный объем панелек? Просто интенсивность выкручивают на максимум? Просто на вашем примере не так уж объемно normal выглядит.
раскрыть ветку (1)
2
Автор поста оценил этот комментарий

1. Суть в том, что дисплейсмент хоть и хорошая технология, но также  сильно ресурсоёмкая, можно использовать дисплейсмент 2к текстуру+бамп поверх 8к, и иллюзия детальности поверхности увеличится в разы, а считать компухтеру меньше также в разы. Далеко за примером можно не ходить, приложу картинку недавней текстуры, там дисплейсмент не содержит в себе  всех микровпадин, их рисует 4к бамп поверх.

2. бамп2нормал, не пользовался, но вроде как да, именно это она и делает, я пользую VrayColorToBump, она рисует бамп поприкольнее стандартного.

3. В моем примере включено глобальное освещение, оно не учитывает искаженные нормали, и освещает весь рельеф как и раньше одним плоским светом, если выключить GI и оставить одну лампочку то нормалбамп станет очень контрастным, от яркого к черному.

Иллюстрация к комментарию
показать ответы
1
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Бамп и нормали это одно яйцо с разных сторон. Дисплейсмент выигрывает самозатенением и видимым объемом в движении
0
Автор поста оценил этот комментарий
Спасибо стало немного понятнее. В плане специфики использования отдельных карт. Теперь нужно практически это пощупать. Попробовать заделать материал со всеми сразу.
А еще хотел спросить не знаешь, как можно коректные облака сделать? Я тут задумал сделать полностью cg-шный кавер на одну картину, так вот мне не хватает облаков :)
раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Про корректные не подскажу. Там надо симулить флюиды и рендерить воксели. Но по простому из шумов и vray fog можно побыстрому. Пример увидишь у меня несколькими постами ранее.
0
Автор поста оценил этот комментарий

Смотря какой парадигмой ты пользуешься. Я вот радикальный позитивист и считаю любое знание ценным. Кто-то руководствуется принципом "Меньше знаешь - крепче спишь". И этот подход тоже правильный

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

тс.. тише тише, тут за радикального уехать можно.

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

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

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

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

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

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

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

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


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

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

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

может в следующем посте стоит разобрать типичные артефакты и косяки при запекании нормалки ?

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

да я их особо не запекаю, так что и косяков у меня с ними нет, как побочное явление)) мне актуален только displacement 32bit 8-16k

показать ответы

Темы

Политика

Теги

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

Сообщества

18+

Теги

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

Сообщества

Игры

Теги

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

Сообщества

Юмор

Теги

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

Сообщества

Отношения

Теги

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

Сообщества

Здоровье

Теги

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

Сообщества

Путешествия

Теги

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

Сообщества

Спорт

Теги

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

Сообщества

Хобби

Теги

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

Сообщества

Сервис

Теги

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

Сообщества

Природа

Теги

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

Сообщества

Бизнес

Теги

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

Сообщества

Транспорт

Теги

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

Сообщества

Общение

Теги

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

Сообщества

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

Теги

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

Сообщества

Наука

Теги

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

Сообщества

IT

Теги

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

Сообщества

Животные

Теги

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

Сообщества

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

Теги

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

Сообщества

Экономика

Теги

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

Сообщества

Кулинария

Теги

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

Сообщества

История

Теги

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

Сообщества