2D і 3D фізична інтерполяція

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

Глобальна проти локальної інтерполяції

  • У 3D фізична інтерполяція виконується незалежно від глобального перетворення кожного 3D-примірника.

  • У 2D, навпаки, фізична інтерполяція виконується на локальному перетворенні кожного 2D-примірника.

Це має деякі наслідки:

  • У 3D інтерполяцію легко вмикати та вимикати на рівні кожного Вузла за допомогою властивості physics_interpolation_mode в інспекторі, для якої можна встановити значення On, Off або Inherited.

../../../_images/physics_interpolation_mode.webp
  • Однак це означає, що в 3D повороти, які відбуваються в SceneTree (через зв’язки між батьками та дочірніми елементами), можуть бути інтерпольовані лише приблизно через фізику. У більшості випадків це не має значення, але в деяких ситуаціях інтерполяція може виглядати трохи неправильно.

  • У 2D інтерпольовані локальні перетворення передаються дітям під час візуалізації. Це означає, що якщо для батьківського physics_interpolation_mode встановлено On, але для дочірнього елемента встановлено Off, дочірній елемент усе одно буде інтерпольований, якщо батьківський елемент рухається. Лише локальне перетворення дочірнього елемента є неінтерпольованим. Контроль увімкнення/вимкнення поведінки 2D-вузлів, отже, вимагає трохи більше обдумування та планування.

  • З позитивного боку, поведінка повороту в дереві сцени ідеально зберігається під час інтерполяції в 2D, що забезпечує надзвичайно плавну поведінку.

Скидання фізичної інтерполяції

Кожного разу, коли об’єкти переміщуються в абсолютно нове положення, а інтерполяція небажана (щоб запобігти артефакту «смуги»), користувач зобов’язаний викликати reset_physics_interpolation().

Хороша новина полягає в тому, що в 2D це робиться автоматично, коли вузли вперше потрапляють у дерево. Це зменшує кількість робочих місць і зменшує зусилля, необхідні для запуску існуючого проекту.

Примітка

Якщо ви переміщуєте об’єкти після додавання до дерева сцени, вам усе одно доведеться викликати reset_physics_interpolation(), як і у випадку з 3D.

2D частинки

Наразі лише CPUParticles2D підтримуються для фізичної інтерполяції у 2D. Рекомендується використовувати фізичну швидкість принаймні 20-30 тактів на секунду, щоб частинки виглядали рідкими.

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

інше

  • get_global_transform_interpolated() наразі доступний лише для 3D.

  • MultiMeshes підтримуються як у 2D, так і в 3D.