Random /Organic/ Weapon Inaccuracy

Hey guys, here’s an interesting one.

I want to simulate the way the orientation of a firearm “creeps” while you hold it in your hands. That is, I need some manner a generating a sort of smooth random x and y rotation over time.

I’ve researched bezier curves, perlin noise, noise curves, and all sorts of other things but I can’t seem to get a bead on something that would be appropriate for this situation.

My best guess at the moment is using some kind of randomized polar coordinate function, where the radius change between -1 and 1 while the angle randomly rotates around, but I can see this leading to some weird movement.

Any ideas how something like this could be accomplished?

Cheers,

Wes

Well, I managed to make something passable. This randomly deflects a horizontal/vertical angle “point of aim” by up to ‘maxCreepAngle’ smoothly over time.

This goes in Update() or whatever:

var maxCreepAngle : float = 1.0;
var creepMinRapidity : float = 2.0;
var creepRelaxedness : float = 3.0;

viewCreepXCooldown -= Time.deltaTime;
if( viewCreepXCooldown <= 0 )
{
	viewCreepXCooldown = Random.Range( 0.0, creepMinRapidity );
	viewCreepXTarget = Random.Range( -maxCreepAngle, maxCreepAngle );
}
viewCreepX = Mathf.SmoothDamp( viewCreepX, viewCreepXTarget, viewCreepXVel, creepRelaxedness );

viewCreepYCooldown -= Time.deltaTime;
if( viewCreepYCooldown <= 0 )
{
	viewCreepYCooldown = Random.Range( 0.0, creepMinRapidity );
	viewCreepYTarget = Random.Range( -maxCreepAngle, maxCreepAngle );
}
viewCreepY = Mathf.SmoothDamp( viewCreepY, viewCreepYTarget, viewCreepYVel, creepRelaxedness );

Just add viewCreepX and viewCreepY to your camera/weapon/whatever angles and you’re good to go.

Maybe someone will find this useful for an FPS or similar.

Peace out.