Cracked wall material

Вчера я провел целый день с экспериментами над некоторыми из моих активов из Divinity’s Reach Demo для Unreal Engine 4, и я сделал очень хороший материал, который включает в себя Vertex Paint, и даже генерирует процедурную карту нормалей.
Сегодня я имею очень мало времени, поэтому я объясняю большинство вещей кратко.

Во первых, этот материал предназначен для использования на стенах домов. И первая проблема которая возникла, заключалась в том, что мои дома были слишком низкополигональными, что может быть отлично для производительности, но я не подходит для использования VertexPaint и моей задумки. Поэтому мне пришлось вернутся к Maya, и переделать топологию моей модели, для того чтобы иметь в наличии больше вершин (vertex) (От 292 до 861. Я думаю что некоторые, из моих учителей убили бы меня за такой polycount). Для тестов, вы можете использовать обыкновенный куб с достаточной плотностью сетки.

Image

[свернуть]
После того как я изменил мою модель, и импортировал текстуры в UE, я начал манипуляции с материалом. В начале это был мастер материал, выглядевший вот так:
Image

[свернуть]
Хотя это кажется все довольном страшным, это действительно базовый материал. На самом деле, это даже 2 материала объединены в один. Я использовал Lerp для каждого канала, используя красный цвет вершин (vertex). Кроме этого, я добавил параметр, позволяющий контролировать окраску домов и цвет штукатурки. Вот так это выглядит визуально на уровне:
Image

[свернуть]
Сейчас материал выглядит не плохо. На самом деле этот материал, и материал который я делал еще для UDK, очень схожи. Однако, если вы посмотрите на реальный мир, вы заметите, что трещины не имеют такого гладкого перехода.
Итак, я начал с Photoshop, и я создал 3 разных текстуры облаков после чего упаковал в одну текстуру.
Image

[свернуть]
Теперь, после того, как поэкспериментировал с нодами, мне удалось создать хорошую альфу для смешивания текстур.
Image

[свернуть]
И так это выглядит на данный момент:
Image

[свернуть]
Как вы видите смешивание происходит намного лучше, но я пропустил нечто большое, и как правило, можно ожидать что гипсовый слепок, дает тень на кирпич, это еще предстоит сделать.
Сначала я пытался просто подделать тени, просто сдвигая немного мою маску и умножая на цвет, но результат получился довольно плохим, поэтому пришлось реализовать другой способ. Так как это цвет в grayscale, я мог бы использовать это в качестве карты высот, и преобразовать в normal map. И для этого я обнаружил интересные функции в UE. У меня возник соблазн использовать NormalFromHeightMap, однако вход функции (input) поддерживает только Texture2D а не float4 как у меня. Тогда я нашел ноду NormalFromFunction, которая делает все тоже самое, но при этом работает с float3.
И вот так я пришел к такому решению:
Image

[свернуть]
Как вы видите, я клонировал 3 раза код альфа маски, а затем немного сдвинул UV’s. Результат 3 функций, я объединил в узле NormalFromFunction, имея в результате дешевую по оптимизации но при этом динамическую карту нормалей. Функция NormalFromFunction, поставляется вместе с движком, поэтому у вас не возникнет проблем с поиском онной.
Image

[свернуть]
Я знаю что материал выглядит немного грязно. Но когда у вас много нод и узлов между ними, практически нету шанса чтобы они не пересекались.
В результате всего я получил такой материал:
Image

[свернуть]

Original page
От othelnic12:
Так же вы можете посмотреть мой тутор, чтобы понять некоторые моменты о Vertex Paint более подробно:
Video


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