Я не знаю, есть ли «правильный» способ сделать это, но это, вероятно, просто эстетически приятное линейное преобразование, примененное с падением, вычисленным от расстояния до точки.
Поэтому для любого элемента, с которым вы работаете, вы бы:
- найдите расстояние до центра варпа (d)
- рассчитать 1 - d / максимальное расстояние эффекта, который вы хотите (я для интенсивности)
- зажмите это к [0-1]
- преобразовать элемент с помощью lerp (identity, transform, i)
Iirc, Геометрические войны применили это как искажающее искажение к некоторым элементам, в то время как другие элементы, такие как частицы, были просто затронуты «силой», без искажений. Вы можете применить искажение в вершинном шейдере, предполагая, что у вас достаточно вершин для плавной выборки эффекта. В качестве альтернативы вы можете сначала отрисовать все, что нужно для воздействия на внеэкранный буфер, а затем отобразить результаты в хорошо тесселированный квад, к которому вы применяете искажение, перед добавлением всех неискаженных элементов сверху.
Что касается преобразования, то масштабирование даст вам внешний вид. Если я правильно помню, там также происходили некоторые скручивания, которые были бы просто небольшим поворотом.
Вы можете полюбоваться и полюбить свои расчеты коэффициента интенсивности, чтобы получить более странные эффекты. Вы можете, например, рассчитать угол (a) того, что элемент относительно центра, и вычислить его с учетом. Возьмите cos (a), и вы можете создать радиальные волны в этом эффекте. То, что вы хотите сделать, это настроить себя с помощью необходимого кода строительных лесов, а затем отправиться в город, экспериментируя с различными комбинациями факторов.