Интерполяция 2D и 3D физики

В целом, интерполяция 2D и 3D физики работает очень схожим образом. Однако есть несколько различий, которые будут описаны здесь.

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

  • В 3D, интерполяция физики выполняется независимо от глобального преобразования каждого 3D-экземпляра.

  • В 2D, напротив, физическая интерполяция выполняется на основе локального преобразования каждого 2D-экземпляра.

Это имеет некоторые последствия:

  • В 3D интерполяцию легко включать и выключать на уровне каждого Node (Узла) с помощью свойства 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-Частицы

В настоящее время для интерполяции физики в 2D поддерживается только CPUParticles2D. Рекомендуется использовать частоту физических тиков не менее 20–30 в секунду, чтобы частицы выглядели плавно.

Particles2D (частицы GPU) пока не интерполируются, поэтому на данный момент рекомендуется преобразовать их в CPUParticles2D (но сохраните резервную копию Particles2D на случай, если мы заставим их работать).

Другое

  • get_global_transform_interpolated() в настоящее время доступно только для 3D.

  • MultiMeshes поддерживаются как в 2D, так и в 3D.