Изучая рабочий процесс создания Real-time VFX

перевод статьи 80.lv

Художник по Real-time VFX Sjors de Laat поделился своими способами создания VFX: используя эффекты с геометрией, текстурами, созданием шейдеров, системой частиц и многое другое!

Введение

Всем привет! Меня зовут Sjors de Laat, Мне 26 лет, вырос в маленьком городке в Нидерландах, под названием Маде. Сейчас я живу в Глазго и работаю художником по Real-time VFX в студии Axis Animation.

Я открыл для себя 3Д когда мне было 14 лет. Мне очень нравилось играться с комбинированием разного арта, и я пробовал Cinema4D и 3ds Max для создания абстрактных рисунков. Где-то через год, я открыл для себя Depthcore, и это меня вдохновило занятся мэтт пейнтингом. В колледже мой интерес перерос к играм и кино. Я уже знал, что хочу творить что-то в этой области, но еще не был уверен, что именно это будет. Понадобилось много времени, чтобы разобраться, во всем этом. Во время моего последнего учебного года мне нужно было определится над чем мне сосредоточится, но мои цели еще были довольно расплывчатые. Один из моих преподавателей порекомендовал мне поставить четкую цель для специализации. Вспоминая свои предыдущие проекты, я задумался, что же мне доставляло больше всего удовольствия при их создании? В конце концов, VFX оказалось именно тем, что мне нравилось делать больше всего. Создавая эффекты, я могу делать много разнообразных вещей. И я решил полностью себя посвятить VFX!

С чего начать?

С чего же начать создание эффектов? Первое, что приходит в голову, — поиск референсов и вдохновения. Во время поиска может возникнуть несколько вопросов: насколько сложным будет этот эффект? Какова цель этого эффекта? В каком стиле это должно быть? Какая целевая аудитория? Какое движение я хочу? Во время поиска референсов обратите внимания не только на FX работы, но и на природные явления: например, как движется шелковая ткань на ветру, как бьется волна о скалу, ведь природа всегда самый лучший источник вдохновения.

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

 

Зачастую я создаю концепты по типу этого:

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

Процесс

Если вы планируете изучать процесс создания эффектов, то начните с ознакомления всех инструментов, с которыми мы можете работать в первую очередь. Очень важно понимать базовые принципы создания FX и постепенно применять их к своим проектам. Начните с малого, отмечая себе то, что вы хотите изучить более подробно в будущем. В целом, процесс изучения VFX можно разбить на следующие аспекты:

Создание геометрии: меши очень часто используются при создании эффектов как носитель и используются для движения, которые не легко достичь с помощью плоской геометрии. Изучите, что вы можете делать с UV ваших мешей. Узнайте, насколько ресурс может быть тяжелым: какое количество полигонов считается большим, а что допустимым, чтобы не перегружать эффект.

Динамика: FX — это всегда движение естественных явлений (и, конечно же, неестественных). Узнайте, что вызывает эти явления, посмотрите, как они ведут себя и как взаимодействуют друг с другом. Не забывая о принципах анимации. Так как не всегда то, что выглядит правильно, может хорошо вписываться в ваш эффект. С точки зрения программного обеспечения для рекомендаций: Houdini  — самый мощный инструмент на сегодняшний день, правда и самый сложный в освоении. Так что определитесь, что вы будете использовать в первую очередь. Как сказано ранее: начните с малого!

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

Шейдеры: этот аспект может оказать очень обширным в изучении, посмотрите, что делает каждая нода и как ее можно применять. Это позволит вам понять, насколько гибкими могут быть ваши шейдеры. Могут ли все эффекты основанные на энергии управляться одним шейдером? В любом случае шейдеры лучше создавать максимально функционально, чтобы использовать их повторно.

Дизайн: Дизайн стоящий за вашим эффектом, является самым важным фактором, который может как сломать его так и сделать. В игровом контексте важно, чтобы эффект доносил игроку свою цель. Это также является краеугольным камнем, который придает вашему эффекту визуальную привлекательность. Графический дизайн — отличный источник вдохновения, и большинство его принципов могут быть непосредственно применены к FX.   

Анимация: FX  — это оживление энергии. 12 принципов анимации в значительной степени относятся также и к эффектам. Эти принципы помогут вам создать более правдоподобные и реалистичные эффекты. Будете ли вы работать над стилизованным FX или реалистичным — правила будут работать.

Реализация: Обязательно ознакомьтесь с процессом внедрения, чтобы понимать как это работает. “Blueprint” система от Unreal может стать хорошей отправной точкой. Понимание того, как работает процесс внедрения, позволяет понять, какие аспекты необходимо учитывать.

Cascade

Cascade (система частиц Unreal Engine) это модульная система эмиттеров для создания вашей системы частиц. Да, новая Niagara уже не за горами. Но этот редактор возможно может оказаться слишком сложной для изучения на старте. Очень важно изучить все возможности системы частиц, в которой планируете создавать эффекты.

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

В этом окне вы можете редактировать свои кривые. Нажатие кнопки рядом с модулем позволяет визуализировать кривую этого модуля в окне. Нажатие желтого квадрата в этом окне позволит вам скрыть эту кривую в окне. Кривая x, y и z (красная, зеленая и синяя квадраты) могут переключаться отдельно, если они появляются рядом с желтым квадратом. Нажатие CTRL на кривой позволяет добавить точку к кривой.

Процесс создания

Как уже упоминалось ранее, рекомендую оценить, какие типы элементов вам нужны для вашего эффекта, и сделать их первыми. Во время процесса создания геометрии я в основном использую Maya и ZBrush для всех работ по скульптингу. Сетка в большинстве своих случаев довольно простая. Для всех мешей, где я планирую скролить текстуры, я создаю развертку по всей области UV от 0 до 1. Но если текстура должна быть зацикленной или с разрывами, я предпочитаю немного уменьшать, чтобы не было заметно цикла.

Если вы хотите создать градиент для своего меша, вы можете использовать не только шейдер для этих целей, но и использовать цвета на вертексах и также можно умножить этот цвет на вашу текстуру, чтобы получить эффект  обесцвечивания. Через цветные вертексы, также можно контролировать поведение той или иной области вашего меша. Например для мыльного пузыря, и контроля деформации разрушения при взрыве бочки. В некоторых случаях, вы можете создавать частицы на определенных участках геометрии. В этом случае, можно использовать “skeletal mesh” и тогда веса скина будут использоваться в качестве маски, где частицы будут появлятся с этой конкретной зоны.

Пример: Использование градиентной маски с микширование других текстур

Для создания текстур я люблю использовать Photoshop, Substance Designer, и Substance Painter. Photoshop я использую для создания рисованных вручную элементов, и Substance Designer в качестве создания большинства чередующихся шумов с простыми элементами, которые я хотел бы использовать внутри сцены. Для создания ассетов я использую комбинирование как Designer, так и Painter. Я также всегда раскидываю элементы по цветовым каналам для уменьшения количества файлов. Например, для различных типов трейлов или элементов, который требует нескольких текстур, связанных вместе. Затем я перепроверяю все текстуры на совместимость в движке

Пример пакета текстур

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

Дальше я создаю систему частиц из созданных ранее элементов. Рекомендую создавать послойно. Сначала настроить поведение одного эмиттера. Затем поверх другой, так, чтобы он хорошо совмещался с предыдущм. Когда все эмиттеры настроены, я смотрю на все целиком и иногда, что-то незначительно корректирую. Также регулярно проверяйте, не слишком ли перегружен шейдер или система частиц. Полную оптимизацию я всегда оставляю напоследок, когда уже уверен что все элементы хорошо взаимодействуют между собой.

Анимировать текстуры можно несколькими способами. Подходы будут варьироваться в зависимости от конкретных случаев. Но во всех этих методах лежат в основе шейдеры. Также вы можете получить доступ к параметрам системы частиц и анимировать их. “Dynamic parameters”, позволяют вам анимировать до 4 различных параметров напрямую в систему Cascade. Каждый параметр, который вы создаете в вашей системе частиц, можно анимировать (например, в blueprints, sequencer и C++).

(Пример: тест альфа-эрозии. Один из способов анимировать ваши текстуры)

Для прокручивающихся текстур я зачастую объединяю их месте в шейдере с помощью сложения, вычитания и корректировки, чтобы получить интересные фигуры. Также я часто проверяю, действительно ли эрозия работает правильно, достаточно ли текстура контрастна и соответственно эрозия происходит плавно. Если все же вам нужно больше контроля над управлением элементов, опять же с помощью Dynamic Parameter это можно сделать в полной мере.

Пример. GradientPower параметр передает определенные значения, которые потом обрабатываются в Cascade.

Оптимизация

И так, вы создали что-то интересное, и следующий логичный вопрос — потянет ли движок? Первое, что нужно сделать, это проверить, нет ли нигде лишних частиц, пустых мест на ваших “плашках”, если есть, то нужно все обрезать по максимуму. Следующий шаг, это перепроверить, если частица при уходе в прозрачность, уже не видна, а значение “opacity” еще не в 0, то есть смысл уменьшать размер частици до нуля.  

(Слева — неотредактированный, справа — отредактированный. Результат примерно одинаковый, но менее перегруженный).

Если возможно, посмотрите, что вы можете создать процедурно. У UE4 есть множество вариантов для создания широкого спектра шумов, форм и градиентов.

Слева: не идеально с точки зрения пространства текстур. Справа: более совершенный с точки зрения пространства текстуры

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

Два похожих варианта,, но уровень выбросов частиц слева намного меньше.

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

Вывод

Большое спасибо за чтение! Мне кажется, что я все еще нахожусь в начальной фазе изучения всего, что касается VFX, но я надеюсь, что вы смогли что-то извлечь из этого.

Sjors de Laat, Художник по Real-time VFX в Axis Animation

Интервью провел Kirill Tokarev