Как сделать карту displacement в фотошопе
Как сделать карту displacement в фотошопе
Карты детализации: зачем они нужны и как их использовать
Создание 3D-персонажа начинается с этапа скульптинга — это процесс, когда художник лепит в ZBrush высокодетализированную модель. Такие модели могут содержать миллионы полигонов, поэтому с ними крайне сложно проводить какие-либо операции — например, создавать риг и анимацию.
Для решения этой проблемы был придуман способ, как перенести детализацию с высокополигональной модели (Highpoly) на низкополигональную (Lowpoly). Это делается с помощью особых текстурных карт, которые позволяют сократить многомиллионный полигонаж до нескольких сотен тысяч для кино и нескольких десятков тысяч для игр. А о том, какими бывают карты детализации и как они работают, рассказывает художник по персонажам и преподаватель курса XYZ School Movie Man Артём Гансиор.
Карты детализации бывают четырёх видов — displacement, vector displacement, bump и normal. По принципу работы их можно разделить на две группы. Карты displacement и vector displacement честно меняют геометрию модели, добавляя ей необходимые рельефы и детали. Карты bump и normal, в свою очередь, никак не влияют на геометрию и вместо этого имитируют наличие деталей путём смещения нормалей, то есть просто изменяют поведение света на поверхности модели.
Давайте рассмотрим каждую карту по отдельности.
Displacement — это чёрно-белая текстура, каждый пиксель на которой имеет значение от 0 до 255. Когда вы накладываете её на модель, эти значения используются для определения высоты каждой точки на поверхности объекта. Высота может быть нулевой (когда точка остаётся на своём месте), положительной (когда точка выдавливается из объекта) и отрицательной (когда точка вдавливается в объект).
Карта displacement детализирует модель на этапе рендеринга. Сначала запускается процесс тесселяции — каждый полигон модели делится на четыре равных полигона, а затем ещё раз и ещё, в зависимости от заданного количества сабдивов. После этого рендер-движок берёт информацию о значении пикселя с displacement-текстуры и выдавливает или вдавливает реальные полигоны на объекте.
Главное преимущество такой системы — она даёт возможность усложнять геометрию во время рендеринга и при этом не повышать полигонаж в сцене во время работы с мэшем.
Результат наложения карты displacement на лоуполи
Другое преимущество — это возможность работать с SSS-эффектом (подповерхностное рассеивание света как у кожи, молока, гранита, воска и т.д.). Эффект SSS опирается на расстояния между полигонами, поэтому displacement дает наиболее реалистичный результат, полученный без «фейков».
Карты displacement используются преимущественно в VFX-индустрии. В VFX главная цель — это наивысшее качество и достоверность картинки. Displacement-текстуры позволяют легко этого добиться, поскольку они честно детализируют модели и меняют их силуэт. В игровой индустрии displacement встречается редко, так как тесселяция и расчёт смещения — это довольно ресурсоёмкий процесс, и оптимизировать его для игровых движков пока очень проблематично. Но это вопрос времени.
Важно понимать, что в карте displacement смещение происходит только по одной оси — вдоль нормали каждого полигона (другими словами, перпендикулярно каждому полигону). Это может стать проблемой, если вы захотите запечь какую-то деталь, которая смещается не только вверх, но и в сторону. Для таких случаев понадобится карта vector displacement.
Vector displacement — это тот же displacement, только он позволяет смещать полигоны не по одной оси, а по всем трём. Это значит, что формы типа гриба, уха или рога можно запечь в текстуру и не моделить их на лоуполи. Как и displacement, эта карта взаимодействует с реальной геометрией, то есть по-честному добавляет детали в процессе рендеринга. Это даёт более реалистичный расчёт освещения и трассировки лучей.
Результат наложения карты vector displacement на объект
Для сравнения — попытка добиться той же детализации с помощью карты displacement
Так выглядит карта vector displacement для уха. Источник
Vector displacement — это довольно специфическая текстура. Её редко используют в продакшене даже несмотря на то, что она невероятно мощная и открывает поле для экспериментов. Дело в том, что она требует огромных вычислительных мощностей. Чаще всего это нецелесообразно — такого же результата, который даёт vector displacement, можно добиться менее энергозатратными способами.
Bump — это чёрно-белая карта со значениями пикселей от 0 до 255. Эти значения, как и в случае с displacement, задают смещение высоты на объекте. Разница в том, что bump не меняет геометрию, а просто имитирует изменение направления нормалей. Луч света, сталкиваясь с поверхностью объекта, берёт информацию о направлении нормали из текстуры и меняет свое направление. Это изменение фиксируется относительно камеры, и таким образом создаётся иллюзия рельефа.
Результат её наложения на объект
В целом эта система работает неплохо, но есть две проблемы. Во-первых, эта текстура работает только по одной оси и не может корректно отображать более сложные рельефы.
И, во-вторых, она никак не влияет на геометрию, а значит, на силуэт. Если мы посмотрим на поверхность модели под углом, то станет очевидно, что это лишь имитация детализации.
Главное преимущество карты bump — это низкий вес текстуры и возможность комбинировать её с другими чёрно-белыми картами (metalness, roughness, ambient occlusion и т.д.). Bump можно с успехом использовать для создания микрорельефов или для ассетов заднего плана, но с более сложными задачами она уже не справится.
Результат её наложения на объект
Normal map — это карта, у которой во всех трёх RGB-каналах хранится информация о направлении нормали каждого пикселя. В процессе рендеринга эта информация используется для коррекции поведения света. То есть карта нормалей никак не влияет на геометрию объекта — вместо этого она имитирует неровности на его поверхности, заставляя свет вести себя так, как будто он взаимодействует с реально существующими деталями.
Результат её наложения на объект
Карта нормалей не увеличивает полигонаж модели, но при этом создаёт вполне реалистичный эффект рельефа. Также она позволяет избежать сильной нагрузки на CPU и GPU при просчёте финальной картинки, что сильно оптимизирует процесс и позволяет смотреть на результат в реальном времени.
Главный недостаток карты нормалей в том, что она не влияет на силуэт — по этой причине она никогда не сможет заменить карту displacement для VFX, где требуется максимальная правдоподобность. Но именно эту карту чаще всего используют в играх — в геймдеве она является стандартом индустрии.
Отдельно стоит поговорить про битность и форматы карт детализации.
Битность в картинках — это количество уникальных оттенков в палитре изображения, которые используются для представления каждого цвета. Основная масса текстур использует значение 8 бит, то есть 256 цветов (8 для R, 8 для G и 4 для B — синий обделили из-за слабой чувствительности человека к синим оттенкам). Карты diffuse, bump, reflection, roughness и другие текстуры могут использовать 8-битную систему безо всякой потери качества.
16 бит используют для карт displacement, vector displacement, normal map и вообще любых текстур, где нужна очень крутая градация цветов. Ведь 16 бит — это аж 65 536 возможных вариаций цветов, так что качество displacement напрямую зависит от битности. Также 16 бит используются для карт diffuse + alpha, когда нужен отдельный канал с прозрачностью.
32 бита используются только для карты displacement и для композитинга финальных изображений. Такое огромное количество цветов позволяет тоньше настраивать оттенки во время сборки рендерпассов. Также 32 бита используют в текстурах освещения — так называемых HDRI-картах.
В общем, 32 бита пригождается везде, где нужен огромный диапазон информации. Хороший пример — HDRI-карта с ярким солнцем. Если мы снижаем экспозицию, то всё равно видим яркую точку, а градиенты меняются. Если попробовать провести этот опыт с 8-битной текстурой, то вы получите вот это:
Каждая из вышеописанных карт детализации имеет свои преимущества и недостатки, поэтому часто их используют вместе. В real-time движках displacement используют для придания фактуры средним формам, а normal map — для мелкой детализации. В VFX вся детализация чаще всего создается за счёт displacement, хотя для мелкой детализации bump и normal тоже используются.
Поиск правильного решения и подхода — всегда творческий процесс, поэтому удачи!
Тонкости Displacement
В этом уроке Akin Bilgic рассматривает процесс создания displacement-карт в ZBrush и Mudbox, а также последующую работу с ними в V-Ray для Maya, V-Ray для 3ds Max, V-Ray для Cinema 4D и Arnold для Maya.
Карты displacement всегда были загадочны и плохо поддавались изучению, вызывая определенное, хоть и совершенно необоснованное неудобство в работе. В блогах 3D-художников частенько встречаются статьи, в которых они достаточно подробно показывают процесс создания лоупольной и хайпольной моделей, с последней они затем снимают карты, назначают их на лоупольный меш и с помощью бубна получают околонужный результат. Однако при правильном подходе лоупольный меш будет выглядеть в точности, как хайпольный.
Для начала давайте постараемся понять, как работают displacement-карты типа floating-point, и как определить корректность полученного результата. Затем мы рассмотрим виды грабель, на которые обычно наступает подавляющее большинство художников, а так же способы этого избежать. В конце будет приведена пошаговая инструкция, следуя которой вы получите доставляющий результат с использованием displacement-карт.
КАК РАБОТАЮТ DISPLACEMENT-КАРТЫ ТИПА FLOATING-POINT
Вообще карты displacement – это дикие научные дебри. Простыми словами – это метод, с помощью которого информация с высоко детализированной геометрии запекается на карту, которую затем можно применить для низко детализированной геометрии. Корректно созданная карта displacement типа floating-point полностью спроецирует всю детализацию с хайпольного меша на лоупольный. Всю детализацию. От начала и до конца.
А происходит это, потому что работает карта displacement типа floating-point очень логично: значения пикселей карты displacement точно соответствуют значениям юнитов в 3D-редакторе. Таким образом, значение пикселя 1.0 соответствует 1 юниту в сцене. Пиксель со значением 0,5 выдавливает меш в сцене на 0,5 юнита. Пиксель со значением 0.0 вообще не будет что-то делать. Все очень логично. Благодаря тому, что значения пикселей displacement-карты хранят в виде числовых данных с плавающей запятой, они сохраняют значения пикселя выше значения 1.0, а отрицательные значения ниже 0.0. Это очень мощный способ хранения точной информации.
Проиллюстрируем это на примере простой плоскости:
3 плоскости, по-разному расположенные вдоль оси Y, состоящие из одного полигона, для каждой плоскости сделана планарная UV-развертка.
Положение первой плоскости – +35 юнитов по оси Y.
Положение второй плоскости – 0 юнитов по оси Y.
Три одинаковые плоскости расположены по-разному вдоль оси Y
Импортируем сцену в ZBrush или Mudbox, дивайднем вторую плоскость несколько раз и поскалптим. Вытянем ее центр так, чтобы он касался первой плоскости, затем выдавим пару участков по краям, так, чтобы они касались нижней плоскости. Проявим фантазию и напишем что-нибудь на плоскости, чтобы добавить еще деталей.
Процесс скалптинга плоскости
Не остановимся на достигнутом и создадим displacement-карту для несчастной плоскости, с помощью описанной ниже процедуры. Теперь мы можем открыть полученную карту практически в любой программе типа Nuke, которая легко работает с данными с плавающей запятой.
Вьювер Nuke, при наведении курсора на соответствующие точки, показывает значения пикселей. Изображение окрашено в красный, поскольку карте displacement для хранения информации нужен только один канал. Таким образом, все данные хранятся в канале красного цвета. Отрицательные значения не видны, поскольку они расположены ниже значения 0.0, отображение таких значений находится за пределами возможностей наших мониторов.
Карта displacement, назначенная на вторую плоскость, которая затем была отрендерена, создает поверхность, идеально соответствующую той, которую мы получили в программе скалптинга
На другом примере показана карта displacement, назначенная на более сложный объект со швами на UV-развертках, а полученный результат все равно идеален. Кубы по краям сферы составляют 5 юнитов ширину и являются визуальным подтверждением корректности наложенных displacement-карт.
Карта displacement, без проблем назначенная на более сложный объект
И, наконец, пример карты displacement, назначенной на органический объект. Детализация, которую можно увидеть на изображении, является делом рук displacement-карты, никаких посторонних bump- или normal-карт. Результат идеально совпадает с хайпольной геометрией.
Слева: бейз меш без карты displacement, справа: бейз меш с картой displacement
НАИБОЛЕЕ РАСПРОСТРАНЕННЫЕ ГРАБЛИ И СПОСОБЫ ИХ ИЗБЕЖАТЬ
UV-РАЗВЕРТКА МЕГА ВАЖНА
Для displacement очень важна хорошая UV-развертка. Перекрывающиеся UV могут вызвать ошибки при генерировании карт. Кроме того, проверьте, чтобы развертка располагалась внутри UV-пространства от 0 до 1.
ПРОВЕРЯЙТЕ БЕЙЗМЕШ ДВАЖДЫ (А ТО И ТРИЖДЫ)
При скалптинге на высоких уровнях дивайдов часто изменяется положение вертексов на нижних уровнях дивайдов. Таким образом, лоупольный меш, который вы импортировали в программу для скалптинга будет отличаться от лоупольного меша, который вы используете для создания карт displacement. Всегда проверяйте, чтобы лоупольный меш, который вы использовали для создания карт displacement, не отличался от того, на который вы назначаете displacement-карту.
КАРТЫ DISPLACEMENT ТИПА FLOATING-POINT ЗАВИСЯТ ОТ МАСШТАБА
Из-за того, что значения пикселей displacement-карты типа floating-point соответствуют юнитам в сцене, масштаб объекта становится важным фактором, игнорирование которого может привести к плачевным результатам. Если вы отскейлили лоупольный меш после создания карты displacement, она перестанет быть корректной. Карту придется или создать заново, или компенсировать с помощью настройки «Displacement Amount» в V-Ray. Параметр «Height» отвечает за это же в Arnold. Например, если вы увеличили объект в два раза, следует умножить значение карты displacement на два, чтобы скомпенсировать ее влияние.
FLOATING-POINT VS INTEGER
Процедура, описанная ниже, предполагает создание 32-битных карт displacement, однако также можно использовать и 16-битную карту displacement типа floating-point, что позволит получить практически идентичный результат.
Убедитесь, что вы сохраняете карту displacement в 16-битном формате типа floating-point, а не в 16-битном формате типа integer. Чтобы формат integer сработал корректно, придется немало поплясать с бубном. И все потому что этот формат не поддерживает данные с отрицательными значениями, с которыми легко работают карты displacement. Если вы уже задумались, как получить ту или иную карту, просто следуйте инструкции, описанной ниже, чтобы создать 32-битную карту displacement.
КАРТЫ DISPLACEMENT СПОСОБНЫ НА МНОГОЕ
В идеальном мире карты displacement типа floating-point проецируются идеально, при этом лоупольный меш невозможно отличить от хайпольного. К сожалению, 3D-редакторы, как и наша реальность, несовершенны, при этом каждый из редакторов по-разному решает различные задачи. За корректное проецирование информации с карты displacement на лоупольный меш в любом 3D-редакторе отвечает алгоритм сглаживания. Некоторые редакторы для сглаживания мешей используют алгоритм Catmull-Clark, другие же придерживаются совершенно иного метода. Конечно, со временем разработчики 3D-редакторов пришли к компромиссу и наконец-то решили использовать одинаковый алгоритм (последуйте примеру Pixar в случае с OpenSubdiv и напишите письмо разработчикам софта, в котором вы работаете, сподвигнув их на такое), хотя, конечно, иногда случаются незначительные различия между хайпольным и лоупольным мешами. Хорошая новость заключается в том, что эти отличия действительно незначительны, но только если ваш лоупольный меш не такой уж и лоупольный. Не расценивайте карты displacement как ту самую вожделенную кнопку «Сделать красиво». И не ждите, что кубик с помощью карт displacement превратится в наливное яблочко. Ваша основная задача – смоделировать корректный бейз меш с хорошей топологией и достаточным разрешением, о деталях же позаботятся карты displacement.
СНЯТИЕ КАРТ DISPLACEMENT
Теперь мы знаем, как работают displacement-карты, и что от них ожидать. Далее приходит черед упорядоченного нажимания на нужные кнопочки в различном ПО, чтобы сначала снять карты displacement с хайпольного меша, а затем назначить их на лоупольный в любимом 3D-редакторе. При этом каждая из приводимых настроек является результатом тщательного тестирования.
ZBrush (Multimap Exporter):
Откройте или импортируйте хайпольный меш с многочисленными дивайдами.
Если вы импортировали хайпольный меш из другого редактора, восстановите уровни подразделений, зайдя во вкладку Tool – Geometry и нажав на кнопку «Reconstruct Subdiv».
Во вкладке ZPlugin разверните вкладку Multi Map Exporter, проверьте, чтобы кнопка Displacement была подсвечена.
С помощью ползунка установите необходимый размер будущего изображения (от 2k и выше).
Включите опцию «Flip V».
Нажмите на кнопку «Export Options», чтобы открыть дополнительные опции карт.
Ползунок «SubDiv Level» установите на желаемый уровень подразделений.
Выключите опцию «Adaptive».
Установите значение «DPSubPix» 4.
Выключите опцию «SmoothUV».
Установите значение «Mid» 0.
Выключите опцию «3 Channels».
Установите значение битности будущего изображения «32 Bit», а расширение EXR.
Установите «Scale» 1.
Проверьте правильность установленных вами настроек
Нажмите на кнопку «Create All Maps», придумайте название файла и выберите папку для его сохранения. Не переживайте, если ZBrush пишет, что тип файла TIF, на самом деле карта сохранится в формате EXR, поскольку мы включили соответствующую опцию.
Нажмите на кнопку «Save», чтобы запустить процесс генерации карты displacement.
И displacement-карта готова!
Необходимо отметить кое-что, касательно ZBrush и плагина Multimap Exporter:
В более ранних версиях ZBrush (а мы помним, что последняя существующая версия – ZBrush 4R6) плагин Multimap Exporter сохранял карту displacement только в 32-битном формате с расширением TIFF, который ни Maya, ни 3ds Max не понимали. Таким образом, если вы работаете в более ранних версиях ZBrush, вам придется пересохранить 32-битную карту displacement в Nuke или Photoshop в расширении EXR, чтобы можно было работать с ней в Maya и 3ds Max. При конвертировании карты в Photoshop проверьте, что вы работает в режиме RGB, а не в Grayscale (меню Image – Mode).
ZBrush (Displacement Subpallette):
Откройте или импортируйте хайпольный меш с многочисленными дивайдами.
Если вы импортировали хайпольный меш из другого редактора, восстановите уровни подразделений, зайдя во вкладку Tool – Geometry и нажав на кнопку «Reconstruct Subdiv».
Во вкладке Tool – Geometry установите значение SDiv на желаемый уровень подразделений.
Во вкладке Tool – UV Map установите необходимый размер UV-развертки (от 2k и выше).
Во вкладке Tool – Displacement нажмите на пустой квадратик в правом верхнем углу и выберите альфу из выпадающего меню.
После того, как изображение загружено, установите значение Mid 0.
Снова нажмите на квадратик с загруженной альфой и выберите опцию «Alpha Off» в верхнем левом углу.
Выключите опцию «Adaptive».
Установите значение «DPSubPix» 4.
Выключите опцию «SmoothUV».
Включите опцию «Flip V».
Установите «Scale» 1.
Выключите опцию «3 Channels».
Включите опцию «32 Bit».
Проверьте правильность установленных вами настроек
Нажмите на кнопку «Create And Export Map», придумайте название файла и выберите папку для его сохранения, тип файла выберите «OpenEXR 32bit».
Нажмите на кнопку «Save», чтобы запустить процесс генерации карты displacement.
И displacement-карта готова!
Mudbox:
Откройте или импортируйте хайпольный меш с многочисленными дивайдами.
Если вы импортировали хайпольный меш из другого редактора, восстановите уровни подразделений, выполнив команду «Mesh – Rebuild Subdivision Levels».
Перейдите в «UVs & Maps – Extract Texture Maps – New Operation» в панели Menu.
Поставьте галочку «Displacement Map», выбрав из списка «Maps To Generate».
В Target Models выберите меш на нижнем уровне дивайдов, обычно это нулевой уровень.
Включите опцию «Target Models».
Отключите опцию «Smooth Target UVs».
Включите опцию «Use Creases & Hard Edges».
В Source Models выберите меш на самом высоком уровне дивайдов.
Включите опцию «Smooth Source Models».
Установите Method как «Ray Casting».
Установите значение Choose Samples «Closest To LowRes Mesh».
Включите опцию «Test Both Sides.
Нажмите на кнопку «Best Guess», чтобы вычислить значение Search Distance.
Выберите «Generate one map for all targets» из выпадающего списка.
Размер изображения: Выберите желаемый размер изображения (от 2k и выше).
Отключите опцию «Antialiasing».
Отключите опцию «Normalize To Search Distance».
Установите «Map Type» «Texture».
Нажмите на параметрах «Base Filename» (…), придумайте название файла и выберите папку для его сохранения, тип файла выберите «OpenEXR 32bit Floating-Point».
Отключите опцию «Preview As Bump Map».
Проверьте правильность установленных вами настроек
Нажмите на кнопку «Extract», чтобы запустить процесс генерации displacement-карт.
И displacement-карта готова!
НАЗНАЧЕНИЕ DISPLACEMENT-КАРТ
V-Ray для Maya:
Импортируйте лоупольный меш (дважды проверьте, что вы работаете с тем же мешем, с которого вы запекали карты).
Выберите меш, откройте Attribute Editor и выберите там шейп ноду объекта. Затем в меню Attribute Editor нажмите «Attributes – V-Ray» и включите опции «Subdivision», «Subdivision and Displacement Quality», а также «Displacement Control», чтобы в шейп ноде меша появились дополнительные атрибуты.
Прокрутите настройки Attribute Editor вниз и раскройте вкладку «Extra V-Ray Attributes».
Включите опцию «Render As A Subdivision Surface»
Отключите опцию «Subdivide UVs».
Для начала установите значение «Edge Length» 4.0 и постепенно понижайте его, чтобы улучшить качество displacement, что, несомненно, увеличит время рендера.
Установите тип «Normal Displacement» в выпадающем меню «Displacement Type».
Включите опцию «Keep Continuity».
Остальные настройки оставьте по умолчанию.
Проверьте правильность установленных вами настроек
Откройте редактор Hypershade, cоздайте материал VRayMtl и назначьте его на меш.
Во вкладке Shading Groups в Hypershade выберите только что созданный VRayMtlSG, нажмите RMB, чтобы выбрать «Graph Network», чтобы видеть объект и ноду VRayMtl в рабочем пространстве Hypergraph.
Добавьте ноду «Displacement» в рабочее пространство нод слева, а затем перетяните ее с помощью MMB на ноду VRayMtlSG, выбрав «Default».
Добавьте в рабочее пространство нод слева ноду «File», а затем перетяните ее с помощью MMB на ноду Displacement, выбрав «Other».
В левой части connection editor нажмите на плюс рядом с «OutColor», чтобы развернуть ее, затем выберите последовательно «OutColorR», подсоединив ее к «Displacement» справа.
В окне Hypergraph выберите ноду «File» и загрузите ранее созданную карту displacement в «Image Name».
Прокрутите вниз Attribute Editor и откройте опции «V-Ray Extra Attributes», чтобы изменить тип пространства на «Linear», и включите опцию «Allow Negative Colors».
Измените тип рендерера в окне настроек рендера на «V-Ray» и перейдите во вкладку «Global Options» в его настройках. Проверьте, чтобы опция «Displacement» была включена.
Вот и все. Можно отрендерить сцену, чтобы посмотреть на результат.
V-Ray для 3ds Max:
Импортируйте лоупольный меш (дважды проверьте, что вы работаете с тем же мешем, с которого вы запекали карты).
Выберите меш, во вкладке Modify назначьте объекту модификатор «Unwrap UVW».
Нажмите на кнопку «Open UV Editor…», расположенную иже выпадающего списка.
Назначьте на объект модификатор «Turbosmooth» поверх модификатор «Unwrap UVW».
Установите Iterations 0 (или любое другое число, в зависимости от того, что вы хотите наблюдать во вьюпорте).
Включите опцию «Render Iters» и установите для него значение 3.
Назначьте на объект модификатор «V-RayDisplacementMod».
Включите опцию «3D Mapping».
Нажмите на кнопку «None», выберите «Bitmap» из выпадающего списка Material/Map.
Выберите карту displacement. Включите опцию «Override», расположенную ниже группы Gamma, проверьте, чтобы значение опции было 1.0 и нажмите на «Open».
В диалоговом окне настройки OpenEXR выключите опцию Enable Color Correction слева и нажмите «OK».
Для начала установите значение «Edge Length» 4.0 и постепенно понижайте, чтобы улучшить качество displacement, что, несомненно, увеличит время рендера.
Отключите опции «Smooth UVs» и «Smooth UVs At Borders».
Включите опцию «Check ‘Keep Continuity».
Остальные настройки оставьте по умолчанию.
Проверьте правильность установленных вами настроек
Измените тип рендерера в окне настроек рендера на «V-Ray» и перейдите во вкладку «Global Switches» в его настройках. Проверьте, чтобы опция «Displacement» была включена.
Вот и все. Можно отрендерить сцену, чтобы посмотреть на результат.
V-Ray для Cinema 4D:
Импортируйте лоупольный меш (дважды проверьте, что вы работаете с тем же мешем, с которого вы запекали карты).
Создайте «vrayAdvancedMaterial» выбрав его в меню «Create – Shader – VrayBridge» в редакторе материалов. Перетяните его на меш в Object manager.
Затем создайте «vrayDisplaceMaterial» из того же самого меню. Перетяните его на меш в Object manager, так, чтобы оба материала были расположены рядом, а displacement находился справа от advanced материала.
Нажмите на шейдер и установите в выпадающем меню «vrayBitmap». Установите линейное рабочее пространство и загрузите карту displacement. Включите опцию «Allow Negative Colors».
В общих настройках vrayDisplaceMaterial включите опции «Tight Bounds» и «Use As Subdivision Surface».
При этом Displacement type должен быть «3D Mapping», а опция «Keep Continuity» включена.
Значение «Amount» необходимо установить 3.0 вместо 1.0. Это абсолютно читерский приемчик, который нужен исключительно для Cinema 4D, которая будет искать displacement-данные в зеленом и синем каналах нашего EXR. И, поскольку вся информация сохранена в красном канале, она ничего не найдет в зеленом и синем каналах, уровняв их данные с информацией в красном канале, из-за чего сила displacement будет составлять всего 1/3 от необходимой. Таким образом, «Amount» 3.0 вместо 1.0 компенсирует глюк Cinema 4D, создавая displacement, сравнимый с детализацией хайпольного меша.
Для начала установите в Render Settings – VrayBridge – Displacement значение 4.0 и постепенно понижайте его, чтобы улучшить качество displacement, что, несомненно, увеличит время рендера.
Проверьте, чтобы Displacement был включен в настройках рендера в V-Ray.
Вот и все. Можно отрендерить сцену, чтобы посмотреть на результат.
Arnold для Maya:
Импортируйте лоупольный меш (дважды проверьте, что вы работаете с тем же мешем, с которого вы запекали карты).
Выберите меш, откройте Attribute Editor и вкладки «Arnold», «Subdivision», «Displacement Attributes».
Установите «Type» «catclark».
Для начала установите для «Iterations» в Subdivision rollout значение 5 и постепенно увеличивайте его, чтобы улучшить качество displacement, что, несомненно, увеличит время рендера.
Во вкладке Subdivision установите «UV Smoothing» «Linear».
Значение параметра «Bounds Padding», расположенного во вкладке Displacement Attributes, должно превышать отрицательные и положительные значения, представленные в карте displacement. Это значение можно автоматически найти в Nuke с помощью ноды «CurvesTool» в режиме «Max Luma Pixel». Если у вас нет Nuke, поэкспериментируйте со этими значениями, начав с 1.0. Затем увеличивайте это значение, если заметите что-нибудь ненормальное при проецировании displacement.
Остальные настройки оставьте по умолчанию.
Откройте Hypershade и назначьте объекту aiStandard материал.
Кликните в Hypershade на группе шейдеров и выберите только что созданный материал aiStandardSG, RMB на нем, чтобы выбрать «Graph Network», чтобы ноды шейдера появились в рабочем пространстве Hypergraph
Добавьте ноду «Displacement» в рабочее пространство нод Hypershade слева, затем перетяните ее с помощью MMB на ноду aiStandardSG, выбрав «Default».
Добавьте в рабочее пространство ноду «File» из списка нод Hypershade слева, затем перетяните ее с помощью MMB на ноду Displacement и выберите «Other…».
В левой части Connection Editor нажмите на плюс рядом с «OutColor», чтобы развернуть, последовательно выберите OutColorR, затем значение «Displacement» в правой части, чтобы соединить их.
Выберите в Hypergraph ноду «File», перейдите в Attribute Editor и загрузите ранее созданную карту displacement.
Откройте окно настроек рендера в Maya и перейдите во вкладку «Override» в его настройках. Проверьте, чтобы опция «Ignore Displacement’» была отключена.
Вот и все. Можно отрендерить сцену, чтобы посмотреть на результат.
VJ Софт
Содержание материала
Displacement Mapping
Наглядно создание ландшафта при помощи наложения карт смещения представлено на картинке. Исходными были 4 вершины и 2 полигона, в итоге получился полноценный кусок ландшафта.
Большим преимуществом наложения карт смещения является не просто возможность добавления деталей к поверхности, а практически полное создание объекта. Берется низкополигональный объект, разбивается (тесселируется) на большее количество вершин и полигонов. Вершины, полученные в результате тесселяции, затем смещаются по нормали, исходя из значения, прочитанного в карте смещения. Получаем в итоге сложный 3D объект из простого, используя соответствующую displacement карту:
Количество треугольников, созданных при тесселяции, должно быть достаточно большим для того, чтобы передать все детали, задаваемые картой смещений. Иногда дополнительные треугольники создаются автоматически, используя N-патчи или другие методы. Карты смещения лучше использовать совместно с бампмаппингом для создания мелких деталей, где достаточно правильного попиксельного освещения.
Наложение карт смещения можно по существу считать методом сжатия геометрии, использование карт смещения снижает объем памяти, требуемый для определенной детализации 3D модели. Громоздкие геометрические данные замещаются простыми двухмерными текстурами смещения, обычно 8-битными или 16-битными. Это снижает требования к объему памяти и пропускной способности, необходимой для доставки геометрических данных к видеочипу, а эти ограничения являются одними из главных для сегодняшних систем. Или же, при равных требованиях к пропускной способности и объему памяти, наложение карт смещения позволяет использовать намного более сложные геометрически 3D модели. Применение моделей значительно меньшей сложности, когда вместо десятков или сотен тысяч треугольников используют единицы тысяч, позволяет еще и ускорить их анимацию. Или же улучшить, применив более сложные комплексные алгоритмы и техники, вроде имитации тканей (cloth simulation).
Другое преимущество в том, что применение карт смещения превращает сложные полигональные трехмерные сетки в несколько двухмерных текстур, которые проще поддаются обработке. Например, для организации Level of Detail можно использовать обычный мип-маппинг для наложения карт смещения. Также, вместо сравнительно сложных алгоритмов сжатия трехмерных сеток можно применять привычные методы сжатия текстур, даже JPEG-подобные. А для процедурного создания 3D объектов можно использовать обычные алгоритмы для двухмерных текстур.
В качестве примера из реальных игр приведу игру, в которой используется выборка текстур из вершинного шейдера, возможность, появившаяся в видеочипах NVIDIA NV40 и шейдерной модели 3.0. Вершинное текстурирование можно применить для полностью выполняемого видеочипом простого метода наложения карт смещения, без тесселяции (разбиения на большее количество треугольников). Применение такому алгоритму ограничено, они имеют смысл, только если карты будут динамическими, то есть, будут изменяться в процессе. Например, это рендеринг больших водных поверхностей, что и сделано в игре Pacific Fighters:
Обзор модификатора Displacement| VRayDisplacementMod
Обзор VRayDisplacementMod.
Пример: Displacement в сравнении с Bump Mapping.
Этот пример показывает различия между bump mapping и displacement mapping. Обратите внимание на круглый силуэт сферы и ее тени в случае bump mapping и деформированный силуэт, генерируемый displacement:
В данном случае для дисплейсмента взята карта 3d Cellular; использован метод 3D displacement.
Type (Тип)
Пример: Subdivision Displacement
Без использования subdivision и displacement
Только subdivision (значение displacement 0.0)
Использовоние и Subdivision, и displacement.
Какой метод использовать? В предыдущих версиях V-Ray было огромное различие между производительностью двух других методов и 2D mapping, который был быстрее во многих случаях. С введением поддержки динамической геометрии в V-Ray 1.45.xx, 3d дисплейсмент стал гораздо быстрее для аналогичного или даже лучшего качества, по сравнению с 2d mapping. Тем не менее, для больших поверхностей, таких как океан или горы, метод 2d mapping может работать лучше.
2D-перобразование также сохраняет карту дисплейсмента в предварительно оттранслированном виде в памяти. Большие карты дисплейсмента могут занимаит большое количество оперативной памяти. В этом случае более эффективным может быть использование 3D-преобразования, т.к. оно может повторно использовать память, использованную для измененной геометрии.
Common parameters (Общие параметры)
Пример: Clip Mapping.
Примечание: параметр Water level также абсолютен в мировых единицах. В случае изменения Amount и/или Shift, вам скорее всего придется регулировать уровень воды, чтобы получить тот же эффект. В этом примере параметр Amount имеет значение 5.0, апараметр Shift установлен в 0.0.
Water level = 0.0 (без clipping)
Water level = 5.0 (clip применен ко всей геометрии)
Этот пример демонстрирует использование displacement mapping clip от геометрии объекта. displacement map представляет собой смесь Noise map и мозаичную карту Gradient ramp map; темные участки карты отсекаются:
В этом случае displacement map была применена к определенной mapping channel; в данном случае был использован 2D displacement.
Параметры 2D mapping.
Параметры 3D mapping/subdivision.
Static geometry – при включении дисплейсмента геометрия предварительно компилируется в структуру ускорение в начале рендеринга и остается там до конца кадра. Это может ускорить рендеринг и увеличит использование памяти.
Classic Catmul Clark – когда эта опция включена, V-Ray будет использовать метод Classic Catmul Clark для разбивки меша вместо гибридного используемого по умолчанию. Эта опция должна быть включена, только если меш полностью состоит из прямоугольных граней, иначе он не будет работать.
Preserve map bnd – этот параметр позволяет сохранять границы UV, не сглаживает их, когда опция Smooth UVs включена.
Disabled – отключает vector displacement, в данном случае будет использован regular displacement вдоль поверхности нормали.
Tangent – текстура интерпретируется со значением 0.5 в tangent space displacement map;
Object – этот тип имеет смысл только с текстурами Ptex displacement через VRayPtex texture, когда значение текстуры представлено 0 в displacement в object space. Если информация о меше хранится в Ptex file, V-Ray может правильно сместить деформации меша. Object-space Ptex vector displacement работает только с подразделением поверхности, когда Тип дисплейсмента выставлен на Subdivision.
Cache normals – когда эта опция включена, V-Ray создает и сохраняет информацию о нормалях каждой вновь созданной вершины. Это требует дополнительной памяти, но ускоряет расчеты затенения во время рендеринга.
Пример: Edge Length (длина ребра).
Изображение ниже рендерилось с Edge map | VRayEdgesTex map с слоте материалов Diffuse, так что можно увидеть исходные треугольники меша. Кроме того, мы включили опцию Faceted в VRayMtl. Теперь V-Ray будет не только сглаживать нормали поверхности, но и автоматически применять карту нормалей, что представляет собой нормаль искревленной поверхности, которая делает вид поверхности более детализированной.
View-dependent включен, и это относится к пикселям исходного изображения, а не зуммированного, полученного с blow-up рендерингом. Именно для этого мы смогли сделать blow-up рендеринг, чтобы лучше увидеть отдельные подтреугольники:
Edge Length 0.5 Вид крупным планом.
Edge Length 1.0 Вид крупным планом.
Edge Length 2.0 Вид крупным планом.
Edge Length 5.0 Вид крупным планом.
Edge Length 10.0 Вид крупным планом.
Пример: Опция Keep Continuity.
Опция Keep continuity для объектов с разнонаправленными нормалями на соседних треугольниках, обычно вследствие принадлежности к различным группам сглаживания. На среднем изображении вы можете видеть шели на ребрах, полученные из-за разнонаправленных нормалей. Использование опции Keep continuity позволяет избежать этой проблемы. Эта опция также поможет получить сглаженный результат для пересечений границ ID материалов для объектов с материалами типа multi/subobject.
Keep continuity выключено
Keep continuity включено
Пример: Дисплейсмент по вектору.
Этот пример показывает действие опции Vector displacement более детально.
Первое изображение слева показывает объект-деталь, который мы преобразовали в карту векторного дисплейсмента посредством запекания в текстуру с помощью материала VRayVectorDisplBake. Второе изображение показывает полученную карту дисплейсмента, в которой красная, зеленая и синяя компоненты определяют векторы дисплейсмента в UVW-пространстве текстуры. Последнее изображение показывает другой объект с картой векторного дисплейсмента, примененной посредством модификатора VRayDisplacementMod.
Часть сложной геометрии и упрощенная версия с материалом VRayVectorDisplBake
Карта дисплейсмента, примененная к другому объекту через модификатор VRayDisplacementMod со включенной опцией Vector displacement.
Пример: Split Method.
Этот пример показывает действие параметра Split method. Для лучшей демонстрации эффекта, для объекта был использован материал Standard со включенной опцией Faceted и текстурой VRayEdgesTex в диффузном слоте для показа границ фейсов оригинального меша. Обратите внимание, как режим Binary изменяет ориентацию треугольников подразбиения дисплейсмента, в то время как режим Quad сохраняет их ориентацию.
Split method режим Binary
Split method режим Quad
Пример: Текстурные границы.
Texmap min = 0 ; Texmap max = 1
Пример: Дисплейсмент на персонаже.
Заметим, что если персонаж анимирован и используется 3d карта с преобразованием Object XYZ, то карта будет изменяться по отношению к поверхности объекта, т.к. поверхность сама изменяет свое положение в пространстве. Если вы хотите зафиксировать процедурную 3d-карту относительно поверхности анимированных объектов, примените модификатор UVW Map с режимом преобразования XYZ to UVW для объектов и используйте Explicit mapping channel для процедурной карты.
Персонаж с дисплейсментом.
Персонаж без дисплейсмента.
Примечания:
· Текстуры накладываются на искривленную поверхность; следовательно текстуры с преобразованием Object XYZ и World XYZ могут выглядеть по другому на искривленном объекте по сравнению с тем, как они выглядели бы на исходном объекте. Если это нежелательно (например если вы хотите карту дисплейсмента подогнать под текстуру), используйте явно каналы преобразования для текстур материалов, а преобразования Object XYZ/World XYZ оставьте только для карты дисплейсмента.
· Искривленные объекты не будут работать правильно с теневыми картами (Shadow maps). В теневые карты будет включена информация о неискривленном меше. Для слабого дисплейсмента это может работать хорошо. Заметим, что дисплейсмент работает правильно с тенями VRayShadowMap.
· VRayDisplacementMod не влияет на объекты VRayPlane, VRayProxy или VRayFur.
· Метод 2d mapping (landscape) будет игнорировать параметр Tiling, указанный в самих текстурах. Как побочный эффект, это означает, что этот метод не будет работать с опцией Real-world map size в текстуре Bitmap и других текстурах. Вместо этого вы должны изменить UVW-координаты объекта, или использовать метод 3d mapping.
Autodesk 3ds Max 9 – Работа с картами Displacement в Mental Ray
Приветствую вас, дорогие читатели.
Позвольте представиться, меня зовут Дмитрий Чехлов (aka dimson3d), родился и живу в городе Екатеринбурге, и учусь я на 4-ом курсе «Уральского института бизнеса», по специальности «Информатик-экономист». Но основной целью выбрал для себя компьютерную графику. В своих работах использую в основном Autodesk 3ds Max; Autodesk Maya; Adobe Photoshop и изучаю потихоньку Pixologic ZBrush.
Вы можете задать мне любые появившиеся у вас вопросы, по данному уроку и я постараюсь на них ответить. Мои e-mail и ICQ есть в данных обо мне.
Введение
В данном уроке, я хочу рассказать вам про работу с displacement в mental ray для 3ds Max. Я опишу 2 шейдера, предназначенных для работы с displacement в mental ray, и их настройки. Для примера я взял горный ландшафт, что, на мой взгляд, идеально подходит для демонстрации возможностей displacement.
Для данного урока вам потребуется файл архива с необходимыми для урока материалами: practice_resource.rar (3,49 Mb), загрузите его и разархивируйте в удобную для вас папку. В данном архиве находятся стартовая сцена, текстурная карта, для смещения, и три тестовых рендера созданных по ходу работы над этим уроком.
Данный урок ориентирован на пользователей, которые только начинают знакомиться с mental ray или хотят сравнить возможности mental ray displacement и displacement другого визуализатора, к примеру, V-Ray или Final Render.
Подготовка mental ray, активация дополнительных возможностей и расширений.
По умолчанию, mental ray в 3ds Max работает только со стандартными материалами 3ds Max. Нам же требуются для работы возможности и шейдеры mental ray, а не стандартных материалов. По умолчанию вид Material/Map Browser выглядит так:
Вид Material/Map Browser без активных расширений mental ray.
Для активации всех возможностей mental ray реализованных в 3ds Max, выполните следующее:
Откройте меню Customize > Preferences…
Перейдите на закладку mental ray.
Установите флажок Enable mental ray Extensions. Этот флажок активирует шейдеры mental ray необходимые нам для работы.
Подтвердите все изменения, нажав на кнопку Ok.
Активация расширений mental ray для работы с шейдерами и материалами.
Теперь шейдеры для работы с mental ray активны, можно приступать к созданию сцены. И работе с шейдерами смещения.
Немного теории о шейдерах и настройках mental ray для визуализации displacement.
Как известно, карты смещения (displacement maps) служат для деформации сетки модели за счет полутоновых значений карты текстуры, и показателя применяемой силы. Благодаря современным алгоритмам, используемым в современных средствах визуализации, можно создать детальную модель, применив карту смещений всего к одному полигону!
В mental ray встроенном в 3ds Max для работы со смещением предоставляются 2 шейдера, которые добавляются в слот Displacement как в обычном материале типа Standard. Так и в материалах специально созданных для mental ray, такими материалами являются mental ray, SSS Fast Skin Material + displace (mi) и другие. Так же можно добавить шейдеры смещения в слот Displacement в свитке mental ray Connection, у любого стандартного материала.
Свиток mental ray Connection в материале типа Standard.
Свиток mental ray Connection становится доступен после активации расширений mental ray, о чем было рассказано выше.
Какие же шейдеры нам подходят для работы с displacement в mental ray? Нам подходят шейдеры: 3D Displacement (3ds Max), Height Map Displacement (3ds Max). Данные шейдеры специально были разработаны для mental ray и работы с картами смещения (displacement maps).
Шейдер 3D Displacement (3ds Max):
Интерфейс шейдера 3D Displacement (3ds Max).
Object Independent – параметр отвечающий за то что смещение независимо от объекта.
Displacement Length – это значение отвечает за высоту и глубину смещения, чем выше число тем выше будет выступать наша гора.
Extrusion Strength – отвечает за силу смещения.
Extrusion Map – в данный слот можно добавить текстурную или процедурную карту, для того что бы по ней осуществлялось смещение.
Direction Strength – это значение отвечает за степень направленности смещения чем выше значение тем более точным будет смещение и результат.
Direction Map – в данный слот так же добавляется текстурная или процедурная карта по которой будет осуществляться направление выдавливания.
В свиток Shaders добавляются шейдеры или карты текстур для управления Extrusion Strength, Direction Strength.
Шейдер Height Map Displacement (3ds Max):
Интерфейс шейдера Height Map Displacement (3ds Max).
Minimum Height – эта величина указывается для минимального направления смещения, в отрицательных значениях.
Maximum Height – этот параметр указывается для максимального значения смещения в верх.
Height Map – в данный слот добавляется шейдер, текстурная или процедурная карта.
Настройки displacement в Render Scene:
Далее, все настройки выполняются в окне Render Scene на закладке Common, для этого существует свиток Shadows & Displacement и группа Displacement (Global Settings).
Интерфейс глобальных параметров displacement в mental ray Renderer.
View – этот параметр отвечает за пространство в котором рассчитывается displacement. Если данный параметр активен, то расчет длины смещения производится в пикселях, если же он отключен, то расчет производится в единицах измерения сцены, в нашем случае это миллиметры.
Smoothing – Отключите данный параметр, если вы используете height maps, т.к. height maps могут быть созданы посредствам normal maps. Если же данный параметр активен, то он усредняет значение сглаживания между нормалями, и производит плавный переход при использовании стандартных средств смещения, таких как 3D Displacement.
Edge Length – указывает длину ребра для разбиения сетки, когда Mental Ray доходит до этого значения то уплотнение сетки объекта прекращается. Чем ниже значение, тем более детальным будет уплотнение сетки и соответственно модель объекта.
Max. Displace – Управляет максимальным спадом действия смещения на вершины, в мировых единицах.
Max. Subdiv – Управляет степенью рекурсивного разбиения сетки для смещения.
Создание сцены.
Сначала я изменил, единицы измерения в сцене – это необходимо для корректной работы mental ray с displacement.
Открыв диалоговое окно Units Setup, из меню Customize > Units Setup…
Я поставил флажок Metric в группе Display Unit Scale и в раскрывающемся списке выбрал Millimeters, подтвердив все изменения, нажал кнопку Ok.
Настройка единиц измерения в сцене 3ds Max.
Далее я создал плоскость (объект Plane) размером в 400 мм в длину, 400 мм в ширину. Перейдя на панель Modify, изменил Length Segs и Width Segs, сделав их равными 1.
Создание плоскости с одним полигоном, для нашего эксперимента с displacement.
Теперь у нас есть плоскость с одним полигоном, теперь нужно позаботиться об освещении в сцене.
Далее я создал источник света типа Omni и, задал ему следующие параметры: в свитке General Parameters в группе Shadows поставил флажок On, и в раскрывающемся списке выбрал Ray Traced Shadows. Multiplier оставил равным 1.
Затем переместил только что созданный источник света по оси X на -300 мм, по оси Y на 300 мм, по оси Z на 400 мм.
Создав еще один источник света типа Omni, ввел следующие параметры: в свитке General Parameters в группе Shadows поставил флажок On, и в раскрывающемся списке выбрал Ray Traced Shadows. Multiplier сделал равным 0,4. Данный источник света у меня играл роль заливающего света.
Затем переместил только что созданный источник света по оси X на 300 мм, по оси Y на -400 мм, по оси Z на 200 мм.
Создание 2-х источников света в сцене, и настройка их параметров.
Если вы использовали mr Area Omni то, будьте осторожны т.к. в этом источнике света используются площадные (Area) тени, если вы не хотите долго ждать, пока компьютер визуализирует сцену то, отключите их, убрав флажок On в свитке Area Light Parameters.
При финальной визуализации этот параметр можно включить снова.
Отключение площадных источников света mr Area Omni и mr Area Spot, свиток Area Light Parameters, отключается флажок On.
Создание камеры. Для этого нажав Shift+F для активации режима Safe Actions, я отмасштабировал сцену так, чтобы углы плоскости не выходили за границы Action safe (как показано на рисунке ниже) затем, нажав клавиши Ctrl+C, (эта комбинация клавиш создает нацеленную камеру из окна проекции Perspective),я создал нацеленную камеру. Я вам рекомендую пользоваться таким способом создания камеры, когда вы в окне перспективы нашли нужный вам план и композицию, это очень удобно и экономит время. При этом вы всегда можете настроить камеру по своему вкусу.
Создание камеры из окна проекции Perspective, с расположением сцены в кадре. И какие используются клавиатурные комбинации.
Когда сцена была уже готова, осталось только выбрать mental ray для визуализации: нажав клавишу F10 для того, что бы открыть диалоговое окно Render Scene, и на закладке Common в свите Assign Renderer щелкнув на кнопке с троеточием у пункта Production, в окне Choose Renderer выбрал mental ray Renderer.
Теперь у меня все было готово для того, что бы начать работу с displacement шейдерами mental ray.
Выбор mental ray Renderer в качестве основного.
Использование Displacement шейдеров Mental Ray на примере создания модели горного ландшафта.
В 3ds Max для работы с картами смещения существует несколько способов это такие как применение модификатора Displacement, и работа с материалами 3ds Max и шейдерами Mental Ray, я вам опишу способ, который мне дал Mental Ray 3.5. Основные инструменты управления Displacement’ом находятся в: Material Editor и Render Scene Dialog.
В редакторе материалов 3ds Max в стандартном материале используется слот displacement из свитка Maps, в материале Mental Ray используется слот Displacement из группы Extended Shaders. В окне диалога Render Scene для настройки displacement используется свиток Shadows & Displacement, группа Displacement (Global Settings), а так же группа параметров Ray Tracing свитка Rendering Algorithms для оптимизации процесса визуализации.
В редакторе материалов работа с картами смещения представлена в виде наборов шейдеров Mental Ray, которые в свою очередь добавляются в слот канала карт смещения.
Список шейдеров mental ray доступных в 3ds Max для работы с displacement.
Продолжив работу над сценой, я приступил к созданию шейдеров.
Моя цель заключалась не в создании ландшафтов, как таковых, т.к. 3ds Max нам дает массу разных возможностей по созданию ландшафтов. Я на примере модели ландшафта рассматривал работу двух шейдеров Mental Ray для создания смещения – это 3D Displacement (3ds Max) и Height Map Displacement (3ds Max) шейдеров.
Шейдер 3D Displacement (3ds Max).
Открыв редактор материалов, и нажав на кнопку Get Material. Я выбрал в списке материалов, материал Mental Ray – он послужил отправной точкой, в создании шейдера с использование карты смещения.
Создание шейдера (материала) Mental Ray.
Затем, для того, что бы шейдер формировал поверхность объекта, я добавил шейдер DGS Material (3ds Max) щелкнув на кнопке рядом с надписью Surface. После этого задал Diffuse Color практически белый цвет.
Т.к. модель, которую я создавал, не является прозрачной и отражающей, а блики должны быть мягкими я задал следующие значения параметров: Glossy Highlights (Глянцевитость) = R: 0,1; G: 0,1; B: 0,1; Shiny (Сияние) = 5; Index Of Refraction (Преломление) = 1,0
Добавление и настройка шейдера DGS Material (3ds Max) в слот Surface материала Mental Ray.
Добавляем шейдер смещения 3D Displacement:
Вернувшись в материал Mental Ray, и щелкнув на кнопке с надписью None рядом с пунктом Displacement. Это группа Extended Shaders. В открывшемся окне Material/Map Browser я выбрал 3D Displacement (3ds Max).
Далее я начал добавлять карту смещения, щелкнув на кнопке None рядом с надписью Extrusion Map. Выбрал Bitmap и затем открыл карту текстуры mountain.tga.
Данная карта высот была сгенерирована программным обеспечением основанном на фракталах, а не рисовалась вручную, рекомендую вам использовать такие программы т.к. они создают очень впечатляющие ландшафты, небо, и облака и прочие хитрости так необходимые в работе.
Методом перетаскивания, я перетащил карту из слота Extrusion Map в слот Direction Map на кнопку с надписью None, в появившемся диалоговом окне Copy (Instance) Map я выбрал Instance.
Создание шейдера для смещения 3D Displacement (3ds Max) и добавление карты текстуры.
Полученный шейдер я назначил объекту disp_object – это однополигонная плоскость.
Следующее что я сделал – настроил параметры смещения в шейдере 3D Displacement (3ds Max).
В параметрах шейдера 3D Displacement (3ds Max) я указал: Displacement Length = 150,0 mm; Direction Strength = 4,0
Произведя тестовую визуализацию, у меня получилась вот такая картинка.
Время визуализации 3 секунды, объем занимаемой ОЗУ 159,6 Mb.
Визуализация данной сцены выполнялась на компьютере с Intel Core2 Duo 6600 (2,4 GHz), 2 Gb RAM. (файл 019low.jpg)
Не очень да? Правильно сейчас сетка геометрии дробится не так сильно, как хотелось, поэтому она слишком сглажена и не такая плотная.
Для изменений этого, я выполнил настройки в Render Scene, и перейдя на закладку Renderer, в свитке Shadows & Displacement я настроил параметры следующим образом:
Настройка Displacement (Global Settings) в окне Render Scene.
Убрал флажок View, это позволило выполнять алгоритм разбиения в единицах сцены, т.е. миллиметрах.
Установил значение Edge Length равным 0,5 мм, это оптимально разбивает геометрию, при этом, не нагружая память и ресурсы компьютера.
И установил Max. Displace равным 1000,0 мм. Max. Subdiv = 4К (4000).
Для моего примера этого полностью хватает, и не занимает много времени на визуализацию. Теперь я получил результат более детальной модели ландшафта.
Время визуализации 21 секунда, объем занимаемой ОЗУ 337,2 Mb.
Визуализация данной сцены выполнялась на компьютере с Intel Core2 Duo 6600 (2,4 GHz), 2 Gb RAM.
Шейдер Height Map Displacement (3ds Max).
Но результат, который нам дает шейдер 3D Displacement (3ds Max) не всегда дает четкие детали на модели, более четких деталей позволяет добиться шейдер Height Map Displacement (3ds Max), особенно при использовании карт нормалей (normal maps).
Выбрав в списке материалов, материал Mental Ray и поместил его в свободном слоте материалов.
Скопировав шейдер DGS Material (3ds Max) из созданного ранее шейдера 3D Displacement Shader используя Instance.
Я создал новый шейдер для Displacement, для этого щелкнув на кнопке None рядом с надписью Displacement, и выбрав шейдер Height Map Displacement (3ds Max).
После чего я добавил карту высот из файла mountain.tga к параметру Height Map.
Используя тип Instance при копировании, вы можете сэкономить время на том что бы не менять постоянно одни и те же параметры в обоих шейдерах.
Далее, я изменил параметры, Minimum Height = 0 мм; Maximum Height = 150 мм.
В окне Render Scene на закладке Renderer в свитке Shadow & Displacement я убрал Smooth, т.к. при работе с Height Map Displacement (3ds Max) шейдером, этот параметр желательно отключить.
Произведя визуализацию, я получил еще большую передачу деталей ландшафта.
Время визуализации 21 секунда, объем занимаемой ОЗУ 332,4 Mb.
Визуализация данной сцены выполнялась на компьютере с Intel Core2 Duo 6600 (2,4 GHz), 2 Gb RAM.
Давайте сравним результаты визуализации обоих шейдеров, вы увидите, что при визуализации с 3D Displacement шейдером модель очень сглажена, на ней нет всех деталей ландшафта, при визуализации же Height Map Displacement и с отключенным параметром Smoothing, появилось больше деталей на модели ландшафта, он стал с более резкими краями на перепадах, появились мелкие впадины и углубления.
Визуализация данной сцены выполнялась на компьютере с Intel Core2 Duo 6600 (2,4 GHz), 2 Gb RAM.
Главное помните, что вы должны грамотно строить свою сцену, и при использовании разных шейдеров, к примеру, 3D Displacement и Height Map Displacement можно добиться разных результатов, но при этом помните, что при работе с 3D Displacement флажок Smooth должен быть поставлен, а при работе с Height Map Displacement – убран.
Далее я создал текстуры гор, с использованием обычного материала Top/Bottom и материалов Standard с процедурными картами текстур типа Smoke и заданными цветами.
Сцена после финальной визуализации со всеми материалами и шейдерами и последующего композитинга в Photoshop выглядит вот так:
Финальная сцена с горным ландшафтом.
Так же дам вам схему финального шейдера для этого горного массива, созданную посредствам NodeJoe. Вы можете самостоятельно создать текстуру для данного ландшафта или, просто взглянув на схему ниже.
Схема финального шейдера для ландшафта показанного выше.
На этом практическая часть может быть окончена, вы в праве поэкспериментировать самостоятельно с настройками и комбинациями шейдеров, у вас практически безграничные варианты для создания своих собственных моделей за счет карт смещения. Ниже я хочу дать вам пару советов по работе с displacement в mental ray, и привести еще несколько дополнительных примеров по применению displacement в визуализации сложных моделей.
Несколько советов по использованию Displacement и настройки Mental Ray.
Как вы уже, наверное, догадались, смещение в Mental Ray рассчитывается достаточно долго, но это поправимо, сейчас я вам дам несколько советов по ускорению этого процесса.
Эти несколько советов, являются не обязательными к постоянному выполнению всех пунктов, но при их различной комбинации вы можете достичь быстрой визуализации как тестовой, так и финальной и так же преградить внезапное завершение рендера на середине изображения.
Дополнительные примеры использования displacement в визуализации сложных моделей.
Для детализации органических моделей так же используют displacement maps созданных посредствам программ скульпторов, таких как ZBrush или Mudbox. Конечно, можно создавать карты смещения и посредствам обычного Photoshop, но это занимает намного больше времени, чем с использованием, к примеру, ZBrush.
Персонаж «OOlox» детализация на коже и ландшафта была осуществлена за счет применения карт смещения, для детализации модели персонажа использовали ZBrush (Визуализировано с помощью Mental Ray).
«Скульптура» детали поверхности автор воплотил за счет карт смещения (Визуализировано с помощью Mental Ray).
Этот персонаж также был создан с использованием displacement maps созданных в ZBrush.
На этом я заканчиваю урок по displacement в mental ray для Autodesk 3ds Max 9.
Надеюсь, что вам понравился данный урок, и вы почерпнули для себя что-то новое или провели линию возможностей различных средств визуализации.
Так же хочу поблагодарить Александра Кыштымова (Skif) за то, что он помог в подготовке материалов для данного урока, и сидел скрупулезно вчитывался в варианты урока.
Photoshop, Фотография
В Photoshop’e есть множество различных фильтров для всевозможных искажений изображений. Сегодня мы остановимся на одном из них — Displace. С его помощью Фрэнк Бартукка попробует создать необычный портрет
Displace, наверное, самый малоизученный и самый редко используемый фильтр группы Distort (меню Filter> Distort). Принцип его работы очень прост: фильтр комбинирует два изображения, используя одно из них в качестве карты смещения (Displacement Мар) — в соответствии с ней пиксели исходного изображения изменяют свое положение.
Каргой смещения может стать любой файл Photoshop, Хотя все же есть одно необязательное пожелание — лучше, чтобы файл был черно-белым, а не цветным, поскольку фильтр учитывает яркость пикселей картинки, а не их цвет.
Дважды щелкнув по названию фильтра в меню, вы попадете в окно настройки (очень маленькое и незатейливое). В этом окне можно установить масштаб по вертикали и горизонтали, выбрать, как карга смещения будет „ложиться» на изображение, а также определить поведение областей изображения,
которых не коснется фильтр. После того как вы закончите со всеми предварительными настройками, нужно выбрать файл, который будет использован в качестве карты смещения. Все, фильтр полностью готов к работе!
Несмотря на то, что настроек фильтр Displace предлагает мало, с его помощью можно достигнуть очень интересных результатов. Взгляните на портрет женщины выше — его мы сделали при помощи фильтра Displace. Хотите узнать, как он создавался? Да зачем просто узнавать — сейчас мы вместе проделаем все шаг за шагом!
Откроем маленький секрет: сначала было сделано четыре файла-карты смещений, каждый из которых по-своему повлиял на портрет. Позже, совместив четыре изображения, мы смогли добиться более глубокого и полного эффекта работы фильтра. Конечно, после всех
этих операции ухудшилась детализация и ощущения глубины, но разве нам не по силам это исправить?!
Когда самое главное позади, можно нанести последние штрихи (подправить тени и цвет) — и портрет готов.
Кстати, а вы знаете, что фильтр Displace является одним из тех немногих фильтров, которые спокойно работают с изображениями в режиме CMYK? То есть если вы готовите снимки для печати в типографии, для обработки фильтром Displace вам не придется производить всевозможные манипуляции, конвергируя изображения сначала е RC8, а потом обратно в CMYK. Можно сразу приступать к работе!
Если вы работаете с одной из предыдущих версий Photoshop (не CS), то вам надо будет открыть файл giril.psd и пропустить первые три шага нашего урока. Всем остальным следует начать с первого этапа, Увлекательное изучение фильтра Displace начинается…
DIGITAL PHOTO camera
Изучаем карты смещения
Изучаем карты смещения
Разница между фальшивыми и истинными смещениями в 3D-графике
Bump maps (рельефные текстуры), Normal maps (карты нормалей), Displacement и Vector Displacement — вероятно, вы уже сталкивались хотя бы с одним из этих терминов. Несмотря на то, что о них уже есть много информации, похоже, многие путают их различия и последствия использования разных типов карт. В статье я расскажу о том, какие проблемы могут вызывать эти карты.
Все четыре типа текстур имеют одинаковое предназначение — они позволяют добавить на поверхность модели дополнительные детали, используя для этого разные способы. Эти способы можно разделить на две категории, которые я буду называть истинными смещениями (True Displacements) и фальшивыми смещениями (Fake Displacements). Истинные смещения перемещают вершины, а фальшивые стремятся достичь того же внешнего вида без изменения геометрии. Пока я сосредоточусь только на различиях между двумя категориями, а не буду анализировать каждую карту по отдельности.
В общем случае, истинные смещения обеспечивают более чёткие результаты, но сильно увеличивают время рендеринга.
Примечание на случай, если вы задаётесь вопросом, почему не упомянуты карты высот. Термин «карта высот» (Height map) описывает способ хранения информации, а не применения её к мешу. Карты высот могут применяться и как Bump, и как Displacement. В таких пакетах, как Substance используется этот термин, потому что в них карту высот можно использовать и как истинное, и как фальшивое смещение.
Прежде чем двигаться дальше, нужно упомянуть, что я VFX-художник, поэтому буду рассматривать тему с точки зрения VFX с использованием рендеринга с трассировкой пути (path tracing). Если вы используете другой способ рендеринга (например, игровые движки), то результаты будут отличаться. Возможно, в вашем движке даже имеется полная поддержка истинных смещений.
Чтобы понять, как работают фальшивые смещения, нам сначала нужно вкратце рассказать о трассировке пути. Лучи света испускаются из всех источников освещения сцены и отражаются от поверхностей объектов, пока не достигнут камеры. Есть и другой подход: лучи могут испускаться из камеры и отражаться, пока не достигнут источника света. Используемый способ не влияет на те эффекты, которые я покажу.
Угол отражённого луча вычисляется сравнением угла падающего луча к углу нормали поверхности. Те из вас, кто проходил векторную математику и не забыл её, может узнать слово «нормаль». В векторной математике, которая является фундаментом рендеринга, нормаль — это вектор, перпендикулярный к плоскости. Если упростить, то можно сказать, что каждая грань модели является плоской, то есть у каждой грани есть одна нормаль.
Примечание: на самом деле, полигоны не всегда являются плоскими. Чтобы обойти эту проблему, движки рендеринга разбивают все полигоны, в том числе и четырёхугольники, на треугольники, а затем вычисляют среднюю нормаль для всех треугольников, из которых состоит грань.
Карты нормалей называются так, потому что позволяют нам попиксельно хранить любые нормали поверхностей. Это означает, что мы можем свободно манипулировать направлением отражения лучей света, не изменяя при этом геометрию. Рельефные текстуры (Bump maps) преобразуют информацию о высотах в нормали поверхности во время рендеринга. Это означает, что для лучей света, которые, по сути, являются «глазами» движков рендеринга, нормали и Bump maps выглядят одинаково.
Слева направо: низкополигональная модель, истинное смещение, фальшивое смещение
Мы можем имитировать результаты истинного смещения, сопоставив угол нормали поверхности. В таком простом примере это может выглядеть удовлетворительно, но отсутствие деформации геометрии приводит ко всевозможным артефактам. Неважно, какой подтип текстур вы используете — Bump или Normal, Displacement или Vector Displacement, а также способ изготовления текстур — запекание или создание, артефакты зависят только от категории, потому что все они являются результатом того, что фальшивые смещения не деформируют геометрию, а истинные — деформируют.
Воздействие на освещение
Первым, что вы заметите при изучении примеров — отсутствие теней. Истинное смещение не только влияет на форму теней, отбрасываемых базовым мешем, но и создаёт новые формы, которые отбрасывают совершенно новые тени. Часто это наиболее заметно в случае самозатенения объектов, но случается и при отбрасывании теней на другие объекты.
Смещение геометрии модели приводит к самозатенению, потому что луч света не может упасть на ту же точку поверхности. Если источником света на этой схеме является солнце (параллельные лучи света), то при использовании истинного смещения создастся тень, отбрасываемая на всю выделенную красным область, чего не будет при фальшивом смещении.
Взглянув на это простой рендер, можно увидеть, что общее направление освещения передаётся обоими способами, но при фальшивом смещении истинные тени геометрии отсутствуют.
Отличным примером этого является создание кирпичной стены из плоской базовой геометрии. При истинном смещении тени в щелях стены обеспечивают ощущение глубины, а из-за отсутствия этих теней версия с фальшивым смещением выглядит очень плоской.
Но нужно сказать что отсутствие теней — не единственная видимая разница во взаимодействии со светом. При неравномерном истинном смещении мы увеличиваем площадь поверхности объекта, что приводит к повышению количества отражённого света. Поэтому при использовании фальшивого смещения тёмные области выглядят неестественно чёрными.
На рендере с небольшой пирамидкой, демонстрирующем отбрасывание теней. я увеличил контраст отрендеренного, чтобы маскировать этот эффект; так нам проще будет фокусироваться на отдельных аспектах. При взгляде на рендер без редактирования становится заметной нехватка отражённого света.
Кроме отсутствия отбрасываемых теней и недостатка отражённого света, к воздействию на освещение относится ещё один эффект. Он связан с тем, как геометрия принимает тени.
Как и в одном из предыдущих примеров, красным обозначены тени. При сравнении высоты теней, отбрасываемых на наш объект сферой, становится понятно, что на форму тени будет влиять только истинное смещение.
Истинное и фальшивое смещение, применённое к плоскостям, представляет собой волну, движущуюся вверх-вниз. Деформируется только тень, отбрасываемая на плоскость с истинным смещением, что усиливает ощущение глубины.
На все вышеупомянутые эффекты влияет угол падающего света относительно угла камеры. Если камера параллельна источнику освещения, то все эффекты как будто пропадают. Например, деформация теней тоже снижается, которому что та же деформация происходит и из вида камеры.
Кроме того, всё больше тени исчезает за самой геометрией.
Хоть это и сработает, такой подход не является решением. Тени и создаваемые или усиливаемые ими формы значительно повышают интересность сцены. И если вы используете несколько источников освещения, то всё равно сможете установить камеру параллельно только одному из них. Поэтому не позволяйте этим эффектам влиять на освещение в сцене или расположение камеры.
Глядя на последний рендер, вы могли заметить кое-что ещё. Хоть карта нормалей и воспроизводит те же значения яркости, пирамида всё равно выглядит очень плоской. Это вызвано эффектом, который я опишу ниже.
Параллакс
Являясь одним из основных принципов перспективы, параллакс описывает эффект, заставляющий объекты визуально двигаться относительно друг друга при движении камеры. Но это касается не только отдельных объектов, но и любых двух точек в 3D-пространстве. Это означает, что деформирование меша при помощи истинного смещения имеет влияние на параллакс.
Красными линиями я показал области, находящиеся у всех трёх объектах на одинаковой глубине, чтобы они могли служить отправной точкой. Синие линии сдвинуты вниз смещением. При взгляде сверху вниз истинное и фальшивое смещения выглядят почти одинаковыми, однако под углами падения линии на низкополигональной версии и версии с фальшивым смещением (Lowpoly и Fake Displacement) сохраняют равное расстояние, а на меше с использованием истинного смещения (True Displacement) они визуально движутся. Если мы наклоним камеру чуть дальше, то синяя линия на дальней части плоскости полностью исчезнет за центральной линией. При сдвиге синих линий вверх эффект будет обратным — передняя синяя линия почти полностью закроет центральную красную.
Некоторые игровые движки позволяют создавать фальшивый параллакс, называемый Parallax-mapping, при котором 2D-искажение применяется к отрендеренным пикселям, а не к геометрии. Это повышает точность, но влияет на производительность.
Забавный факт: некоторые художники используют параллакс очень интересными способами. Великолепным примером этого является Патрик Хьюз, в видео показана одна из его работ.
Углы в 90 градусов
Хотя при помощи истинного смещения можно создавать вертикальные смещения под 90 градусов, такого нельзя сказать о фальшивом смещении. Теоретически вертикальные углы можно хранить в картах нормалей, но это не имеет смысла, потому что у них не будет соответствующей области на низкополигональном меше.
На показанном выше изображении зелёной линией обозначена поверхность базового меша, а красной — высокополигональная поверхность, которую мы запечём в меш. Градиент, возникший на низкополигональной модели, демонстрирует значения, которые будет иметь получившаяся карта нормалей. Каждый угол высокополигональной поверхности может быть сопоставлен с областью низкополигональной модели, за исключением вертикального угла между областями 1 и 2, потому что он не имеет никакой ширины относительно базового меша. Рельефные текстуры (Bump maps) имеют ту же проблему, потому что во время рендеринга они преобразуются в нормали поверхностей. На первом изображении ниже показан профиль высокополигональной поверхности, которая используется для запекания нормалей и смещения, а второе изображение — это рендер с использованием запечённых текстур.
Как видите, все остальные крутые углы всё равно можно сохранить в карту нормалей, хоть они и представлены небольшими областями, но углы в 90 градусов совершенно пропадают. Обратите внимание, что обычно стоит избегать любых крутых углов с тестурами, даже при использовании истинного смещения. Такие виды смещения растягивают пиксели других текстур.
Силуэт
То, что фальшивое смещение не меняет форму геометрии, можно наглядно увидеть при изучении силуэта. В крайних случаях то же самое может даже происходить со внутренними наложениями, например, с носом, закрывающим часть щеки персонажа.
Обычно этот эффект заметен в двух случаях. Силуэты, которые должны быть плавными, оказываются резкими, а силуэты, которые должны иметь множество высокочастотных деталей, внезапно теряют эти детали.
Подповерхностное рассеяние
Если в создаваемом вами графическом ассете используется Sub Surface Scattering (SSS), то вы сможете наблюдать ещё один недостаток фальшивого смещения.
Вычисления SSS рандомизируют углы лучей света при их перемещении внутри объектов. Это значит, что они гораздо меньше зависят от углов поверхностей, чем от толщины и самой формы меша. Единственная причина, по которой мы видим в нашем примере эффект при использовании фальшивого освещения, заключается в том, что единственный свет, который достигает камеры из тёмных областей — это рассеянные лучи, а яркие области — это смешение всех лучей. Это создаёт в тёмных областях красный оттенок, но чёткость картинки не идёт ни в какое сравнение.
Чёрные области или растянутые отражения
Кроме неестественно чёрных областей, вызванных нехваткой отражённого освещения, есть ещё один эффект, вызывающий подобные артефакты. При использовании фальшивого смещения определённые сочетания нормали поверхности и угла луча могут привести к тому, что отражённый луч пройдёт через поверхность самого объекта.
Это не имеет никакого смысла, ведь мы не рендерим прозрачную поверхность. Чтобы решить эту проблему, в рендерерах придумали множество способов выхода из этой ситуации. Используемый способ зависит от движка рендеринга. Вот возможные варианты:
Другие рендереры, например Blender Cycles, перенаправляют лучи параллельно поверхности низкополигональной модели, что приводит к созданию ближайшего возможного луча. Хоть это и предотвращает их поглощение, при этом многие пиксели рядом друг с другом получают один выходной вектор, что зритель воспринимает как растянутые отражения.
Хоть я и не сталкивался с рендерерами, в которых применяется третий вариант, мне известен случай, в котором используется тот же принцип. Применение Soft Edges/Smooth Normals (разные названия одного понятия) к мешу интерполирует нормали поверхностей для имитации более плавной поверхности меша.
Обычно рендереры взаимодействуют с Smooth Normals так же, как и с фальшивым смещением. Если применить Smooth Normals к кубу, то резкие углы в сочетании с нормалями поверхностей приведут к той же дилемме, при которой рендерерам приходится выбирать один из трёх вариантов. Не знаю почему, но Arnold работает со Smooth иначе, чем с фальшивым смещением. Вместо уничтожения лучей он игнорирует Smooth Normals в тех местах, где луч должен пройти сквозь объект.
Хоть все три решения выглядят в моих примерах довольно некрасиво, проблема не так страшна, как кажется. Я использовал для этих рендеров очень яркие текстуры и, как всегда, чем ярче текстуры, тем заметнее становятся недостатки. Обычно вы не будете сталкиваться с таким сильным эффектом при использовании истинного или фальшивого смещения. Можно увидеть, насколько яркие мои текстуры, если взглянуть на сцену под углом.
Кроме того, эту проблему маскирует ещё один фактор: рендеринг является более сложным процессом, чем просто точно отзеркаленные отражения. Если вы рендерите блестящий хром, то да, вам скорее всего стоит быть внимательными, но если вы добавляете шероховатость зеркального отражения (Specular Roughness) или диэлектрические материалы (неметаллы), то этот эффект станет не таким выраженным.
Specular Roughness предназначена для имитации несовершенств поверхности на микроскопическом уровне; она реализуется добавлением случайного смещения к углу отражения. Чем шероховатей поверхность, тем больше интервал возможного смещения.
Рандомизация углов лучей размывает отражение, из-за неё часть лучей/сэмплов получает недопустимые углы. Само по себе это не позволит избавиться от проблемы полностью, вы всё равно будете видеть разницу в правильности отражения, но она будет менее очевидной.
Диэлектрические материалы отражают бОльшую часть падающего на них света под совершенно случайным углом, это называется рассеянным отражением (Diffuse Reflection), и только очень малая доля лучей отражается как зеркальное отражение (Specular Reflection). Это означает, что даже если поверхность совершенно глянцевая, проблема едва будет заметной.
Эти изображения отрендерены в Arnold; если изолировать Specular Reflection, мы всё равно можем видеть чёрные области, но они не особо заметны на финальном рендере.
Тесселяция/подразделение
Все описанные выше артефакты касались фальшивого смещения, но этот недостаток проявляется при использовании истинного смещения. Само по себе истинное смещение может создавать/воссоздавать только ту величину детализации, которую поддерживают полигоны. Это значит, что сначала нам нужно тесселировать/подразделить меш. Если не подразделять их достаточно мелко, то у нас всё равно может получиться геометрия, не поддерживающая все мелкие детали, хранящиеся в текстуре. Это означает, что может потребоваться сильное подразделение (subdivision) модели, из-за чего сцена станет очень «тяжёлой». К счастью, современные движки рендеринга имеют функцию автоматического добавления детализации, которая не может поддерживаться геометрией как фальшивое смещение. В некоторых рендерерах эта функция по умолчанию отключена, поэтому проверьте её. К сожалению, пока для неё не сложилось стандартного названия. В Arnold, например, она называется Autobump, а в Cycles — Displacement + Bump.
Чтобы понять смысл этой функции, взгляните на показанное ниже сравнение. Оба этих меша подразделены три раза, но все детали можно обеспечить только способом комбинирования.
Увы, но эта функция имеет свои баги, и многие аспекты могут привести к её неправильной работе, например, отсутствие фиксации масштаба/применения масштаба к объекту. Кроме того, может вызывать сложности использование Autobump с Vector Displacement.
Советую вам проверять правильность работы функции созданием сравнительных рендеров, особенно если вы начинающий. Один рендер сделайте с Autobump в сочетании с нужным количеством подразделений, другой без Autobump, но с очень высоким количеством подразделений, чтобы убедиться, что результаты совпадают.
Учтите, что в некоторых рендерерах использование Autobump вместе с шейдерами SSS нужно включать отдельно. Проблемы использования фальшивых смещений всё равно будут возникать для деталей, добавляемых функцией Autobump, хоть они и не окажутся особо сильными для очень мелких деталей, например, пор кожи.
Заключение
И истинные, и фальшивые смещения — отличные способы повышения качества моделей. Я намеренно использовал очень сильные примеры, чтобы чётче продемонстрировать все артефакты. Пусть это не вводит вас в заблуждение о том, что фальшивое смещение, например карты нормалей, не нужно использовать никогда.
Основное правило заключается в том, что чем весомей будет текстура влиять на модель, тем сильнее окажутся артефакты. Поэтому какой бы способ вы не использовали, всегда пытайтесь передать все основные формы через базовую топологию. Это практически необходимо при использовании фальшивого смещения, но также важно и при истинном смещении. Если вы будете соблюдать это простое правило, то сможете получать практически одинаковые результаты при обоих способах. Удастся ли вам определить, в каком случае используется истинное, а в каком фальшивое смещения?
Как и в любом сложном деле, выбор зависит от требований и баланса между качеством и производительностью. Если вы работаете с фоновыми ассетами, то, возможно, не стоит увеличивать время рендеринга использованием истинного смещения, особенное если в сцене много ассетов.
С другой стороны, если вы работаете над ассетом героя, то лучше всего использовать истинное смещение, потому что оно обеспечивает более чёткие результаты. Даже на последнем показанном рендере два способа всё равно имеют различия в качестве.
Однако у этого правила существуют исключения. Например, если график работы над видеорядом чрезвычайно плотный, то использование фальшивого смещения вместо истинного поможет вам ускорить рендеринг. А поскольку вы рендерите последовательность кадров, сокращение времени рендеринга будет умножаться с каждым дополнительным кадром.
Или, допустим, вам нужен конкретный материал, и все хорошие текстуры, которые вы находите в Интернете, имеют только карты нормалей, а у вас нет времени на самостоятельное создание материала. В таком случае вам, скорее всего, стоит использовать карту нормалей, даже если вы работаете над ассетом героя. Такое случается со многими отсканированными материалами, потому что проще и легче захватить высококачественные карты нормалей, чем создавать высококачественные смещения. Если вам интересно, как это делается, то стоит прочитать следующую статью. (Хотя я и не рекомендую использовать для выполнения таких операций смартфон.)
Даже если вы работаете со сложной 3D-фигурой, например, с лицом человка, то похожие техники можно использовать для создания высококачественных карт нормалей.
Создаём Макет Изометрической Карты в Adobe Photoshop
В этом уроке вы узнаете про некоторые новые техники и приёмы. Мы используем макет Изометрической Карты в качестве примера, и детально увидим, как она была создана. В конце урока у вас будет вполне рабочий экшен, а также уверенность в создании ‘экшенов для трансформации изображений’.
У вас нет времени, а вам нужен этот экшен, как можно скорее? Тогда вы можете приобрести данный Макет Изометрической Карты на GraphicRiver.
1. Подготавливаем Своё Рабочее Пространство
Откройте файл test.psd, который прилагается к этому уроку. Я создал его для вашего удобства, так что вам не нужно повторять какие-либо скучные шаги по созданию документа.
Убедитесь, чтобы ваше рабоче пространство было правильно настроено. Для данного урока нам нужно, чтобы были видны некоторые панели: Операции (Actions), Слои (Layers) и Стили (Styles). Если этих панелей не видно, тогда идём Окно (Window) и по очереди выбираем соответствующие панели.
Далее, вам необходимо убедиться, чтобы параметры Линейки (Ruler) были установлены на пикселы (pixels). Если вы не видите линейку, тогда нажмите клавиши (Ctrl+R), чтобы активировать её, а затем щёлкните правой кнопкой мыши по появившейся линейке, чтобы выставить параметр пикселы (pixels).
2. Готовимся к Записи
Теперь, когда мы настроили своё рабочее пространство по мере необходимости, мы можем приступить к записи нашего экшена.
Шаг 1
Идём в панель Операции (Actions), а затем нажмите значок Создать новый набор (new Action Set). Дайте любое название новому набору на своё усмотрение.
Шаг 2
После этого, нажмите кнопку Остановить запись (Stop Recording). Это делается для того, что по умолчанию после создания операции, автоматически начинается запись. Мы не хотим, чтобы это произошло.
Перейдите на слой основной (main), потому что мы не хотим, чтобы этот шаг записывался. Для нас это будет шаг, который выполняется пользователем. Пользователь определяет, какой слой выбрать.
Шаг 3
Теперь пришло время нажать кнопку Записи (Record) в панели Операции (Actions). Начиная с этого момента, практически всё, что мы будем делать в программе Photoshop, будет записываться. После того, как мы завершим запись нашего экшена, мы снова запустим этот экшен, чтобы применить точно такой же рабочий процесс на других изображениях.
3. Подготавливаем Изображение к Трансформации
Шаг 1
Наша следующая задача. Нам необходимо разделить слой основной (main) на три вертикальные полоски, а также нам необходимо записать эти шаги.
Создайте смарт-объект из слоя основной (main). Для этого щёлкните правой кнопкой мыши по слою и в появившемся окне, выберите опцию Преобразовать в смарт-объект (Convert to Smart Object). Мы делаем это, потому что нам нужно совершенно новое пространство для наших дальнейших шагов.
После этого, дважды щёлкните по слою со смарт-объектом для редактирования содержимого. Вы переключитесь на новый документ. Это пространство, где мы будем работать с нашим изображением.
Шаг 2
Шаг 3
Этот шаг мы пройдём быстро, здесь мы создадим выравнивающий шаблон. Этот слой поможет нам позже выровнять некоторые фрагменты карты по центру холста.
Создайте новый слой. Для этого, щёлкните по маленькой иконке ‘лист бумаги’ в нижней части панели слоёв. После создания слоя, появится новый слой поверх слоя основной (main).
Нажмите клавиши (Ctrl+[), чтобы переместить только что созданный слой вниз, расположив его под слоем основной (main). Назовите этот слой Шаблон (template).
В заключение, нам необходимо переключиться на слой основной (main), чтобы он был активным. Нажмите клавиши (Alt+]), чтобы переключиться на слой основной (main). При создании экшенов, нам необходимо, чтобы всё можно было редактировать и мы могли снова применить этот процесс в будущем.
4. Делим и Трансформируем Фрагменты Карты
Шаг 1
Теперь немного математики. Если мы возьмем фактический размер нашего изображения за 100% и разделим его на 3, то мы получим приблизительно 33,34%. Таким образом, это именно то значение, которое необходимо ввести в настройке Ширина.(Width). Введите значение, которые вы видите на скриншоте ниже. Очень важно не забыть про Центр преображения (Reference point location). Это точка привязки для трансформации. Расположите точку привязки по центру слева.
Как только вы ввели все данные, нажмите клавишу (Enter).
Шаг 2
Мы почти завершили данную трансформацию. Теперь нам нужно немного расширить текущее выделение влево, чтобы мы были на 100% уверены, что мы не будем вырезать непредвиденные пиксели вокруг области разбивки. Мы делаем это, потому что скрытые пиксели могут стать проблемой в будущем при трансформировании, и их будет трудно идентифицировать.
Нажмите клавишу (Enter).
Шаг 3
Далее, нажмите кнопку ‘ОК‘.
Щёлкните правой кнопкой мыши по выделенной области и в появившемся окне, выберите опцию Вырезать на новый слой (Layer Via Cut).
Переименуйте только что созданный слой, назовите его «1«. Нажмите клавиши (Alt+[), чтобы перейти на нижний слой. Теперь слой основной (main) вновь активный.
Шаг 4
Итак, у нас получилось два отдельных слоя. В принципе, в этом шаге мы проделаем те же самые шаги, которые мы проделали ранее. Единственное различие заключается в том, что мы уменьшим область выделения наполовину.
Убедитесь, чтобы слоя основной (main) был активным. Ещё раз, создайте выделение вокруг изображения карты, для этого, удерживая клавишу (Ctrl), щёлкните по миниатюре слоя, чтобы загрузить активное выделение. Отлично, мы создали активное выделение вокруг изображения карты.
Нажмите клавишу (Enter).
Шаг 5
Как я и обещал, шаги очень похожи. И для этого примера нам также необходимо расширить выделение вокруг левой стороны. Посмотрите, как мы это делали ранее.
Нажмите клавишу (Enter).
Для данного фрагмента, повторите технику «Чистим края среза», которую мы использовали в Шаге 3 данного параграфа.
Щёлкните правой кнопкой мыши по выделенной области и в появившемся окне, выберите опцию Вырезать на новый слой (Layer Via Cut). Переименуйте только что созданный слой, назовите его «2«. Нажмите клавиши (Alt+[), чтобы перейти на нижний слой. Переименуйте данный слой на «3«.
Шаг 6
Теперь у нас есть три равные части карты. Мы готовы трансформировать две из них, а именно “1” and “2”. Что делать с третьим, вы узнаете позже. Пока давайте перейдем к трансформации.
Шаг 7
5. Применяем Выравнивание
Шаг 1
Как вы могли заметить, теперь у нас есть проблема. Мы видим разрыв между третьим нетрансформированным слоем и остальными слоями. Если сейчас мы трансформируем третий слой, то это нам не поможет.
В обычной ситуации мы бы трансформировали бы третий слой, а затем переместили бы его влево. Но поскольку мы записываем экшен, то данная техника не подойдёт для нас. Поэтому нам нужно сделать что-то более универсальное. Это делается для того, чтобы быть уверенным, что экшен будет работать на изображениях любых размеров.
Ладно, сейчас нам нужно создать многократное выделение. Мы находимся на слое “2”. Нам нужно выделить оба слоя: слой «2» и слой «1«. Удерживая клавишу (Ctrl), щёлкните по слою “1”, чтобы добавить к выделению. Теперь у нас оба слоя выделены.
Шаг 2
Мы не можем просто так выравнивать объекты один за одним при записи экшена. Может быть, вы скажете, что это просто, учитывая текущий пример, но это не совсем так. Вы можете добиться выравнивания для текущего изображения, но это не будет работать для другого изображения. Следовательно, нам нужен очень гибкий метод, который будет работать для всех видов изображений.
Давайте проведём небольшой трюк. Нам нужно выровнять наш слой со смарт-объектом с нижним левым углом.
По мере продвижения, у нас уже выделен слой со смарт-объектом, и нам нужно добавить слой шаблон (template) к данному выделению. Удерживая клавишу (Ctrl), щёлкните по слою шаблон (template).
Далее, нажмите по значку Выровнять по нижнему краю (Align bottom edges). Мы поместим слой у нижнего края холста.
Шаг 3
Пришло время выровнять третью часть нашей карты.
Перейдите на слой «3«. Далее, выберите инструмент Выделения (Marquee Selection Tool). Удерживая клавишу (Ctrl), щёлкните по миниатюре слоя со смарт-объектом, чтобы загрузить активное выделение.
Выберите инструмент Перемещение (Move Tool). Выровняйте слой «3» по нижнему краю. Далее, выровняйте слой по левому краю. В заключение, выровняйте слой по правому краю.
Нажмите клавиши (Ctrl+D), чтобы отменить текущее активное выделение.
Шаг 4
Шаг 5
Пока наша карта находится в странном положении. Нам нужно повернуть её в нужное положение.
Примените следующие значения:
6. Отделяем Фрагменты Смарт-Объекта
Теперь нам нужно разделить части смарт-объекта. Мы выполняем этот шаг, потому что мы хотим применить некоторые стили затенения к слою со средней частью карты. Поэтому мы хотим, чтобы наши части были отделены друг от друга.
Шаг 1
Перейдите на слой “1”. Щёлкните правой кнопкой мыши по данному слою и в появившемся окне, выберите опцию Создать Смарт-объект путём копирования (New Smart Object via Copy).
Дважды щёлкните по вновь созданному слою для редактирования содержимого слоя.
В отдельном открытом документе, перейдите на слой “2”.
Нажмите клавишу Delete (Backspace), чтобы удалить слой “2”.
Закройте текущий документ, при закрытии документа. нажмите кнопку Сохранить (Save).
Шаг 2
Далее, растрируйте текущий слой, который мы только что закрыли. Щёлкните правой кнопкой мыши по данному слою и в появившемся окне, выберите опцию Растрировать слой (Rasterize layer). Назовите этот слой “1”. Нажмите клавиши (Alt+[), чтобы сметить на один слой вниз.
Для другого смарт-объекта, шаги будут почти те же самые. Дважды щёлкните по текущему слою для редактирования содержимого слоя.
В отдельном открытом документе, перейдите на слой “1”. Нажмите клавишу (Backspace), чтобы удалить слой “1”. Закройте текущий документ, при закрытии документа. нажмите кнопку Сохранить (Save).
Растрируйте слой. Щёлкните правой кнопкой мыши по данному слою и в появившемся окне, выберите опцию Растрировать слой (Rasterize layer). Назовите этот слой “2”.
7. Заключительные Шаги с Изображением Карты
Шаг 1
В этом коротком параграфе мы применим стили слоя к средней части карты слоя “2”. нам нужно, чтобы карты выглядела более реалистичной. Поэтому, мы добавим лёгкое затенение к ней.
Перейдите на слой “2”. Дважды щёлкните по нему, чтобы открыть окно Стилей Слоя (Layer Styles). Добавьте стиль слоя Наложение Цвета (Color Overlay). Уменьшите Непрозрачность (Opacity) до 35%. Установите следующий цвет наложения #000000 (сплошной чёрный).
Шаг 2
Пришло время расположить по центру холста все части карты.
Перейдите на слой “1”, а затем дополнительно выделите слои “2” и «3«. Для этого, удерживая клавишу (Ctrl), щёлкните по слою “2”, а затем по слою «3«. Нам нужно, чтобы все три слоя были выделены.
Нажмите клавиши (Ctrl+G), чтобы сгруппировать все выделенные слои в одну группу. Переименуйте группу. Назовите эту группу Все Части (All Parts).
Обратите внимание, что расширение группы не является записываемой функцией в Photoshop.
Расширьте группу, для этого щёлкните по маленькому треугольнику слева от миниатюры слоя с группой. После этого, перейдите на слой «1«.
Этот трюк особенно важен в автоматическом режиме, потому что, как только мы создали группу, мы больше не сможем увидеть слои. Но мы все же хотим, чтобы была возможность выбирать слои и продолжать запись экшена. Итак, когда мы нажимаем на слой «1«, то мы автоматически расширяем группу, и Photoshop снова может видеть слои.
Перейдите на слой с группой Все Части (All Parts). Удерживая клавишу (Ctrl), дополнительно выделите слой Шаблон (template).
Выберите инструмент Перемещение (Move Tool).
Шаг 3
В верхней панели управления, выберите режим Выравнивание центров по вертикали (Align Vertical centers), а затем выберите режим Выравнивание центров по горизонтали (Align Horizontal Centers). Не обращайте внимание, если слой Шаблон (template) немного сместился.
Перейдите на слой шаблон (template), а затем удалите его, нажав клавишу ‘Backspace‘.
Шаг 4
Мы уже избавились от слоя Шаблон (template). Теперь нам нужно создать задний фон вместо этого. Перейдите на слой “3”. Создайте новый слой. Щёлкните по значку Создать новый слой (new layer) в нижней части панели слоёв. Назовите этот слой Задний фон (Background).
8. Добавляем 3D Объём к Поверхности Карты
Шаг 1
Это будет отправной точкой для создания объёма для карты.
Удерживая клавишу (Ctrl), выделите сразу несколько слоёв «1«, «2«, and «3«. Далее, нажмите клавиши (Ctrl+E), чтобы объединить выделенные слои.
Теперь нам нужно дважды продублировать объединённый слой. Для этого, дважды нажмите клавиши (Ctrl+J). Сейчас вы должны увидеть три копии.
Шаг 2
В этих шагах мы создадим 3D поверхность для нашей карты.
Спуститесь вниз на один слой, нажав клавиши (Alt-[). Нижний слой станет активным. Сгруппируйте текущий слой (Ctrl+G). Назовите новую группу Объём (Volume). Спуститесь на слой ниже, нажав клавиши (Alt-[).
Теперь нам нужно добавить эффект 3D объёма. Вначале выберите инструмент Перемещение (Move tool). Удерживая клавиши (Alt+Ctrl) и одновременно нажмите клавишу направления со стрелкой вверх шесть раз.
Далее, перейдите на слой с группой Объём (Volume), чтобы провести сведение (Ctrl+E).
К полученному слою, примените стили слоя. Добавьте стиль слоя Наложение цвета (Color Overlay), а также уменьшите Непрозрачность (Opacity) до 35%. Установите чёрный цвет #000000 в качестве цвета наложения.
Нам нужно немного сдвинуть слой с лицевой поверхностью. Переключитесь на верхний слой (Alt+]). Выберите инструмент Перемещение (Move Tool), а затем нажмите клавишу направления со стрелкой вверх семь раз.
Переименуйте слой, назовите его Поверхность (Face).
Шаг 3
В последнем шаге мы создадим слой Тень (Shadow) для нашей карты. Перейдите на слой Задний фон (background). Нажмите клавиши (Alt+]), чтобы сдвинуть на слой выше. Примечание переводчика: создайте новый слой поверх фонового слоя.
К созданному слою, примените стили слоя. Добавьте стиль слоя Наложение цвета (Color Overlay), а также установите степень Непрозрачности (Opacity) на 100%. Выберите чёрный цвет #000000 в качестве цвета наложения.
Растрируйте данный слой.
Выберите инструмент Перемещение (Move Tool) и с помощью мышки, слегка сметите тень вниз.
Шаг 4
Поздравляю! Мы завершили урок! Теперь мы можем нажать кнопку Остановить запись (Stop Recording).
Мы завершили урок! Отличная работа!
В этом уроке я продемонстрировал рабочий процесс и как работать с экшенами для трансформации изображений. Это не самый сложный процесс, но и не такой лёгкий. Если вы сделали всё правильно, то теперь у вас есть вполне функциональный экшен, и вы можете применить его к любым другим изображениям.
Область применения экшена не ограничена, как вы могли бы подумать, поэтому, безусловно, стоит узнать, начали ли вы уже изучать Photoshop. Если вы овладеете знаниями, то вы увидите, как это поможет вам сэкономить время на выполнение повседневных задач.
Не стесняйтесь задавать любые вопросы в комментариях к уроку. Желаю вам удачи и новых экспериментов!
Не забывайте, что вы можете приобрести данный Макет Изометрической Карты на сайте GraphicRiver.
Смешение карт Displacement как правильнее сделать
Через Blend материал, наверное.
Через Blend материал, наверное.
отображает всеравно что-то одно, а вот как объединить первый и третий вариант?)
сейчас попробую этот способ накладывал разные маты
Через Blend материал, наверное.
разное перепробовал, максимум чего добился
хм, тоесть либо вирей либо отказаться от идеи исполнения либо делать лишние 200 к полигонов?)
хм, тоесть либо вирей либо отказаться от идеи исполнения либо делать лишние 200 к полигонов?)
ну можно в фотошопе сделать текстуру
думал об этом, просто вроде как многие миксуют непосредственно в программе, да и способ выходит негибкий совершенно
хочется минуя его, чтоб впоследствии в проектах применять непосредственно только готовую текстурку шва
думал об этом, просто вроде как многие миксуют непосредственно в программе, да и способ выходит негибкий совершенно
вот с композита и начинал игры с этим, только выходит так что карта шва не полностью отрабатывается
самую верхушку нитки если выдавит уже хорошо. По моим представлениям бамп шва должен обработаться поверх на уже обработанном бампе кожи если прикинуть. Еще не пробовал разве что в прозрачность альфа карту кидать
Возможно не совсем понял задачу, но можно смешивать дисплейс через композит.
Только зачем делать кожу дисплейсом? нормал бамп нет?
Всё про Bake (Запечку) как этап ААА-пайплайна
Привет! Мы продолжаем цикл статей по пайплайну разработки стилизованных персонажей. Сегодня расскажем, что такое этап запечки, и как перенести детализацию с высокополигональной модели (high poly) на низкополигональную (low poly).
Запечка (Bake) — четвёртый этап ААА-пайплайна. На прошлом мы сделали развёртку, а сейчас будем её использовать для создания Normal Map, AO и Color ID.
Примечание: нам часто говорят, что правильнее писать «запекание», а не «запечка». Мы пишем «запечка», потому что это устоявшийся термин в индустрии.
Гугл на слово запечка показывает то, что нам нужно, а на слово запекание предлагает запечь курочку
Что такое запечка
Взглянем на low poly модель, которую сделал наш студент Leon.
Низкополигональная модель, созданная на этапе ретопологии
В ней минимум полигонов и чистая сетка. Эта модель будет загружаться в игровой движок.
Есть ещё high poly модель с высокой детализацией и скульпт.
Хайполи модели под сабдив и скульпт
Технология запечки позволяет нам перенести все детали с high poly и скульпта на low poly-модель.
В итоге, в игровом движке будет low poly модель с минимальным количеством полигонов, но выглядеть она будет так, как будто на ней есть все эти детали:
Для внимательных: ID Map никак не влияет на вид модели, в отличие от нормала и АО, но она пригодится при текстурировании, поэтому эту карту тоже будем печь.
Как это работает?
Мы берём low poly модель и добавляем на неё запечённые карты Нормала и АО. А эти карты обманывают поведение игрового света. Модель начинает бликовать так, как будто на ней есть все эти фаски, вырезы и прочие детали.
Для тех, кто не понимает, о чём речь: мы очень подробно писали про вертекс нормали и принцип работы нормала в статье про сетку.На этом этапе пайплайна — запечке, наша задача: запечь 3 карты.
1) Normal map — карту неровностей
2) Ambient Occlusion (AO) — карту затенения
3) Color ID — цветные маски
В Marmoset можно запечь гораздо больше карт, про это будет дальше.
Мы добавим эти карты на нашу low poly модель, на ней появится вся детализация с high poly и скульпта, а благодаря карте Color ID модель будет легче разбить по материалам и текстурировать.
Все карты создаются на основе развёртки, которую мы сделали на прошлом этапе пайплайна. Без развёртки карты не запекутся. Если есть ошибки на развёртке или low poly модели, то мы столкнёмся с кучей проблем.
Ссылки на теорию
Вот несколько наших статей, прочитав которые ты точно поймёшь, как работает «магический» трюк с обманом вертекс нормалей.
Какие карты будем печь
Нет смысла запекать карты, если не знаешь, что они делают и как работают.
1. Normal Map
Normal Map переводится как «карта нормалей»
Она изменяет направление блика на геометрии.
Карта создаёт виртуальные вертекс нормали в каждой точке low poly модели и искажает поведение света. Если наложить запечённый нормал на модель, то она будет выглядеть почти как high poly.
Вот хороший пример: low poly модель с включенным Нормалом и без него.
Модель с включенным нормалом и без него
Новые полигоны не создаются, это лишь иллюзия формы:
Приглядись, видишь low poly сетку? Все детали и затенения, которые ты видишь — иллюзия.
Чтобы создать нормал, нужно взять развёртку, которую мы делали ранее, взять high poly и скульпт, загрузить в программу для запечки и нажать кнопку «bake».
Там много нюансов, но мы обо всём расскажем.
Из чего печётся Normal map
Что нужно знать о Нормале
Небольшие чёрные полосы на нормале — это нормально.
Никто не будет разглядывать нашу модель под микроскопом.
Чёрные полоски на нормале
Почему не стоит сильно волноваться о чёрных полосах?
Игрок почти всегда видит модель в игре на расстоянии. Поэтому не нужно тратить несколько часов, чтобы убрать чёрные полоски на нормале:
Та же модель, но на расстоянии. Чёрные полосы не режут глаза, — значит, всё окей.
Из чего состоит карта нормалей
Normal map создает иллюзию объёма благодаря трем картам в каналах текстуры: красный, зелёный, синий.
Чтобы переключаться между каналами, откроем файл с нормалом в Photoshop и зайдём во вкладку Channels.
Красный канал показывает искажение вертекс нормалей по горизонтали. Чем светлее пятно на красном канале — тем сильнее виртуальная поверхность наклонена вправо, а чем темнее — тем больше «поверхность» бликует влево.
Красный канал нормала
Зелёный канал — работает так же, но искажает шейдинг по вертикали.
Светлый-блик поворачивается наверх, а тёмный — вниз.
Зелёный канал Нормала
Чтобы лучше понять разницу между этими двумя каналами, посмотрим на эту часть модели:
У бочки на high poly есть фактура дерева.
Затемнение идёт только по одной из осей.
Так как красный канал нормала показывает искажение вертекс-нормалей только по горизонтали, а скосы между досками как раз и отклоняются влево или вправо, то на нём будет много информации.
А зелёный канал — показывает искажения по вертикали. Так как виртуальные плоскости не отклоняются вверх/вниз, то затемнений почти нет, то информации на нормале в этом канале почти не будет:
Зелёный и красный канал нормала на примере бочки
Красный и зелёный каналы — основные для нас (как моделлеров).
Но у Нормала есть ещё синий канал.
Синий канал имитирует углубления в объекте.
В играх он практически не используется.
За счет изменения синего цвета на нормале создаются искажения на плоской поверхности.
Если на синем канале есть артефакты, можно просто выключить этот канал, т.е. отключить синий цвет у нормал мапа в фотошопе. Или просто их замазать артефакты кисточкой.
Синий канал нормал
Больше про три канала Нормала — в этой статье.
У каждого канала — своя функция.
При артефактах после запечки иногда нужно править нормал руками.
Иногда это делается сразу на всех трёх каналах, а иногда — на одном из них.
Если ты не разобраться в функциях этих каналов, сложно будет редактировать нормал.
Нейтральный цвет Нормала
128х128х255 — нейтральный цвет нормала.
Если добавить полностью нейтральный нормал, то особой разницы видно не будет. Модель будет шейдить так же, как обычная лоуполи.
В каком формате лучше хранить нормал
После запечки, скорее всего, придётся вносить изменения в нормал, используя фотошоп.
Поэтому файл лучше сохранять в форматах Targa или TIF.
При сохранении есть выбор, сохранять в 24 или 32 bit.
Если есть Альфа-канал — сохраняем с 32 bit.
Если Альфа-канала нет — в 24 bit.
2. Карта АО
Так выглядит запечённая карта АО
Карта Ambient occlusion (AO) — это карта затенения.
Она показывает самые глубокие тени, которые есть в объекте.
В основном это тени в углублениях и на пересечениях. Эту карта используют игровые движки для корректного освещения. Она также очень полезна в текстурировании.
Если добавить на low poly модель карту АО, на модели появятся самые глубокие тени
Также как и нормал, карта АО печётся на развёртку модели из high poly и скульпта.
Карта AO создаётся из highpoly и скульпта
При запекании по-умолчанию эта карта чёрно-белая, но на этапе текстурирования её можно покрасить.
С картой АО разобрались, последняя карта, которая нам нужна — Color ID
3. Карта Color ID
У наша модель состоит из разных материалов: металла, камня, дерева и ткани.
Во время текстурирования нам нужно быстро выделять геометрию, которая будет, например, металлом или деревом.
Чтобы это можно было сделать в один клик внутри Substance Painter, нам нужно запечь карту Color ID. Она позволяет быстро выделять большие куски. А в программе для текстурирования эту группу объектов можно легко затекстурить.
Вот так, с помощью этой карты мы в считанные секунды красим модель в разные цвета:
Быстро красим модель в Substance Painter, используя карту Color ID
Для того, чтобы создать карту Color ID, нам нужно покрасить high poly-модель в разные цвета. Один цвет — это одна группа объектов, как правило разбитая по материалам. Например, всё дерево на Color ID оранжевое, вся кожа —розовая, ржавый металл — синий, шерсть — голубая, а новый и чистый метал —зелёный.
Это не цвета будущей модели — здесь они могут быть любыми. Главное, чтобы они были контрастными.
Дополнительные карты
В мармосете куча карт, которые можно запечь.
Их в разных пайплайнах используют разные художники для текстурирования:
Position map с помощью градиентов помогает накладывать текстуры в разных плоскостях модели.
Сurvature выделяет все края на модели и упрощает создание затёртостей и повреждений. Очень полезная карта на ряду с АО.
Thickness запекает толщину, что необходимо для имитации подповерхностного рассеивания.
Часто для hand paint текстур пекут свет прямо на текстуру. Иногда необходимо запечь альфу — карту прозрачности.
Еще мармосет умеет печь цвета и материалы с других моделей и текстур, это иногда помогает не переделывать много текстур с нуля.
Сейчас проще печь дополнительные карты прямо в Substance Painter.
Источники информации:
- http://3dpapa.ru/accurate-displacement-workflow/
- http://www.malbred.com/3d-grafika-3d-redaktory/sovremennaya-terminologiya-3d-grafiki/displacement-mapping.html
- http://3dlancer.net/ru/lessons/v-ray/obzor-modifikatora-displacement-vraydisplacementmod-208
- http://render.ru/ru/dimson3d/post/11825
- http://xn—-8sbxhfpamkmin.xn--p1ai/?p=3504
- http://habr.com/ru/post/507262/
- http://design.tutsplus.com/ru/tutorials/isometric-map-mock-up-action-deconstruction-tutorial—cms-29054
- http://3ddd.ru/forum/thread/show/smeshenie_kart_displacement_kak_pravilnee_sdelat
- http://render.ru/ru/XYZ/post/17128