吐槽一句,ldo
老同志辛苦建设sfm
教程站,但是竟然已然半年多未曾使用过sfm
, Jiggle Bone
的建设部分被荒废了,可恶啊!那么 Jiggle Bone
何时才能真正站起来!
莫急,这就来了。
Jiggle
翻译为中文应为“抖动”, Jiggle Bone
理所应当叫做“抖动骨骼”,这个骨骼堪比如今的动态骨骼,会受到模拟重力因素的影响,同时包含骨骼约束,让骨骼可以根据父级的动作做出动态的反应。
使骨骼包含 Jiggle Bone
属性,这个方法广泛用于衣服的飘动、头发的自然下垂等场景,但由于庞杂的代码和参数,指代不清的数字和模糊的范围概念,让初学者望而却步。
学习视频:B站转载:
一、语句写法
$jigglebone <名称> {
<属性组> {
<属性> <值>
…
}
}
其中 <名称> 是关节尖端的名称,要用引号括起来,例如:“jiggle_1”
;
属性和值之间空一格;
如果值为一个数字,则可选择用引号括起来(但不括起来也可以);
如果值为一个区间,则需要用 [ ] 方括号括起来(也可不用),例如:[45.0 45.0]
。
目前有四种类型的“属性组”:
is_rigid
is_flexible
has_base_spring
is_boing
(仅在起源2013版本中可用)
每个组是可选的,但is_rigid
和is_flexible
不能一起使用。has_base_spring
和is_boing
也不能一起使用。
Jiggle Bone 的本质
is_rigid
使骨骼根部可以三向旋转
is_flexible
将骨骼视为可弹性形变的弹簧,使骨骼根部可以三向旋转
has_base_spring
使骨骼根部可三向位移
is_boing
未知(字面意思是弹射)
刚度 - stiffness
通过指定刚度和阻尼值来模拟弹簧。刚度决定了弹簧的刚度。较低的值(例如 10
)非常松散和脆弱,而 500
的值非常僵硬和有弹性。合法值范围为 1
到 1000
。
阻尼 - damping
阻尼是一种弹簧摩擦或阻力。值为零意味着弹簧将永远振荡。阻尼为 10 会使弹簧几乎立即停止振动。合法值范围为 0 到 10。
例子1:
$jigglebone "Floppy" {
is_rigid {
tip_mass 100
length 20
angle_constraint 60
}
}
例子2:
$jigglebone "JigglyUpAndDown" {
is_flexible {
yaw_stiffness 100
yaw_damping 3
length 20
yaw_constraint 0 0
}
}
例子3:
$jigglebone "Bouncy" {
has_base_spring {
stiffness 100
damping 1
left_constraint -20 20
up_constraint -20 20
forward_constraint -20 20
}
}
例子4:
$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
}
}
例子5:
$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
}
}
二、属性说明
属性组1:is_rigid
这个参数赋予 Jiggle Bone
以**“刚体”**属性,它会在指定骨骼的末端放置一个模拟质量,此时骨骼的作用就像一根刚硬的棍子。因此 Jiggle Bone
仅产生旋转运动,旋转中心位于 Jiggle Bone
的底部。
属性:
length
“尖端”质量离底座有多远(以英寸为单位)。短的长度会导致剧烈的抖动。更长的长度会导致更微妙的动作。一般值为20
。
tip_mass
尖端受重力影响的程度。零禁用重力效果,而 1000
将是一个沉重的质量。
提示:
length
属性的长短决定抖动剧烈程度,可理解为单摆的长度,长度越长,受到移动带来的抖动影响越小;长度约短,受到移动带来的抖动影响越大。这个长度不是指模型骨骼的真实长度,但是骨骼的真实长度依然影响抖动的程度!(即length
作为一个量,相乘骨骼真实长度后计算抖动)同时也可以通过改变骨骼根节点的位置来调整抖动的轴线位置。
提示2:
tip_mass
是指骨骼尖端受到重力的程度,但是这个重力的方向是RootTransform
的 -Y 轴方向,如果在做动画时旋转了该模型的RootTransform
,很可能会出现该模型受到的重力不再向下的情况,因此做动画时尽量不要旋转模型根节点
!如果该属性的值为0
,则Jiggle Bone
骨骼不受到重力效果,而是像一个弹簧一样,会趋向于回到它(相对与父级骨骼
)的原本位置。
(下面属性is_rigid
与is_flexible
通用)
angle_constraint
指定允许的最大角度偏转,创建一个摇晃骨骼无法穿透的锥形边界。
yaw_constraint (min max)
指定沿局部偏航旋转轴允许的最小和最大角偏转。角度值不应超过 +/- 90
度。
yaw_friction
当 jiggle Bone
在偏航限制定义的平面上滑动时,非零值会产生摩擦力。摩擦不应超过 20 个单位。
pitch_constraint
指定沿局部俯仰旋转轴允许的最小和最大角偏转。角度值不应超过 +/- 90
度。
pitch_friction
非零值会在微动骨骼相对于由节距限制定义的平面滑动时产生摩擦力。摩擦不应超过 20
个单位。
提示:Yaw
即偏航的意思,指骨骼以自身指向的方向为轴,自身滚动。Tip
是骨骼尖端的意思。Mass
有质量、块的意思。Pitch
是俯仰的意思,指骨骼以根节点的x
、y
轴为轴,以根节点为原点转动。
属性组2:is_flexible
这个参数赋予 Jiggle Bone
以**“柔体”**属性,它会在骨骼末端放置一个模拟质量,此时骨骼就像一根有弹性的柔性杆。因此Jiggle Bone
也同上仅产生旋转运动,旋转中心也位于 Jiggle Bone
的底部。
属性:
yaw_stiffness
弹簧在局部偏航旋转轴上的刚度。
yaw_damping
沿局部偏航旋转轴阻尼。最小值:0
,最大值:10
。
pitch_stiffness
弹簧在局部俯仰旋转轴上的刚度。
pitch_damping
沿局部俯仰旋转轴阻尼。最小值:0
,最大值:10
。
along_stiffness
弹簧沿弹簧轴线的刚度。仅当为此骨骼指定了“allow_length_flex
”时才使用。
along_damping
沿弹簧轴阻尼。仅当为此骨骼指定了 “allow_length_flex
” 时才使用。 min: 0
, max :10
。
allow_length_flex
通常,微动骨骼保持其长度刚性。指定此项也允许该长度弯曲。
length
“尖端”质量离底座有多远(以英寸为单位)。短的长度会导致剧烈的抖动。更长的长度会导致更微妙的动作。
tip_mass
尖端受重力影响的程度。零禁用重力效果,而 1000
将是一个沉重的质量。
提示1:
stiffness
是指刚度,由于这个属性组赋予了Jiggle Bone
柔体属性,那么刚度就是表示柔体属性究竟多柔软的一个量,其中yaw_stiffness
表示骨骼可以像拧麻花一样拧到什么程度,pitch_stiffness
表示骨骼可以被掰弯成什么程度,along_stiffness
表示骨骼可以被拉长到什么程度。而damping
是指形变过程中的阻尼,如果阻尼很小,则形变会一瞬间到最大值,如果阻尼较大,形变会有个可见的过程。
提示2:“
allow_length_flex
”属性并未提到在何处声明,该属性的作用是让骨骼像弹簧一样可以拉伸。**虽然属性未声明,但是不写该声明的情况下,似乎属性仍然生效,由于along
系列属性会让骨骼拉伸,不推荐使用!**否则就会出现以下情况。头发抽搐:
(此处上动图1)
(下面属性is_rigid
与is_flexible
通用)
angle_constraint
指定允许的最大角度偏转,创建一个摇晃骨骼无法穿透的锥形边界。
yaw_constraint (min max)
指定沿局部偏航旋转轴允许的最小和最大角偏转。角度值不应超过 +/- 90 度。
yaw_friction
当 jiggle 骨骼在偏航限制定义的平面上滑动时,非零值会产生摩擦力。摩擦不应超过 20 个单位。
pitch_constraint
指定沿局部俯仰旋转轴允许的最小和最大角偏转。角度值不应超过 +/- 90 度。
pitch_friction
非零值会在微动骨骼相对于由节距限制定义的平面滑动时产生摩擦力。摩擦不应超过 20 个单位。
提示:此处属性
is_rigid
与is_flexible
通用,实际作用是角度约束。
属性组3:has_base_spring
这个参数让 Jiggle Bone
具有“弹性底座”,则会在骨骼的根部上放置一个模拟质量。这个弹簧只产生平移运动,在 X
、Y
和 Z
方向移动整个 Jiggle Bone
(三向移动)。
属性:
stiffness
弹性底座的刚度(有多硬,越硬最大位移距离就越小)。
damping
弹性底座的阻尼。
left_constraint
允许骨骼沿自身 X
轴移动的最大量。
left_friction
当弹性底座在自身 X
轴上移动时,在过程中的摩擦系数。
up_constraint
允许骨骼沿自身 Y
轴移动的最大量。
up_friction
当弹性底座在自身 Y
轴上移动时,在过程中的摩擦系数。
forward_constraint
允许骨骼沿自身 Z
轴移动的最大量。
forward_friction
当弹性底座在自身 Z
轴上移动时,在过程中的摩擦系数。
base_mass
底座弹簧受重力影响的程度。(如果为0
则效果为趋向于自动回正位移)
属性组4:is_boing
效果未知。
提示:属性有以下几种。
属性:
impact_speed
impact_angle
damping_rate
Frequency
Amplitude
以上参考Valve开发者论坛