[Camera](GDC math tutorial)使用数学使

2019-08-22  本文已影响0人  珏_Gray

原视频链接:
Math for game programmers:Juicing your cameras with math(youtube)

Math-for-Game-Programmers-Juicing(GDC vault)

上面是同一个视频,油管看不了的可以尝试第二个链接。非常有价值的视频!!!每个游戏开发者都应该看看。

你也可以在这个网站上找到相关的资源。
http://www.mathforgameprogrammers.com/


Overview


Part I: Camera Shake

数学上有两个很有趣的区间,[0,1]和[-1,1]。我们喜欢把参数规范化到这些区间,然后利用各种曲线filter,以产生各种有趣的结果。

关于相机抖动,视频中定义了一个变量来描述,“trauma”。它具有以下特征:

关于非线性:
现实世界中有很多非线性的存在,如人对明暗的感知是非线性,此外,其实人的许多感觉都是非线性的。振动也是非线性的,比如弹簧。

偏移 vs 旋转:
相机抖动的效果可以通过对相机的位置或是角度进行微调来实现。视频中推荐:

实现方法:


2D
3D

随机 vs 平滑噪声(如perlin噪声):
上面的方法,我们使用随机值来产生偏移量。但使用平滑噪声(smoothed fractal噪声),通常会得到更好的效果。

小结


Part II :Smoothed motion

相机运动都需要平滑,否则会很突兀。最好的方法是使用Cubic Hermit曲线,参见(“Interpolations & Splines” from the GDC 2012 Math Tutorial)。视频中提供了简单的渐进平滑方法。


Tip: 垂直方向和水平方向并不需要使用同一种算法来平滑。渐进系数也可以是随时间改变的变量。

现在公式是帧相关的,我们只要加入timescale即可。



Part III: Framing

通常,相机的关注点是角色,即相机跟踪角色。但有些时候,我们想让相机尽可能关注些场景中特定的东西,如门,道具等等。所以我们通常会设置Points of focus & Points of interest

Points of focus
Points of interest

Points of interest通常只使相机发生小范围的移动。
我们可以定义参数“proximity”,即影响相机的优先级。一个常用的方法是proximity跟距离相关,我们设定距离阈值,使得proximity的值范围为[0,1]。通过与每个points的重要性importance想乘,即可得到影响相机移动的权重。



Part IV Voronoi split-screen cameras

上一部分,我们认识到相机要跟踪角色,使得角色不会从玩家视野内消失。那么,多人游戏就会带来难以解决的相机取景问题。此时,就不得不采用分屏方法了。视频中提供了voronoi图分割方法,感兴趣的可以找资料去了解。



总结

Takeaways
上一篇 下一篇

猜你喜欢

热点阅读