爆炸的逼真的相机/屏幕抖动


36

我想在爆炸时摇晃一下相机,我尝试了几种不同的功能来晃动它,似乎没有什么能真正给人“哇,真是棒极了!” 输入我想要的感觉。我尝试了一些任意的相对高频正弦波模式,并具有一些线性衰减,以及方波型模式。我尝试只移动一个轴,两个轴和所有三个轴(尽管在这种情况下,多莉效应几乎没有引起注意)。

有人知道好的相机抖动模式吗?


2
尝试找到爆炸后相机震动的一些胶片,然后以慢动作观看,以了解相机震动的情况并以此为基础编写代码。
Skizz

我有相同的问题-摆动只是看起来太顺利了
伊恩

实施相机晃动时,我面临的最大问题是,似乎玩家角色(相机专注于该角色)正在移动而不是相机。奇怪的是,如果您观察周围的环境,就会移动相机,但是由于您如此专注于玩家角色,因此您的视线会被扭曲。我仍在尝试解决此问题-可能是通过在相机移开/移向播放器时改变视野来解决。
Kaj 2010年

Answers:


35

通过将Perlin噪点应用到相机的方向,可以使相机得到不错的抖动。它给您不错的内置震颤,并内置了更高频率的震动,而且看起来确实不错。

http://mrl.nyu.edu/~perlin/doc/oscar.html包含更多详细信息和示例代码,用于产生噪声。


3
哦,噪音,为什么我没想到呢...毕竟是一声巨响,我几乎是短暂的一阵噪音,不是吗...好主意!
falstro,2010年

好主意,有什么您不能使用珀林噪声解决的吗?:P
Cubed2D

1
噪声绝对是必经之路,如果您甚至想像一下效果,它在不同方向的随机运动的短暂变化。但这不是痉挛,因此您需要简短的一致性说明。听起来像是Perlin噪音的完美使用。
deceleratedcaviar

17

如果您指的是爆炸中颤抖的屏幕抖动,那么我已经尝试在我的原型游戏中实现此功能(它是2d的,但我应该很好地转换为3d)。观看youtube视频,看看这是否是您想要的-屏幕抖动大约在1:35左右开始

无论如何,我达到的目的是为场景创建视口并存储中心点(centre)。

爆炸开始时,我会随机创建一个radius〜30px。然后,我centre在随机方向上使视口偏离了这么多像素。

对于每个后续更新(在绘制到屏幕之间),我将其减少radius10-20%,并centre再次从视口中偏移这么多像素。但是,我没有选择该偏移量的随机角度,而是取了以前的视口角度centre并为其添加了180 +/- 60度。

因此,基本上,每次更新(或10到20毫秒左右)时,我都会从centre屏幕的像素中减少像素数,以偏移视口。

这是一些伪代码:

viewportCentre = (400,300) //Lets say screen size is 800 x 600
radius = 30.0
randomAngle = rand()%360
offset = ( sin(randomAngle) * radius , cos(randomAngle) * radius) //create offset 2d vector
viewport.setCentre(viewportCentre + offset) // set centre of viewport
draw()  

while(true)  //update about every 10-20ms
{ 
    radius *=0.9 //diminish radius each frame
    randomAngle +=(180 +\- rand()%60) //pick new angle 
    offset = (sin(randomAngle) * radius , cos(randomAngle) * radius) //create offset 2d vector
    viewport.setCentre(viewportCentre + offset) //set centre of viewport
    draw() //redraw
}

通常,当半径小于2.0时,我会停止屏幕抖动,此时,我会将视口重设为centre


4
我非常喜欢这种实现方式,非常适合小型2D游戏。作为注释,它等效于randomAngle += (150 + rand()%60)摆脱任何+/-问题。
2013年

2
您的视频已关闭。
塔拉

什么样的“ +/-”计算?我从未见过这种东西。
Yoo Matsuo

4

要使相机抖动“感觉”正确,与运动方向无关,而与加速度曲线有关。

相机抖动正在进入动画领域,因此所有动作/反应规则都适用。如果您以线性方式从一个点移动到另一个点,它将感觉平滑且均匀,不会像冲击一样。

如果来回摇头,您会注意到它在变化方向之间的中点移动最快,并且在每次减速时都必须先减速然后再向新方向启动。

这是适用于您的运动的各种缓动功能列表。您可能只想使第一个动作缓动一下,使其感觉有些突然,然后将其余动缓动一下,以模拟头部/相机的运动。


1
我认为宽松政策仍会使它过于平稳。佩林噪声似乎是个好主意,或者是一种随机噪声,其随机范围会随着时间的流逝逐渐减小到零,从而使其淡出(我宁愿在减小半径的半径上尝试不同的缓和函数,而不是在实际运动上进行实验,从而使运动更轻松本身会使相机感觉像是在弹簧上,根据我的经验,相机晃动时感觉不正确)。
Kaj 2010年

3

wkerslake是对的,相机抖动似乎比您想象的要复杂。

模拟抖动的相机时,您必须考虑要模仿的相机(操作员)类型。摄像机的重量会影响惯性,例如。较重的摄像头可以消除小的“随机”运动。铁路或汽车上的摄像师会增加噪音。

绝对可以选择使用Perlin或Simplex噪声,这就是在不同噪声比之间找到适当的平衡。但是我发现在值之间使用插值的计算量较小,并且效果也一样。

前一段时间,我发现了一个Maya脚本,似乎可以解决很多问题。你可以看看那个

另外,您可能想看看Gran Turismo(5),当您观看游戏中的重播时,他们的团队在进行各种类型的实时摄像机抖动方面做得非常出色。


2

如果您具有动态的物体物理特性(可能不是正确的词,而是我的意思),其中任何未固定的物体都会被爆炸“吹走”,则可以使相机像这样的物体受到影响。
唯一的区别只是改变相机的旋转/俯仰/偏航/横摇,而不改变位置。
除此之外,也许会生成一个随机数序列并将它们转换为旋转数?以高度图(灰度图)为例。它们并没有完全不同,但是是随机的。


+1有趣的主意,我想我会尝试噪点运动,当我运行完噪点运动后,我会尝试添加更平滑的多莉效果,就像将相机安装在弹簧上并向后按被震惊。
falstro,2010年
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.