Перейдем к не менее интересной теме - производство скальных ассетов.
Это один из двух тех процессов, который я используя в своей практике. Здесь опишу только один.
Второй - это процедурная генерация с использованием Houdini и связями для передачи функционала редактирования модели и ее шейдера из одной среды в другую.
Процедурный подход весьма сложен если вы только начинаете это изучать и требует знаний из первого подхода. Так что разберемся пока с этим.
Итак, скалы (как впрочем и средние и мелкие камни). Чтобы вообще к ним подступиться у меня в проекте была подготовлена болванка:
Простые болванки, которые помогают найти опору для последующего визуала. А дальше я отбираю некоторые интересные (на мой взгляд) кастеры и перенаправляю их на редактирование:
Как видите, силуэт абсолютно безобразный. Но как силуэт вполне годится - отсюда мне нужна только общая форма.
Ну а после я формирую несколько болванок, имитирующих органическую (т.е. природную) форму. Из таких болванок потом можно пересобрать этот силуэт.
Естественно далее проводится скульпт в Zbrush.
На изображении ниже вы видите один из примеров такого скульпта:
Поликаунт тут конечно очень большой. но вы видите конечный результат и поликаунт наращивается постепенно, сначала задаются крупные формы - первичка, затем постепенно уплотняем сетку время от времени используя Dynomesh или ZRemesher, чтобы редактировать топологию для более удобного использования кистей.
Постепенно добавляем и вторичные и третичные формы.
А на финале разбавляем “наш суп” мелкой детализацией:
Разумеется такой ассет в производство не пойдет, потребуется срезать количество полигонов. Для этого используется плагин Decimation Master.
Это более менее понятно, когда количество полигонов срезано с двух миллионов до 30-40 тысяч (бешенная разница), то на выходе имеем такой ассет:
В моих ассетах используется два UV канала:
- Первый уникальный, я получаю его сразу после децимации в ZBrush. И он служит для запечки с высокополигональной модели.
В итоге с этого запекания я возьму под свой материал кникальные текстуры, которые материал предусматривает:
- Второй канал перенесен с первого с некоторыми изменениями.
В частности допускаются оверлапы на UV и значительное увеличение текселя, так как именно через второй UV-канал будет реализован весь визуал скалы при помощи тайловых текстур:
Тексель настолько большой, что шахматку можно разглядеть только при значительном приближении скалы:
Ну а дальше переходим к самому вкусному!
Как же устроен материал под такой ассет?
Вот такой материал на выходе:
Как видите, тут использовано всего три слоя. В этом и состоит идея.
Один слой - это один тип камня (породы), второй слой - это другая порода, а следовательно и иной набор необходимых текстур. Ну и третий слой - это мох.
Хотя три слоя - далеко не догма. Можно в данной логике использовать хоть 10 слоев под разные нужды, единственное ограничение - это количество сэмплов на обработку в пределах одного шейдера, но и тут есть несколько решений данной проблемы. О них сейчас я не стану рассказывать.
Логика выглядит в общих чертах примерно так:
По середине - блоки со слоями и их текстурами. Именно тут реализуется BaseColor, NormalMaps. Слева реализуется Roughness и Ambient Occlusion через спред-маски, а справа весь функционал и взаимосвязи: от тайлинга до механизма смешения слоев через маски и процедурно а также распределение по UV каналам, куда что должно поступать.
В целом логика у шейдера не сложная хотя и комплексная.
А на выходе мы получаем большое количество управляющих параметров и можно делать все что угодно с такой скалой.
Вот еще несколько вариантов, которые я создал на базе данной системы:
А после того как собрал кластер и упаковал его в саблевел - можно и растительности накинуть: