Пайплайн створення VFX для ігор. Як зробити ефект піщаної бурі з Dune для гри та синематику

Ментор школи varto.school — Денис Федоренко, розповідає про те, як створити ефект піщаної бурі для гри. 

Дивлячись Artstation, я натрапив на роботу з гри Dune: Spice Wars, це була якраз піщана буря. I менi захотілося зробити свою версію цього ефекту. Сам ефект не дуже складний, головне – це створити необхідну текстуру. Нижче розповім основнi етапи створення цього ефекту. Let`s go!

*В статті розповідаємо про створення лише одного ефекту, а на курсі Дениса ти зможеш створити більше 10 візуальних ефектів різного плану. Деталі на сайті.

VFX: що то таке?

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

Що таке VFX? Це візуальні ефекти, та сама магія, яка є у фільмах, іграх, сінематиках та рекламі. Те, що неможливо зняти на камеру в реальності.

У геймдеві VFX використовують не тільки для того, щоб додати грі більш яскравих елементів. Візуальні ефекти додають ритм гри, зрозумілу інтерактивність, а особливо збільшують емоціональну задоволеність у гравців.

Тепер ми вже трохи розуміємо, про що буде йти мова далі.

Пайплайн для ігрового VFX

При створені ефектів я використовую такий пайплайн:

  • створення текстур, матеріалів;
  • блокінг ефекту;
  • тестування;
  • ускладнення ефекту, додавання логіки, деталей;
  • тестування;
  • оптимізація.

Софт, який я буду використовувати для цього тутору: Unreal Engine 4, Substance Designer та Photoshop.

Текстури

Створювати текстуру ми будемо у Substance Designer.

Для початку нам потрібно створити 2 маски через «Liner Gradient» та поєднати це в одну маску (схожа з маскою UV координат в Unreal Engine) за допомогою ноди «RGB Merge». Тепер усе це пiд’єднуємо у ноду «3D Worley Noise». Ми отримали такий «Cell Noise». Дублюємо 3 рази i робимо різні варіації скейлу.

Далі ми комбінуємо нашi ноди через ноду «Blend» у режимi «Switch», регулюючи opacity, щоб нойзи м’яко накладалися один на одного, створюючи текстуру хмар.

Тепер нам необхiдно додати деталей через ноду нойзу «Clouds 2» та скомбінувати з нашим головним нойзом, так само через «Blend» у режимі «Switch» регулюючи opacity.

Додаємо ноду «Auto Levels» та розблюруємо нодою «HQ Blur Grayscale». Наразi наша текстура не є тайловою, тому нам потрiбно затайлити її, а зробимо це у Photoshop.

Експортуємо у Photoshop та за допомогою «Spot Healing Brush Tool» прибираємо шви, потім експортуємо її. Тепер ми отримали нойзову текстуру схожу на хмари.

Далі нам знадобиться ще два будь-яких нойза. Я взяв зі своєї бібліотеки текстур, i текстуру блискавки, яку я намалював вiд руки у Photoshop. Тепер ми можемо перейти до Unreal Engine i почати створювати матеріал для піщаної бурі.

Матерiал

Створимо новий матеріал в «Blend Mode», для цього потрібно поставити «Translucent» у «Shading Model», повинно бути «Default Lit».

Переносимо нашi текстури хмар, якi створили у Substance Designer, до матеріалу. Продублюємо один раз та добавимо два панери, пiдключимо до текстур та поставимо невелику швидкiсть.

У першому панерi по координатах X ставимо 0,04, по Y – 0,03.

У другому по X – 0,03, по Y – 0,02.

Далі закинемо один з нойзiв. Додамо йому панер та робимо звичайну конструкцію технiки «Distortion», потім єднаємо з панерами текстур.

Тепер необхідно зробити маску для текстур. Для цього беремо ноду «Sphere Mask»:

  • До A каналу підключаємо «Tex Coordinate».
  • До B – Scalar зi значенням 0,5; у «Radius» ставимо Scalar – 0,5; в «Hardness» ставимо – 0,01 i перемножуємо маску саму на себе.

Далi iнвертуємо маску через ноду «One Minus».

Додаємо ноду «Subtract»:

  • До A каналу пiдключаємо перемноженi текстури хмар між собою та помножені на 2.
  • До B каналу – ноду «One Minus».
  • Далi додаємо ноду «Divide»:
  • До A каналу підключаємо «Subtract».

У B каналі пишемо 0,2 i множимо з результатами маски перемноженої самої на себе.

Додаємо ноду «Deph Fade» та єднаємо усю конструкцію з «Particle Color», підключаємо у «Emissive» та «Opacity» матерiалу.

Матеріал для бурi готовий. Тепер необхідно створити матерiал блискавок, робимо майже таку конструкцію, як у першому матерiалi, усе окрім маски.

Матерiали для ефекту готовi, тепер перейдемо до Niagara та створимо ефект бурi.

Niagara

Створимо ефект у Niagara. Система проста, має чотири емітери зi своїми налаштуваннями. У першому емітері:

  • В «Render» у «Spire Render» – обираємо матерiал бурi.
  • В «Emitter Update» у «Loop Behaviour» ставимо «Infinite».
  • В «Particle Spawn» у «Spawn Rate» ставимо 10.
  • В «Initialize Particle» у «Lifetime Mode» обираємо «Random», i ставимо мінімальне значення 3,6 а максимальне – 8.
  • В «Sprite Size Mode» обираємо «Random Uniform», пишемо мiнiмальне значення 260, а максимальне – 350.
  • В «Sprite Rotation Mode» ставимо на «Random».
  • В «Velocity» обираємо «Random Range Vector», у мiнiмальних значеннях по X – 20, по Y – 30, по Z – 10, в максимальних значеннях по X – 60, по Y – 30, по Z – 20.

У модулi «Color» обираємо колiр пicку – жовто-червоний.

В «Sphere Location» ставимо «Sphere Radius» на 800.

В «Particle Update» – «Scale Sprite Size» робимо криву. У точцi часу 0 значення 2,3; у точцi часу 1 – 10.

В «Scale Color» теж робимо криву. У точцi часу 0 значення 0; точцi 0,08 –1; точці 0,89 – 1; точці 1 – 0.

У модулi «Wind Force», якщо ми хочемо, щоб буря рухалась, можемо поставити «Random Range Vector» та вказати напрямок через мiнiмальнi та максимальнi значення. Додамо ще «Curl Noise Forces» у «Noise Power», виставимо 80.

Далi продублюємо емiтер:

  • В «Emitter Update» замicть «Spawn Rate» поставимо «Spawn Burst». Ставимо на «Random Range Int» та пишемо у мiнiмальних значеннях 10, у максимальних – 20.
  • В «Particle Update» у «Scale Sprite Size» у першій точцi змiнюємо значення на 4,2. Це ми зробили для того, щоб коли ефект з’являється у сценi, одразу з’являлася i заспавнена буря.

Тепер дублюємо другий емiтер:

  • В «Sprite Renderer» обираємо матерiал блискавки.
  • В «Sub UV» ставимо 2х2.
  • Далi у «Render» додаємо «Light Renderer», прибираємо галочку з «Use Invert Squared Fallof» та ставимо її на «Affects Translucent» і «Alpha Scale Brightness», у «Radius Scale» пишемо 0,6, у «Default Exponent» – 2.

Далi:

  • В «Particle Update» додаємо модуль «Dynamic Parametrs». Робимо криву, у точцi часу 0 значення 0, у точцi часу 1 – 0,6.
  • В «Particle Spawn» ставимо модуль «SubImageIndex», обираємо «Random Range Float», мiнiмальне значення 0, максимальне – 3.
  • В «Sphere Location», «Sphere Radius» ставимо на 400.
  • В «Lifetime Mode» обираємо «Random» i ставимо мiнiмальне значення 0,2, а максимальне – 0,6.
  • В «Emitter Update», «Spawn Burst» ставимо на «Random Range Int», та пишемо мiнiмальне значення 6, максимальне – 10.
  • В «Emitter Update» ставимо галочку на «Loop Delay», обираємо «Random Range Float», мiнiмальне значення – 0,8, максимальне – 2. Ставимо галочку на «Recalculate Duration».

Далi дублюємо емiтер з блискавками та поставимо менші розміри блискавки, щоб додати деталей та рiзноманiтностi. Наш ефект готовий, можна ще закинути у Blueprint, додати декiлька джерел свiтла, i буде повноцінний VFX Asset.

Тепер можна використовувати цей ефект як у сiнематиках, так i у іграх.

2153