Как сделать карту одного цвета

Добавил пользователь Алексей Ф.
Обновлено: 04.10.2024

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

Карта создаёт виртуальные вертекс нормали в каждой точке low poly модели и искажает поведение света. Если наложить запечённый нормал на модель, то она будет выглядеть почти как high poly.

Вот хороший пример: low poly модель с включенным Нормалом и без него.

Модель с включенным нормалом и без него

Новые полигоны не создаются, это лишь иллюзия формы:

Приглядись, видишь low poly сетку? Все детали и затенения, которые ты видишь — иллюзия.

Там много нюансов, но мы обо всём расскажем.

Из чего печётся 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 текстур пекут свет прямо на текстуру. Иногда необходимо запечь альфу — карту прозрачности.

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

Мне всегда нравились карты городов, и несколько недель назад я решил создать свою собственную, художественную версию. Немного погуглив, я обнаружил крутое руководство, написанное Фрэнком Себальосом. Оно увлекательно и полезно, но я предпочитаю более подробные/реалистичные карты-схемы. Из-за этого я решил создать свою собственную версию карт. Итак, давайте посмотрим, как мы можем создавать красивые карты с помощью Python и данных OpenStreetMap.


Установка OSMnx

Прежде всего нам нужно установить Python. Я рекомендую использовать Conda и виртуальные среды ( venv ) для создания рабочего пространства. Также мы собираемся использовать пакет Python OSMnx, который позволит нам загружать пространственные данные из OpenStreetMap. Чтобы развернуть venv и установить OSMnx, нужно выполнить две команды Conda:

Скачивание дорожно-уличных сетей

После успешной установки OSMnx мы можем начинать программировать. Первое, что нам нужно сделать, – это загрузить данные. Сделать это можно разными способами, один из самых простых – использовать метод graph_from_place() .

graph_from_place() принимает несколько параметров. place – это запрос, который будет использоваться в OpenStreetMaps для извлечения данных указанного места, retain_all вернёт нам все улицы, даже если они не связаны с другими элементами, simplify немного очистит предоставленный граф, а network_type укажет, какой тип уличной сети нужно получить.

Я хочу получить все возможные данные (network_type=’all’) , но вы можете загружать только проезжие дороги, используя drive , или пешеходные дорожки, используя walk .

Другой способ загрузить данные – использовать graph_from_point() , который позволяет нам указать GPS-координаты. В некоторых случаях этот вариант более удобен, например в местах со схожими названиями, и даёт нам большую точность. Используя dist , мы можем сохранить только те узлы, которые находятся в указанных пределах от центра графа.

Вам необходимо учитывать, что, если вы загружаете данные из крупных мест, таких как Мадрид или Берлин, нужно немного подождать, чтобы получить всю информацию.

Распаковка и раскраска наших данных

И graph_from_place() , и graph_from_point() вернут MultiDiGraph , который мы можем распаковать и положить в список, как показано в руководстве Фрэнка Себальоса.

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

Есть даже возможность идентифицировать определённые дороги и как-то иначе раскрасить только эти дороги.

В моём примере colourMap.py я использую следующие цвета:


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

Чертим и сохраняем карту


После этих шагов нам нужно просто сформировать и сохранить карту. Я рекомендую использовать fig.tight_layout(pad = 0) для настройки параметров карты, чтобы хорошо подогнать части чертежа.

Результаты

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


Одно различие, которое следует учитывать между graph_from_place() и graph_from_point() , заключается в том, что graph_from_point() получает данные об улицах из окрестности на основе установленного вами расстояния ( dist ). В зависимости от того, нужна ли вам простая карта или более подробная, вы можете использовать любой из этих методов. Карта Мадрида была создана с помощью graph_from_place() , а карта Берлина – с помощью graph_from_point() .


Вдобавок к этому, возможно, вам понадобится изображение размером с плакат. Самый простой способ сделать это – установить атрибут figsize внутри ox.plot_graph() . figsize может регулировать ширину и высоту в дюймах. Обычно я выбираю размер побольше, например figsize=(27,40) .

Бонус: добавляем воду

OpenStreetMap также содержит данные о реках и других природных источниках воды, таких как озёра или водные каналы. Снова используя OSmnx, мы можем загрузить эти данные.


Наконец, нам нужно сохранить рисунок. В этом случае я не использую границы с bbox внутри plot_graph . Это ещё одна вещь, с которой можно поэкспериментировать.

После успешной загрузки водоёмов нам нужно соединить два изображения. Немного GIMP’a или Photoshop’a сделает своё дело; не забудьте, что эти два изображения должны быть с одним и тем же fig_size или границами, bbox , для упрощения интерполяции.


Последние штрихи

Мне нравится добавлять текст с названием города, GPS-координатами и названием страны. GIMP или Photoshop делают своё дело.



Заключение и код

Код для создания этих карт доступен в моем GitHub. Не стесняйтесь использовать его и покажите мне свои результаты! Надеюсь, вам понравился этот пост. Благодарю, что прочитали, и призываю вас делиться знаниями, которые приведут нас к лучшим, невероятным результатам!

Отвечая на призыв автора, делимся знаниями на нашем курсе Python, который будет еще выгоднее с промокодом HABR, добавляющим 10% к скидке на баннере.

Нежданчик! Некропост ваще зачётный)

Суть топика: рисовать блоками на карте, зная их цвета.
Каждый блок = пиксель на карте, это все наверняка знают.

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

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

Лампы, тем не менее, не отбрасывают тень, их можно смело использовать в качестве ограничителей.

Надо понимать, что некоторые блоки (и не только блоки) занимают больше чем 1 блок в высоту. Так, например, неприкрытый забор занимает 2 блока. Огонь занимает 2 блока. Надо ставить высокий блок так, чтобы его верхушка совпадала с общим уровнем. В таблице есть столбец F, в котором есть подсказка, сколько блоков всего получится вся конструкция из блоков.

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


Для большего удобства в таблице можно включить фильтры, вот тут

На втором листе всё отсортировано "примерно" по цветастости.

Ну и насчёт стекла. Т.к. стекло совсем слегка, но оттеняет блоки внизу, надо учитывать это, рисуя под стекольной крышей. Я брал "чистые" цвета без стекла над блоками.

P.S.: кактусы не нужны из-за их выпадения, но я их всё равно включил в таблицу. Мало ли.

Хочу по сабжу сделать шпаргалку, чтобы было удобнее выбирать цвет для рисования (если вообще этим кто-то занимается).
Просто я хотел нарисовать что-нить над домом, чтобы было прикольно видно на карте (типа пример рисования (надо переключиться в билд-зону на карте) - 1, 2, 3, 4)

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

Вопрос к знатокам: есть ли уже какая готовая статья по раскраске карты или мне всё же чтоит заняться сбором материала?

(UPDATE 2011-10-23)

вот что пока выяснил (рисунок будет сам обновляться):

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

(UPDATE 2011-10-25)

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

и еще цвет тростника тоже как при возвышении.

исчезли саженцы, грибы, люк, двери, кровать, грядка (т.к. ее невозможно заставить не изменяться в грязь). добавлена губка, исправлен огонь (в начале я не учёл, что он тоже как блок может выпирать и записал значение светлее)


что для меня ещё неизвестно - чёрное.

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

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

_AK_47_

Зачем это вообще надо? и жертвовать шерсть которая нужна людям для Эпических построек, а тебе для обычных букв и цифр.

Ice1408

Glukovich

Ice1408, чпачиба, что процитировал, только я не понял, это призыв к действию или ты про опечатку?)))) под сбором материала я имел в виду сделать сводную таблицу блоков и пикселей карты.

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

и как я уже сказал, использовать шерсть для этого - последнее дело.

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

Ice1408

StoOne

Занимался и занимаюсь этим до сих пор)

Обсид - черный
Любой камень - серый
Снег -белый
Факел редстоуна - ярко красный
Факел редстоуна и сверху стекло - бледновато розовый
Факел - желтый
Факел и сверху стекло - ели заметный желтый
Обс и секло - бледный черный(юзай для границ)
Блок земли - коричневый
Блок земли с травой - зеленый
Трава + стекло - цвет лайма
Вода - юзай когда нужен синий
Лампы - не отображаются на мапе - юзай для ограничения воды
Ацццццкий камушек - коричнево-красноватый)

Minecraft

Миры "Minecraft" огромны, и легко заблудиться, если отойти слишком далеко от своей базы. Чтобы не сбиться с пути, можно установить маяки, использовать факелы или просто нарисовать карту.

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

Вот как получить в свои руки карту в "Minecraft", а затем использовать ее.

Как сделать или найти карту в Minecraft

Есть три способа получить карту в "Minecraft": сделать ее, выменять или найти в сундуке.

Создание карты

Чтобы сделать карту в Minecraft, вам понадобится один компас и восемь листов бумаги. И бумага, и компас могут быть изготовлены из сырья, которое вы будете копать и искать в своем мире.

Важно: Если вы играете в "Minecraft: Bedrock Edition", вы также можете объединить девять листов бумаги, чтобы получить базовую карту, на которой будет нарисована земля вокруг вас, но не будет отслеживаться ваше местоположение.

"Bedrock Edition" также позволит вам начать новую игру с уже готовой картой. Просто включите "Starting Map" в меню World Preferences перед созданием мира.

Во-первых, бумага. Бумага изготавливается из сахарного тростника, одного из самых распространенных ресурсов. Сахарный тростник растет возле воды как в болотистых, так и в пустынных биомах. Положив три куска сахарного тростника в ряд на стол для ремесел, вы получите три листа бумаги. Это означает, что для карты вам понадобится не менее девяти кусков сахарного тростника.


Скрепив вместе кусочки сахарного тростника, вы получите бумагу.

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


И железо, и красный камень можно найти в подземных пещерах.

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

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


Поместите слитки в каждом из кардинальных направлений, а в центре - немного краснокаменной пыли.

Когда у вас есть материалы, вы можете наконец-то сделать карту. Поместите компас в центральный слот стола для ремесел размером 3х3 и вставьте бумагу в каждый из остальных девяти слотов.

Теперь у вас есть пустая карта, готовая к заполнению.


Пустая карта выглядит как пожелтевший лист бумаги.

Поиск карты

"Крафт", очевидно, неспроста присутствует в названии игры - почти все, что вы используете в игре, может быть создано.

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

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


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

Как использовать карту в Minecraft

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

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


Заполненная карта деревни.

Конечно, ваш мир "Minecraft" больше, чем то, что показано на карте. Как только вы покинете его пределы, либо создайте новую карту, чтобы продолжать следить за собой, либо уменьшите масштаб своей первоначальной карты.

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


Обновите свои карты, чтобы увидеть больше ландшафта.

Обозначение местоположения на карте с помощью баннера

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

Чтобы разместить маркер, сначала нужно сделать баннер. Знамена можно изготовить, положив шесть кусков шерсти (они должны быть одного цвета) в два верхних ряда и одну палку в нижний-средний слот стола для ремесел. Вы также захотите назвать знамя, используя наковальню, что будет стоить одно очко опыта.


Сделайте и назовите баннер.

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

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

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


Ваши знамена появятся на карте с указанием их названий.

Читайте также: