💭 Немного размышлений на тему визуальных эффектов.
Сегодня я бы хотел поделиться своимпотоком сознания мыслями на тему визуальных эффектов и заодно показать, как происходит смена концепции и причины рефакторингов.
На данный момент есть 2 класса отвечающие за визуальные эффекты в движке:
🔹 VisualEffect - это ресурс, в котором находятся все параметры и команды, отвечающие за поведение ваших частиц на сцене.
🔹 EffectRender - это компонент, который отвечает за проигрывание эффекта, его можно разместить непосредственно на сцене и назначить ему VisualEffect.
Итак мы разобрались с вводными.
А вот теперь, вам, предположим, нужно создать эффект костра. В котором должны быть:
1. Пламя
2. Дым
3. Искры (опционально)
4. Можно еще дисторшен от температуры добавить (опционально)
Совершенно очевидно, что это все разные эффекты, объединённые в одну систему.
Возникает закономерный архитектурный вопрос. Если у нас 4 разных эффекта, может объединить их в одну систему?
Вариант 1: Единая система
Можно переименовать:
VisualEffect → EffectEmitter (отвечает за отдельные эффекты)
Создать новый VisualEffect как контейнер для нескольких синхронизированных эмиттеров
Плюсы:
✔️ Есть центральный ресурс объединяющий разные эмиттеры и даже возможно их синхронизирующий.
Минусы:
⚠️ Предстоит рефакторинг с переименованием, что может привести к поломке существующих ассетов.
⚠️ Если мы захотим новую комбинацию эффектов, нам придется создать новый отдельный VisualEffect. Если помним, то EffectEmitter все еще хранится отдельно.
⚠️ Если в VisualEffect будет содержать всего один EffectEmitter, это все еще 2 ресурса к загрузке.
Вариант 2: Оставить как есть
Просто размещать несколько компонентов EffectRender и объединять их в префаб
Плюсы:
✔️ Не надо ничего менять, все работает как сейчас.
Минусы:
⚠️ Нам придется объединить наш пресловутый костер в префаб.
⚠️ Возможно нужно будет как-то синхронизировать состояния эмиттеров с помощью дополнительных компонент.
Какой вариант вам кажется более удобным?
#thunderengine #GameDev #VFX
Сегодня я бы хотел поделиться своим
На данный момент есть 2 класса отвечающие за визуальные эффекты в движке:
🔹 VisualEffect - это ресурс, в котором находятся все параметры и команды, отвечающие за поведение ваших частиц на сцене.
🔹 EffectRender - это компонент, который отвечает за проигрывание эффекта, его можно разместить непосредственно на сцене и назначить ему VisualEffect.
Итак мы разобрались с вводными.
А вот теперь, вам, предположим, нужно создать эффект костра. В котором должны быть:
1. Пламя
2. Дым
3. Искры (опционально)
4. Можно еще дисторшен от температуры добавить (опционально)
Совершенно очевидно, что это все разные эффекты, объединённые в одну систему.
Возникает закономерный архитектурный вопрос. Если у нас 4 разных эффекта, может объединить их в одну систему?
Вариант 1: Единая система
Можно переименовать:
VisualEffect → EffectEmitter (отвечает за отдельные эффекты)
Создать новый VisualEffect как контейнер для нескольких синхронизированных эмиттеров
Плюсы:
✔️ Есть центральный ресурс объединяющий разные эмиттеры и даже возможно их синхронизирующий.
Минусы:
⚠️ Предстоит рефакторинг с переименованием, что может привести к поломке существующих ассетов.
⚠️ Если мы захотим новую комбинацию эффектов, нам придется создать новый отдельный VisualEffect. Если помним, то EffectEmitter все еще хранится отдельно.
⚠️ Если в VisualEffect будет содержать всего один EffectEmitter, это все еще 2 ресурса к загрузке.
Вариант 2: Оставить как есть
Просто размещать несколько компонентов EffectRender и объединять их в префаб
Плюсы:
✔️ Не надо ничего менять, все работает как сейчас.
Минусы:
⚠️ Нам придется объединить наш пресловутый костер в префаб.
⚠️ Возможно нужно будет как-то синхронизировать состояния эмиттеров с помощью дополнительных компонент.
Какой вариант вам кажется более удобным?
#thunderengine #GameDev #VFX
✍1