如何复制“几何战争”中的扭曲效果?


12

我正在努力实现您在《几何战争》等游戏中看到的扭曲效果。

几何战争截图,包括扭曲效果

有人可以帮忙解释一下发生了什么吗?我觉得网格的z轴是由程序员以某种方式进行任何操作的,但是是否存在一些已知的数学方程式才能真正获得正确的翘曲效果?

编辑:更具体地说,我的意思是网格扭曲。一切看起来都朝着负Z轴拉动然后反弹。


1
您指的是背景弯曲吗?由于是《几何大战》,因此屏幕截图中出现了很多混乱情况,这使我挠了一段时间,试图告诉您所指的是什么。
恩典笔记

是的,背景弯曲了。
乔伊·格林

Answers:


12

一个简单的spring系统的10分钟实现(或者他在博客上说;))。该系统可以处理多个扭曲和其他扭曲网格的事物。

更新以添加一些次要的附加细节:

其他一些细节。过去曾在Bizarre Creations网站上进行过一次采访(该网站由于公司倒闭而消失了),这里有一个问题:

问:游戏中最引人注目的新图形功能之一是“重力网格”游戏区域。您如何使它看起来如此酷;游戏中的每个物体真的都有自己的引力吗? 网格本身由60,000个点组成,每个点都对其邻居施加少量力。模拟本身位于稳定性的边缘,这就是当其中一个游戏对象向其施加小的推动力时,导致其摇摆很大的原因!只有少数几种对象会影响网格。由于网格系统的计算相当昂贵,因此它实际上与音频系统一起在第二个内核上运行(第一个内核专用于游戏性和粒子,第三个内核用于渲染音频)。


1

我不知道是否有“正确”的方法可以执行此操作,但可能只是应用了美观的线性变换,并应用了从距离到点的衰减。

因此,对于您正在使用的任何元素,您将:

  • 找出到经线中心的距离(d)
  • 计算1-d /您想要的效果的最大距离(强度i)
  • 钳到[0-1]
  • 通过lerp(identity,transform,i)变换元素

几何学战争(Iirc)将几何扭曲作为扭曲扭曲应用于某些元素,而其他元素(例如粒子)仅受“力”的影响而没有扭曲。假设您有足够的顶点可以平滑地采样效果,则可以在顶点着色器中应用变形。或者,您可以先将需要影响的所有内容渲染到屏幕外的缓冲区,然后将结果渲染到精细的细分四边形上,然后将失真应用到该四边形上,然后再将所有未失真的元素添加到顶部。

至于变换,缩放将使您看起来更吸引人。如果我没记错的话,还会发生一些扭曲,这只是一点点旋转。

您可以通过计算强度因子来获得越来越出色的效果,以获得更古怪的效果。例如,您可以计算元素相对于中心的角度(a),并将其作为因子。取cos(a)即可在效果中产生径向波。您要做的就是设置必要的脚手架代码,然后去城镇尝试各种不同的因素组合。


酷,谢谢,我会尝试的。您描述的算法基本上是弹簧效应吗?
Joey Green

不,我没有描述它会随着时间的变化,所以不是春天。我刚刚描述了如何获得想要的失真形状。要以GW样式对其进行动画处理,则需要在此添加另一个因素,以随着时间的推移对i进行调制。尝试实施整个过程,您应该清楚可以扩展i来放松或增强效果。使正弦波通过该调制值,或像一维弹簧一样反弹它,您将有效地反弹整个过程。同样,一旦您拥有一堆浮动的变量,实验将成为您的朋友。
克里斯·苏巴乔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.