Компьютер грефикс, матеметикс!
Как с помощью математики получать красивые картинки - разбираемся на примере C4D + RS (Часть 1 - Math)
Школа: Где мне вообще эта математика может пригодиться? Было? Было. А теперь, когда нужно сделать простой бленд текстур ты используешь миллионы нод, не понимая, почему все так долго работает или вообще лезешь в другой софт. Спокойно, сейчас мы со всем разберемся.
- Это не ультимативный гайд по всем Math нодам в мире, для этого у каждого софта есть целая страница в хелпе. Мы же с вами поговорим о наиболее полезных из них, а также о том как их использовать в реальном CG бою.
- По моему мнению, невозможно рассказывать про Math ноды в отрыве от работы с цветом (речь не про цветовое колесо, а именно про способы блендинга и т.д.). Поэтому, весь материал будет переплетен с Color нодами в угоду большей эффективности. Плюс, у этой статьи будет продолжение, в котором мы отдельно подробнее рассмотрим работу с Color нодами.
Важно: большинство людей считают, что разбираться с математикой в работе это скучно и сложно. Но поверьте - как только вы поймете основы, это сильно развяжет руки в креативных задачах.
Ну, а чтобы не пропустить еще больше полезных материалов - подписывайтесь на меня в телеграм. Там вас ждут: новости из мира CG, обсуждения и разборы мощных кейсов, мысли на тему рекламы и кино.
Начнем с базы:
Как мне кажется, основа для понимания математики в CG, это понимание того, каким образом пиксель превращается в число (предвкушаю духовку в комментариях). Если объяснять на пальцах:
- ЧБ изображения (любые процедурные шумы или большая часть текстур) - в них черный цвет это 0, а белый цвет это 1. Это принципиально важный момент, его держим в голове
- Цветные изображения - тут логика та же, но каждый пиксель представляется вектором из 3х значений - R, G, B
Так вот Math и Color ноды позволяют нам каким-то образом менять числовые значения (смешивая их между собой, вычитая и прибавляя одно с другим и т.д.), чтобы затем увидеть результат этого преобразования на рендере. И не имеет значения, вы работаете с текстурами, вертекс атрибутами или с полями - этот принцип работает везде одинаково, в этом и есть его преимущество и красота.
Повторюсь, если вы не доктор математических наук - знать все ноды вам не нужно, достаточно некоторых базовых и понимания того, где и для чего они нужны.
Как по мне, большая часть работы с материалами сводится к блендингу. Так вот, смешивание текстур\шейдеров\материалов между собой (он же блендинг) происходит как раз на основе двух вещей:
И если на второе мы, зачастую, повлиять не можем, то первое зависит только от нас. Давайте разбираться с тем, что мы можем этой софтине такого сказать, чтобы она нас поняла.
1. Add
Add или сложение. Нода принимает два параметра и складывает их между собой. Зачем оно нужно? В большинстве случаев готовая текстура (особенно полученная бесплатно) выглядит стоково, так как ее также скачал не ты один. Тоже самое и с процедурными эффектами, особенно шумами. Даже средней руки CG Artist сможет легко заметить где дизайнер поленился и вместо текстуры просто пихнул процедурный шум.
Чтобы с этим бороться, можно использовать наложение нескольких текстур\шейдеров друг на друга, просто складывая их между собой. Так мы можем контролировать количество деталей и управлять ими (большое\среднее\малое, иф ю ноу).
2. Multiply
Также известный как умножение. В основном, используется для создания масок. Помните, мы говорили что черный это 0, а белый это 1? А если умножать на ноль - получим ноль, если умножать на 1 - получим исходное значение. Так, получается можно взять одну текстуру и перемножить ее на вторую, тем самым сделав из нее маску.
Пример 1, самый избитый: вы взяли Curvature и перемножили ее на какой-то шум - получили повреждения на краях объекта.
Пример 2: Возьмем наш прошлый плейн и перемножим его на маску шума, там самым получив участки с различным рельефом. Кстати, +- по такому принципу создается всеми любимый процедурный материал "мокрый асфальт".
3. Clamping\ranging
Итак, мы с вами выяснили как важны для нас 0 и 1. Но, должен признаться, все предыдущие пункты я вам не договаривал про последний в этой статье, но не последний по важности, пункт.
Это и есть Clamping - то есть изменение входных значений нуля и единицы. Давайте на простом примере - шуме, поданном в обычную градиентную рампу:
Clamping и Ranging, позволяют вам изменять входные параметры черного и белого в изображении, для дальнейшей работы. Так, я на прошлых этапах поджимал воздействия шумов друг на друга (изменяя количество белого и черного в шумах), чтобы изменить количество деталей шумов или управлять маской.
Зачем еще:
- Всегда можно использовать одну текстуру для нескольких задач. Например, заремапить Roughness и подать его в Displacement\Bump, чтобы более шороховатые участки также имели неровности.
- Вы скачали текстуру (очень часто сталкиваюсь с таким у Displacement map), а она недостаточно контрастная, так что деталей не видно. Не проблема - берем и поджимаем значения 0 и 1 с помощью рампы, как на скрине выше, тем самым делая текстуру контрастнее.
Делаеть все это можно целой кучей способов, вот только некоторые из них:
- Ramp - что Scalar Ramp, что ЧБ из примера выше. Работают +- одинаково, кому как удобнее.
- Change Range - позволяет напрямую указывать пороговые значения на входе и указывать какие значения подавать на выход (Minimax).
- Напрямую в настройках некоторых нод - например, у шума это параметры цветов + low\high clip
Вектора:
В самом начале я вам написал что еще существуют вектора. Так вот, для них все работает абсолютно идентично, только к нодам добавляется приписка Vector, то есть нода Add становится Vector Add.
Для чего? Потому что, как я и говорил, цвет, к примеру, это вектор из 3х параметров (R,G,B) и если подать его в ноду Add, то ваш цвет превратится в ЧБ (так как программа автоматически перегонит ваши параметры из Vector в Float параметр). Чтобы этого не произошло - используйте Vector Add (или векторный аналог нужной вам операции). Да и вообще, если что-то не работает - пробуйте изменить тип операции или параметров с которыми работаете. Сейчас все типы параметров разбиты по цветам, однако понимание того, что к чему, все равно приходит с опытом.
Реальный пример:
"Егор, все эти твои шумы это все хорошо, но как мне использовать все эти нули и единицы в реальной работе?"
Я не люблю материал оторванный от реальной жизни, так что вот вам пример с одного из наших проектов: взяли модельку дрона для проекта, а у нее из текстур только Albedo.
А теперь давайте с ним слегка поработаем:
- Берем его карту Albedo и прогоняем через рампу, получаем отдельные зоны снаружи и внутри. Можно повторить несколько раз, для разных эффектов.
- Теперь увеличиваем детализацию, используя наши карты для зонирования: где-то добавим металлик, покрасим в разные цвета, добавим потертостей.
На выходе получается вот такой, все еще уродливый, но уже более интересный Уитли:
И всего этого мы с вами добились Math нодами, процедурными шейдерами и всего лишь 1 картой Albedo, не покидая при этом Cinema 4D.
Резюмируя:
Мы все с вами художники и порой лень\страх не дают нам разбираться в технических аспектах. Но, как и было сказано в начале, тут нет ничего сложного, однако это очень сильно развязывает руки для творческих экспериментов. Самое сложное - это не научиться пользоваться этими приемами, а научиться видеть, где их нужно применять.
Конечно, данный подход не может полноценно заменить вам работу с хорошими текстурами и точно не убивает Substance\Photoshop\etc. Однако, понимание того, как оно работает под капотом позволяет не изобретать велосипед, а сосредоточиться на креативных задачах.
Это была первая часть материала, о том как использовать математику для получения классных рендеров. Получилось достаточно объемно, поэтому я решил разбить его на 2 части и в следующий раз мы поговорим о работе с цветом.
И конечно, чтобы не пропустить еще больше полезных материалов - подписывайтесь на меня в телеграм. Там вас ждут: новости из мира CG, обсуждения и разборы мощных кейсов, мысли на тему рекламы и кино. Всем классных рендеров и ловите тефтелю! ☄️