Я пытаюсь добиться эффекта деформации, который вы видите в таких играх, как Geometry Wars .
Может кто-нибудь помочь объяснить, что здесь происходит? Я чувствую, что программист, так или иначе, каким-то образом манипулирует осью z сетки, но, может быть, есть какое-то известное математическое уравнение, которое действительно дает правильный эффект деформации?
Изменить: чтобы быть более конкретным, я имею в виду деформации сетки. Как все выглядит, тянется к отрицательной оси Z, а затем отскакивает.
graphics
graphic-effects
Джои Грин
источник
источник
Ответы:
10-минутная реализация простой системы пружин (или так он говорит в своем блоге ;)). Система может обрабатывать несколько перекосов и других вещей, искажающих сетку.
Обновлено, чтобы добавить некоторые мелкие детали:
Несколько других деталей. Из интервью, которое раньше размещалось на сайте Bizarre Creations (этот сайт исчез из-за закрытия компании), возник вопрос:
В: Одной из самых ярких новых графических функций в игре является игровая зона «Сетка гравитации». Как ты заставил это выглядеть так круто; каждый объект в игре действительно имеет собственную гравитацию? Сама сетка состоит из 60000 точек, каждая из которых прилагает небольшое усилие к своему соседу. Сама симуляция находится на грани стабильности, что заставляет его так сильно качаться, когда один из игровых объектов дает ему небольшой толчок! Только несколько типов объектов влияют на сетку. Поскольку сеточная система довольно дорога в расчете, она фактически работает на втором ядре вместе с аудиосистемой (первое ядро предназначено для игрового процесса и частиц, третье используется для визуализации звука).
источник
Я не знаю, есть ли «правильный» способ сделать это, но это, вероятно, просто эстетически приятное линейное преобразование, примененное с падением, вычисленным от расстояния до точки.
Поэтому для любого элемента, с которым вы работаете, вы бы:
Iirc, Геометрические войны применили это как искажающее искажение к некоторым элементам, в то время как другие элементы, такие как частицы, были просто затронуты «силой», без искажений. Вы можете применить искажение в вершинном шейдере, предполагая, что у вас достаточно вершин для плавной выборки эффекта. В качестве альтернативы вы можете сначала отрисовать все, что нужно для воздействия на внеэкранный буфер, а затем отобразить результаты в хорошо тесселированный квад, к которому вы применяете искажение, перед добавлением всех неискаженных элементов сверху.
Что касается преобразования, то масштабирование даст вам внешний вид. Если я правильно помню, там также происходили некоторые скручивания, которые были бы просто небольшим поворотом.
Вы можете полюбоваться и полюбить свои расчеты коэффициента интенсивности, чтобы получить более странные эффекты. Вы можете, например, рассчитать угол (a) того, что элемент относительно центра, и вычислить его с учетом. Возьмите cos (a), и вы можете создать радиальные волны в этом эффекте. То, что вы хотите сделать, это настроить себя с помощью необходимого кода строительных лесов, а затем отправиться в город, экспериментируя с различными комбинациями факторов.
источник