我想在爆炸时摇晃一下相机,我尝试了几种不同的功能来晃动它,似乎没有什么能真正给人“哇,真是棒极了!” 输入我想要的感觉。我尝试了一些任意的相对高频正弦波模式,并具有一些线性衰减,以及方波型模式。我尝试只移动一个轴,两个轴和所有三个轴(尽管在这种情况下,多莉效应几乎没有引起注意)。
有人知道好的相机抖动模式吗?
我想在爆炸时摇晃一下相机,我尝试了几种不同的功能来晃动它,似乎没有什么能真正给人“哇,真是棒极了!” 输入我想要的感觉。我尝试了一些任意的相对高频正弦波模式,并具有一些线性衰减,以及方波型模式。我尝试只移动一个轴,两个轴和所有三个轴(尽管在这种情况下,多莉效应几乎没有引起注意)。
有人知道好的相机抖动模式吗?
Answers:
通过将Perlin噪点应用到相机的方向,可以使相机得到不错的抖动。它给您不错的内置震颤,并内置了更高频率的震动,而且看起来确实不错。
http://mrl.nyu.edu/~perlin/doc/oscar.html包含更多详细信息和示例代码,用于产生噪声。
如果您指的是爆炸中颤抖的屏幕抖动,那么我已经尝试在我的原型游戏中实现此功能(它是2d的,但我应该很好地转换为3d)。观看youtube视频,看看这是否是您想要的-屏幕抖动大约在1:35左右开始
无论如何,我达到的目的是为场景创建视口并存储中心点(centre
)。
爆炸开始时,我会随机创建一个radius
〜30px。然后,我centre
在随机方向上使视口偏离了这么多像素。
对于每个后续更新(在绘制到屏幕之间),我将其减少radius
10-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
。
randomAngle += (150 + rand()%60)
摆脱任何+/-问题。
要使相机抖动“感觉”正确,与运动方向无关,而与加速度曲线有关。
相机抖动正在进入动画领域,因此所有动作/反应规则都适用。如果您以线性方式从一个点移动到另一个点,它将感觉平滑且均匀,不会像冲击一样。
如果来回摇头,您会注意到它在变化方向之间的中点移动最快,并且在每次减速时都必须先减速然后再向新方向启动。
这是适用于您的运动的各种缓动功能的列表。您可能只想使第一个动作缓动一下,使其感觉有些突然,然后将其余动缓动一下,以模拟头部/相机的运动。
wkerslake是对的,相机抖动似乎比您想象的要复杂。
模拟抖动的相机时,您必须考虑要模仿的相机(操作员)类型。摄像机的重量会影响惯性,例如。较重的摄像头可以消除小的“随机”运动。铁路或汽车上的摄像师会增加噪音。
绝对可以选择使用Perlin或Simplex噪声,这就是在不同噪声比之间找到适当的平衡。但是我发现在值之间使用插值的计算量较小,并且效果也一样。
前一段时间,我发现了一个Maya脚本,似乎可以解决很多问题。你可以看看那个。
另外,您可能想看看Gran Turismo(5),当您观看游戏中的重播时,他们的团队在进行各种类型的实时摄像机抖动方面做得非常出色。
如果您具有动态的物体物理特性(可能不是正确的词,而是我的意思),其中任何未固定的物体都会被爆炸“吹走”,则可以使相机像这样的物体受到影响。
唯一的区别只是改变相机的旋转/俯仰/偏航/横摇,而不改变位置。
除此之外,也许会生成一个随机数序列并将它们转换为旋转数?以高度图(灰度图)为例。它们并没有完全不同,但是是随机的。