У цій статті ми створимо простий візуальний ефект, який генерує одну частинку та рухає її вгору з фіксованою швидкістю. Ми проведемо вас через встановлення Visual Effect Graph, створення ресурсу візуального ефекту та пояснимо основну функціональність його блоків: Spawn, Initialize, Update і Output. Працюючи з однією частинкою, ми покажемо, як до Visual Effect Graph можна підходити так само, як до скриптів MonoBehaviour, що полегшує концептуалізацію та створення складніших ефектів.
Вступ: Visual Effect Graph
Блок Spawn
Блок Spawn — це місце, де починається кожен візуальний ефект. Він визначає, коли створюються частинки, та задає ритм їхнього появлення на сцені.
Незалежно від того, чи ви запускаєте безперервний потік частинок, чи вивільняєте одиничний сплеск, блок Spawn дає вам контроль над таймінгом і частотою ваших ефектів частинок.
Зазвичай використовувані вузли Spawn:
Постійна швидкість спауну: Генерує певну кількість частинок за секунду.
Періодичний сплеск: Генерує сплеск частинок повторно з заданою затримкою між ними.
Одиничний сплеск: Генерує один сплеск частинок після заданої затримки.
Блок Initialize
Блок Initialize — це місце, де налаштовуються дані для кожної частинки.
Це включає в себе визначення властивостей, таких як місце початку частинки в сцені, її швидкість руху, розмір та колір. Ці початкові налаштування визначають, як частинка виглядатиме та поводитиметься, коли вона з'явиться. Налаштовуючи ці властивості перед початком циклу оновлення, ви встановлюєте точку відліку для всієї поведінки частинок, забезпечуючи правильну роботу візуального ефекту.
Розуміння налаштувань Initialize
Capacity
Місткість визначає максимальну кількість частинок, яку система може згенерувати. У Visual Effect Graph це значення є фіксованим, оскільки система повинна виділити пам'ять для всіх створених частинок. За замовчуванням місткість більшості ефектів становить 64 частинки. Найкраще залишати це значення незмінним під час налаштування швидкості спауну та візуальних ефектів, а потім коригувати його пізніше для оптимізації продуктивності.
Якщо вам потрібно зменшити місткість, розгляньте способи зробити ефект більш ефективним, зберігаючи візуальну якість при використанні меншої кількості частинок.
Bounds
Межі визначають умови, за яких візуальний ефект відображається, залежно від його видимості та положення відносно камери. Налаштовуючи відповідні межі, ви можете забезпечити відображення частинок лише тоді, коли це необхідно, що покращує продуктивність. Visual Effect Graph надає кілька режимів меж для різних сценаріїв, що дозволяє оптимізувати рендеринг залежно від конкретних потреб вашого ефекту.
Update Block
Update Block контролює, як частинки змінюються з часом після їх створення. Тут ви визначаєте такі поведінкові характеристики, як рух, згасання або збільшення, що відбуваються під час існування частинки в сцені. Наприклад, ви можете змусити частинки дрейфувати в певному напрямку, поступово зменшуватися або змінювати колір.
Ці оновлення застосовуються безперервно протягом життєвого циклу частинки, що дозволяє створювати динамічні та еволюціонуючі ефекти. Використання цього блоку є обов'язковим для створення більш динамічних і чутливих ефектів.
Output Block
Output Block визначає, як частинки рендеряться та з'являються на екрані. Цей блок контролює їх візуальне відображення, таке як форма, матеріал і режим змішування. Крім того, Output Block дозволяє тимчасово коригувати властивості частинок спеціально для рендерингу, наприклад, збільшувати розмір, масштаб чи обертання. Ці зміни застосовуються тільки під час фази рендерингу і не впливають на дані частинки з часом.
Це робить Output Block важливим для точної налаштування вигляду частинок у фінальному ефекті, не змінюючи їх поведінку чи атрибути в інших частинах графа.
Для тих, хто знайомий з Unity скриптами
Якщо ви знайомі з Unity скриптами, Visual Effect Graph має деякі паралелі з методами MonoBehaviour, які можуть допомогти вам зрозуміти його функціональність:
- Initialize Block схожий на метод
Start()
. Він визначає початковий стан кожної частинки при її створенні, такий як її позиція, швидкість і вигляд. - Update Block виконується кожного кадру на GPU, що робить його схожим на метод
Update()
. Однак, на відміну відUpdate()
, він працює повністю на GPU, що дозволяє ефективно обробляти тисячі частинок одночасно.
Це означає, що він не може взаємодіяти з логікою на стороні CPU, але є відмінним для оновлення поведінки частинок у реальному часі.
Покрокова інструкція: Переміщення частинки
Крок 1: Встановлення Visual Effect Graph
Виберіть Window > Package Manager, знайдіть Visual Effect Graph в табі Unity Registry.
Виберіть Install, якщо цей пакет наразі не додано до вашого проєкту.
Крок 2: Створення активу Visual Effect
Клацніть правою кнопкою миші у вікні проєкту та виберіть Create > Visual Effects > Visual Effect Graph
Виберіть Minimal System та натисніть кнопку Create
Перетягніть актив JumpingParticle VisualEffect у ієрархію
Крок 3: Налаштування появи однієї частинки
Двічі клацніть на актив Visual Effect, щоб відкрити Graph View
Клацніть правою кнопкою миші на блок Spawn та виберіть Create Block
Або можна натискати на блок Spawn та натискати Space Key
Розгорніть список Spawn і виберіть Single Burst.
Це дозволить нам створити спалах частинок.
Це створить блок Single Burst з кількістю, встановленою в 0, та затримкою, встановленою в 0. Переконайтеся, що ви встановили кількість на 1, щоб він створив одну частинку, яку ми будемо модифікувати.
Крок 4: Налаштування руху
Ми будемо використовувати вузол add position в блоці Update, щоб змінювати позицію.
Пам'ятайте, що Update Block виконується кілька разів за секунду. Зараз ми хочемо додати дуже маленьку позицію, щоб частинка не рухалась занадто швидко і була видна.
Ось як має виглядати ваша поточна система
Крок 5: Використання Delta Time
Нам потрібно налаштувати вузол Delta Time (VFX).
Це забезпечує час між кадрами GPU, щоб, якщо ваш комп’ютер працює швидше або повільніше, час був відкоригований і виконання відбувалося в реальному часі. Використання Delta Time за замовчуванням дозволяє переміщення на 1 одиницю за секунду. Ми можемо використовувати вузол множення, щоб змінити це.
Крок 6: Налаштування властивості швидкості
Тепер ми можемо додати публічну властивість до вашого графа візуальних ефектів. Додайте атрибут, а потім підключіть його до входу B блоку множення.
Перевірка в дії: У вікні інспектора ви побачите властивість Speed, яка змінюватиме швидкість, з якою створена частинка рухатиметься вгору.
Ви можете побачити, що кожного разу, коли ми змінюємо швидкість, частинка буде повторно ініціалізована і рухатиметься вгору з новою швидкістю.
Як це застосовується?
Розуміння того, як змінювати та оновлювати окремі частинки, є основою для створення більш складних візуальних ефектів. Зводячи систему до однієї частинки, цей посібник демонструє, що частинки та GameObjects мають багато спільного. Підхід до Visual Effect Graph з мисленням сценаріїв GameObjects може спростити процес. Запитайте себе: “Як би ви написали сценарій для GameObject, щоб він рухався або поводився так, як ви хочете, щоб виглядав ваш ефект?”
Такий підхід часто показує, що багато ефектів складаються з простих компонентів: основне світіння та кілька маленьких рухомих об'єктів. Розпізнаючи ці елементи, ви зможете розкласти складні ефекти на більш прості частини і зосередитись на їх русі та поведінці в рамках Visual Effect Graph.
Цей підхід не лише спрощує створення складних ефектів, але й відкриває нові творчі можливості, використовуючи ваші наявні знання з композиції в Unity.
Підсумок
Цей посібник надає простий підхід для руху частинки вгору за допомогою відкритої властивості Speed. Ми розглянули основи блоків Spawn, Initialize, Update та Output, а також їхню роль у процесі створення візуального ефекту. Розуміння того, як налаштовувати та змінювати окремі частинки, є важливим для створення більш складних і багатошарових ефектів. Поєднуючи кілька частинок з унікальними поведінками, ви можете створювати динамічні та візуально привабливі ефекти, які оптимізовані для великомасштабної розробки.
Удачі в побудові!
Перекладено з: Making a Single Particle Move: VFX Graph Part 1