Zh/$jigglebone

用于将模型骨骼中的某些骨骼标记为“抖动骨骼”，并告知游戏引擎在运行时动态模拟它们，从而实现逼真的次级运动，例如摇晃的触须、弹跳的肌肉、柔软的耳朵等。
== 教程 ==
可以在此处找到添加抖动骨骼的教程。
另一个添加抖动骨骼的教程可以在此处找到。
对于Blender用户，可以在此处找到教程。
== 语法 ==
$jigglebone <name> {
	<property group> {
		<property> <value> [<value>]
		...
	}
}
其中，<name> 是关节末端的名称。
目前有四种“属性组”：
* is_rigid
* is_flexible
* has_base_spring
* is_boing 
每个组都是可选的，但is_rigid和is_flexible不能同时使用。has_base_spring和is_boing也不能同时使用。
== 示例 ==
这里有一些例子：
$jigglebone "Floppy" {
	is_rigid {
		tip_mass 100
		length 20
		angle_constraint 60 
	}
}
$jigglebone "JigglyUpAndDown" {
	is_flexible {
		yaw_stiffness 100
		yaw_damping 3
		length 20
		yaw_constraint 0 0
	}
}
$jigglebone "Bouncy" {
	has_base_spring {
		stiffness 100 
		damping 1 
		left_constraint -20 20
		up_constraint -20 20
		forward_constraint -20 20
	}
}
$jigglebone "SubtleBounceWithALimit" {
	has_base_spring {
		base_mass 5
		stiffness 800
		damping 10
		left_constraint -0.5 0.5
		up_constraint -0.75 2.0
		forward_constraint -0.25 0.25
		left_friction 10
		up_friction 10
		forward_friction 10
	}
}
$jigglebone "FloppyAndBouncy" {
	is_rigid {
		tip_mass 100
		length 20
		angle_constraint 60 
	}
	has_base_spring {
		stiffness 100 
		damping 1 
		left_constraint -20 20
		up_constraint -20 20
		forward_constraint -20 20
	}
}
$jigglebone "ConstantBoing" {
	is_boing {
		impact_speed 0
		impact_angle 0
		damping_rate 0.0
		frequency 20.0
		amplitude 0.2
	}
}
来自Antlion Worker：
 $jigglebone "Antlion.glasswingR_bone" {
 	is_flexible {
 		yaw_stiffness 700
 		yaw_damping 6
 		pitch_stiffness 700
 		pitch_damping 8
 		tip_mass 5
 		length 30
 		angle_constraint 37
 	}
 }
== 弹簧 == 
通过指定刚度和阻尼值来模拟弹簧。刚度决定了弹簧的硬度。较低的值（如10）表示弹簧非常松弛和柔弱，而500的值则表示弹簧非常硬且有弹性。合法值范围为1到1000。 
阻尼是一种弹簧的摩擦或阻力。阻尼值为零表示弹簧会无限震荡。阻尼值为10会导致弹簧几乎立即停止振动。合法值范围为0到10。 
== is_flexible == 
如果抖动骨骼是“柔性的”，则会在骨骼+Z轴方向的一定距离处放置一个模拟质量，骨骼会像一个弹性柔韧的杆一样运动。这种弹簧仅会产生旋转运动，旋转中心位于抖动骨骼的根部。 
;yaw_stiffness : 控制弹簧在局部偏航旋转轴上的刚度。 
;yaw_damping : 控制弹簧在局部偏航旋转轴上的阻尼。较小的值会导致显著的抖动，而较大的值会导致更微妙的运动。 
;pitch_stiffness : 控制弹簧在局部俯仰旋转轴上的刚度。 
;pitch_damping : 控制弹簧在局部俯仰旋转轴上的阻尼。较小的值会导致显著的抖动，而较大的值会导致更微妙的运动。 
;along_stiffness : 控制弹簧沿轴方向的刚度。仅在为该骨骼指定“allow_length_flex”时使用。 
;along_damping : 控制弹簧沿轴方向的阻尼。仅在为该骨骼指定“allow_length_flex”时使用。 
;allow_length_flex : 通常，抖动骨骼会保持其长度刚性。指定此项后，长度也会变得可变。 
;length : 模拟质量距离根部的距离（以英寸为单位）。此值应与骨骼长度匹配；若设置的值大于骨骼长度，且未仔细调整，则可能导致抖动骨骼出现奇怪且不可预测的运动。 
;tip_mass : 模拟质量受重力影响的程度。零表示禁用重力效果，而1000表示质量很重。 
== is_rigid == 
如果抖动骨骼是“刚性的”，则会在骨骼末端放置一个模拟质量，骨骼会像一个刚性棍棒一样运动。这种弹簧仅会产生旋转运动，旋转中心位于抖动骨骼的根部。 
;length : 模拟质量距离根部的距离（以英寸为单位）。此值应与骨骼长度匹配；若设置的值大于骨骼长度，且未仔细调整，则可能导致抖动骨骼出现奇怪且不可预测的运动。 
;tip_mass : 模拟质量受重力影响的程度。零表示禁用重力效果，而1000表示质量很重。 
== 角度约束 == 
以下参数可以在 is_rigid（刚性）或 is_flexible（柔性）参数组中使用。请注意，可以不使用这些约束，也可以全部使用，但每个约束都会带来一定的计算开销。 
;angle_constraint : 指定允许的最大角偏转，创建一个抖动骨骼无法穿透的圆锥形边界。 
;yaw_constraint (min max) : 指定沿局部偏航旋转轴允许的最小和最大角偏转。角度值不应超过+/- 90度。 
 
 
;yaw_friction : 非零值会在抖动骨骼沿偏航限制平面滑动时产生摩擦力。摩擦值不应超过20单位。 
;pitch_constraint : 指定沿局部俯仰旋转轴允许的最小和最大角偏转。角度值不应超过+/- 90度。 
 
;pitch_friction : 非零值会在抖动骨骼沿俯仰限制平面滑动时产生摩擦力。摩擦值不应超过20单位。 
== has_base_spring == 
如果抖动骨骼具有“基础弹簧”，模拟质量将被放置在骨骼的基部。这种弹簧仅产生平移运动，使整个抖动骨骼在 X、Y 和 Z 轴上移动。 
;stiffness : 基础弹簧的刚度。 
;damping : 基础弹簧的阻尼系数。 
;left_constraint : 骨骼沿局部 X 轴允许的最大移动距离。 
;left_friction : 当弹簧与左侧约束摩擦时，在向上/向前平面内施加的摩擦力大小。 
;up_constraint : 骨骼沿局部 Y 轴允许的最大移动距离。 
;up_friction : 当弹簧与向上约束摩擦时，在左侧/向前平面内施加的摩擦力大小。 
;forward_constraint : 骨骼沿局部 Z 轴允许的最大移动距离。 
;forward_friction : 当弹簧与向前约束摩擦时，在左侧/向上平面内施加的摩擦力大小。 
;base_mass : 基础弹簧受重力影响的程度。 
== is_boing == 
生成一个简单的压缩与伸展的正弦波“弹跳”效果。当骨骼移动并达到速度阈值时，会触发缩放与伸展的动态效果，使骨骼在运动中呈现弹性外观。 
注意：在 中，执行弹跳效果时尺寸有时会随机变为 0，导致效果消失。 
;impact_speed: 
触发弹跳效果所需的速度阈值。当骨骼的速度超过此值时，弹跳动画会被激活。 
示例：20。 
此效果在 中似乎并未按预期工作，即使设置了高值，任何形式的移动似乎都会触发效果。 
;impact_angle: 
确定弹跳效果对骨骼运动方向相对于其方向的敏感度。只有与指定角度一致的运动会触发效果。 
示例：90。 
逻辑上，值的范围为 0 到 180。 
;damping_rate: 
控制弹跳效果随时间的衰减速度。较低的值会导致动画持续时间更长。值为 0.0 时，弹跳效果不会停止动画；在触发后会无限生长和恢复。值为 1.0 时，动画会快速消退，而值为 3.0 或更高可能会使其几乎立即恢复正常。 
;frequency: 
频率较高时会导致更快的运动，而较低的频率会导致更慢的运动。值为 0.0 时，动画完全停止，而值为 40.0 时会使动画极其快速。 
;amplitude: 
控制弹跳效果期间骨骼缩放的幅度。较高的值会产生更夸张的缩放与伸展效果。骨骼速度相对于 impact_speed 阈值的大小会影响感知的振幅。 
在 中，即使未达到最大阈值速度，此效果似乎始终触发最大振幅。 
jigglebone