Як створити плазмовий слід для космічного корабля


13

Я бачив багато чудових космічних ігор, в яких усі використовуються подібні ефекти. Мені дуже цікаво дізнатися, як деякі з цих ефектів робляться взагалі.

Зокрема, я хочу знати, як виконуються деякі сліди за космічними кораблями або ракетами без використання всіх доступних ресурсів.

Для прикладів ефекту я маю на увазі перегляд скріншотів для Gimbal і навіть відео за тим самим посиланням. Також ракетні стежки в ефірі Vapor .

Це обидва однакові методи? Мене в основному цікавить 2D, але я не можу уявити, що це було б занадто інакше.

То як би я пішов про створення такого ефекту? Ми говоримо про піксельні шейдери, суміші / фільтри, ефекти растрових зображень, системи частинок чи що? Не дуже конкретна платформа. Я просто шукаю теорію, але конкретні приклади чи посилання були б чудовими. І чим детальніше, тим краще.

Відповіді:


7

То як би я пішов про створення такого ефекту? Ми говоримо про піксельні шейдери, суміші / фільтри, ефекти растрових зображень, системи частинок чи що? Не дуже конкретна платформа. Я просто шукаю теорію, але конкретні приклади чи посилання були б чудовими. І чим детальніше, тим краще.

Все вищеперераховане.

Якщо ви не заглянете через їх вихідний код, ви можете точно не знати, як вони це зробили.

Однак, погляди двох ігор, обидві вони мають те, що, здається, є геометрією, яка пов'язана і стежить за судном. Не обов'язково може бути базовою системою частинок-спрайтів, але і це не все так складно.

Деякі ігри використовуватимуть алгоритм вигнутої лінії та генеруватимуть список вершин від цього та робитимуть трохи текстури з різними текстурами, застосованими у двох кінцевих точках сліду, так що в один момент вихлоп виглядає гарячим, а в іншому - прохолоднішим і стежки в космос.

Корабель гравця є цікавим випадком, оскільки рухи непередбачувані, і вам може знадобитися оновити контрольні точки алгоритму кривої, або в кінцевому підсумку відібрати останнє положення судна та генерувати вершинні позиції, виходячи з цього.

Подивіться на цю відповідь з попереднього запитання, якщо ви хочете мати щось, що працює поза контрольними точками. Для ваших потреб, однак вибірка позиції гравців, ймовірно, буде працювати набагато краще і легше буде зрозуміти.

Ось що вас змусить задуматися:

Почніть вибірку позиції гравця. Ці точки формуватимуть сегменти тіла вашої стежки, з якої можна побудувати геометрію. Хороша ідея зберігати окремий сегмент хвоста, який має окрему текстуру. Ви можете виявити, коли гравець повертається і збільшує частоту цих сегментів, інакше у вас виявляться криві криві. Якщо тільки це не ефект, на який ви йдете :)

У певних подіях сегменти потрібно припинити генерувати, а існуючі повинні почати повільно масштабуватись, починаючи від сегмента тіла, найближчого до хвоста (але не самого хвоста). Це у випадку уповільнення гравця. Але, якщо швидкість, з якою зменшуються сегменти, відповідає швидкості судна гравця, то новий сегмент буде сформований як раз в той час, як один виведений. Тож це також добре працює для судна, який знаходиться в повному русі. Довжина сліду завжди буде однаковою - це дає текучий, послідовний потік.

Сегмент головки повинен бути завжди в поточній позиції гравця. Якщо виявлені будь-які повороти, існуючий сегмент голови додається до сегмента тіла, і починається новий головний сегмент. Повторіть. Залежно від текстур, кожен сегмент також може мати максимальну довжину.

Це дає нам простий спосіб моделювати цей ефект: відпрацьовуючи ідею про те, що ефект завжди буде зменшуватися / зменшуватися сам по собі, якщо не буде надано більше сегментів, і грати зі швидкістю, щоб не зменшити його.


4

Існує маса різноманітних можливостей для створення таких стежок. Можна використовувати прості лінії, багатокутники, точкові хмари тощо.

Вони, як правило, базуються на одній із двох концепцій:

  • Відслідковуйте попередні позиції та використовуйте їх для малювання хвоста.
  • Відстежуйте швидкість / напрямок і регулюйте хвіст на основі цього.

Перший краще підходить для таких речей, як ракети, в той час як другий підхід краще для якихось прикріплених речей, що слідують за чимось (наприклад, хвостом дракона).

Проста реалізація хвостів двигуна не така вже й складна. Вам буде потрібно лише якийсь буфер, щоб зберігати попередні позиції. Я не знаю, якою мовою ви користуєтесь, але для цього я б або використовував буфер дзвінка або якийсь подібний буфер (швидке видалення та вставки на кінцях).

Кожен галочок x-го кадру / оновлення (не потрібно робити це сто разів на секунду), ви по суті опускаєте найстаріший / останній елемент у своєму буфері і додаєте поточне положення до його передньої частини (лише якщо буфер заповнений; переконайтеся, що він завжди містить n елементів, де n визначає довжину хвоста).

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.