Интерполяция 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.

  • Physics interpolation in 2D is implemented on the server side, which means it's effective on physics bodies created using low-level servers. In contrast, physics interpolation in 3D is implemented on the scene side. This means it does not affect physics bodies created using servers. These must be interpolated manually instead. See the pull request description for the rationale on this design decision.