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
Автор поста оценил этот комментарий

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

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

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

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

ну а если не рендер, если "игровой" рендер, видяхе не легче геометрию показать?

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

нет, игровые модели перед снятием карты нормалей содержат не один десяток миллионов полигонов.

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


исключением является кинопроизводство, но там рендер месяцами проходит и даже не на компах, а на рендер-фермах

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

вобщем, если кратко: рендерить такие текстуры легче чем графику, так?

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

легче чем геометрию

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

пасиб

0
Автор поста оценил этот комментарий
Легче. Например сделать кольчугу без displacement на одних полигонах нереально, т.к. каждое кольцо содержит 512 полигонов, а колец там тысячи, да и рисовать заколебёшься. А так рисуешь displacement map и нет проблем.
раскрыть ветку (12)
0
Автор поста оценил этот комментарий

Ну поликами заделать кольчугу не проблема. Откуда 512 поликов на одно кольцо то? Что это за убер качество то будет?

раскрыть ветку (11)
1
Автор поста оценил этот комментарий
Это не убер качество. А обычный тор из 32 сегментов с 16 сторонами Если брать меньше, то будут видны углы. Кольчугу помимо пиорисовки ещё может потребоваться анимировать, а там физику каждого кольца рассчитывать понадобится суперкомпьютер. С текстурами расчет физики намного проще.
раскрыть ветку (10)
1
Автор поста оценил этот комментарий
Ох уж эти мамкины десигнеры) засимулировать физику кольчуги состоящую из поликов можно чуть ли не сотней способов, на слабом компе в короткие сроки, один лучше другого. 512 полигонов на звено кольчуги крайне расточительно даже под виз, если уж не требуется прямо таки крупный план делать.
раскрыть ветку (9)
Автор поста оценил этот комментарий
Ок. Ждем гайда как засимулировать кольчугу на полигонах + еще зафигачить анимацию чтобы вела себя как кольчуга и чтобы на обычном персональном компьютере можно было меньше чем за сутки отрендерить. И чтобы показали нам мамкиным десигнерам хотябы не менее 10 способов
раскрыть ветку (8)
5
Автор поста оценил этот комментарий

Вот на затравочку, пятиминутный тест, и нет это не ткань, полноценные полики и физика частиц

Иллюстрация к комментарию
Иллюстрация к комментарию
раскрыть ветку (6)
4
Автор поста оценил этот комментарий
Про рендер слова не было) но, как говорится, подержи моё пиво 🍺
Завтра займусь этим
1
Автор поста оценил этот комментарий

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

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

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

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

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

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

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



запастись RAM

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

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

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

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

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

У меня иногда просыпается вдохновление сделать что нить в синьке, но как только время рендера кадра переваливает за час, я забиваю на все это. Так вот у меня вопрос, это я дурак и не умею оптимизировать сцены, или это все таки нормальное время. Процессор Core i7 3770 4ГГц

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

Зависит от сложности сцены.

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

103к полигонов, глобальное освещение не использую, зато есть AO. Рендер 1920х1080 на CPU, не физический. Вот как она выглядит. Больше всего времени отнимает метал с анизотропией. Из-за того что я новичок, я не могу понять, делаю ли я что-то не так. Или просто мое железо не достаточно мощное.

Иллюстрация к комментарию
Иллюстрация к комментарию
раскрыть ветку (2)
Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

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

Сообщества

18+

Теги

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

Сообщества

Игры

Теги

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

Сообщества

Юмор

Теги

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

Сообщества

Отношения

Теги

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

Сообщества

Здоровье

Теги

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

Сообщества

Путешествия

Теги

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

Сообщества

Спорт

Теги

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

Сообщества

Хобби

Теги

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

Сообщества

Сервис

Теги

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

Сообщества

Природа

Теги

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

Сообщества

Бизнес

Теги

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

Сообщества

Транспорт

Теги

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

Сообщества

Общение

Теги

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

Сообщества

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

Теги

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

Сообщества

Наука

Теги

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

Сообщества

IT

Теги

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

Сообщества

Животные

Теги

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

Сообщества

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

Теги

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

Сообщества

Экономика

Теги

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

Сообщества

Кулинария

Теги

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

Сообщества

История

Теги

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

Сообщества