|
本帖最后由 HydrogensaysHDT 于 2016-7-4 22:52 编辑
物理xml文件格式
不太懂的话可以参考demo里面的那个
基本类型:
表示一个三维向量,比如<vector x="0" y="0" z="1"/>表示向量(0, 0, 1)
表示一个四元数,比如<quaternion x="0" y="0" z="0" w="1"/>表示一个空旋转
表示一个Axis-Angle(轴角)旋转,xyz构成的三维向量表示轴,angle表示旋转角度(弧度制)
表示一个变换
basis或basis-axis-angle只能出现一个
如果出现了多个,后面的会覆盖前面的
比如
<transform>
<basis x="0" y="0" z="0" w="1"/>
<origin x="0" y="0" z="0"/>
</transform>
或
<transform>
<basis-axis-angle x="1" y="0" z="0" angle="0"/>
<origin x="0" y="0" z="0"/>
</transform>
表示一个单位变换
以下为正餐
根节点:
骨骼表示(bone):
name - 骨骼名字,不解释
mass - 质量,默认为0
如果一个骨骼质量为0,表示该骨骼为Kinematic(对应havok里的Keyframe),系统会追踪动画的运动
否则该骨骼为dynamic,系统会采用物理计算骨骼的位置
inertia - 惯量,默认为(0, 0, 0)
centerOfMassTransform - 骨骼到刚体重心的变换,默认为单位变换(就是不变换)
对于一个kinematic骨骼,建议设置成单位变换,以保证运动插值平滑
linearDamping - 线运动阻尼, 默认0
取值范围为(0,1],在自由状态下下一秒的速度v'=v*(1-linearDamping)
angularDamping - 旋转运动阻尼,默认0
取值范围为(0,1],在自由状态下下一秒的角速度r'=r*(1-angularDamping)
friction - 摩擦系数,默认0.5
rollingFriction - 旋转摩擦系数,默认0
restitution - 反弹系数,默认0
margin-multiplier - 碰撞大小系数,默认1
与该骨骼相关的碰撞体会受到该系数影响,影响力与骨骼权重有关
该值越大,所有与之相关的碰撞体也就越大
骨骼默认值修改(bone-default)
除了没有name属性以外其余同bone
修改出现元素的默认值为指定值
对从该bone-default开始的所有bone生效,对该bone-default出现前的bone无效
使用该元素能快速生成大量bone
碰撞体表示(per-vertex-shape/per-triangle-shape)
name - 对应NiTriShape的名字
priority - 检测优先级,默认0
效率相关,合理设置该值能有效提升效率
最优情况是保证碰撞体密度越高的优先级越大
取值范围[-2147483648, 2147483647]
对于虚拟地板建议设置为最小值
tag - 碰撞检测标签
可以多次使用以添加多个标签
no-collide-with-tag - 表明该碰撞体不会与具有该tag的碰撞体碰撞
no-collide-with-bone - 表明该碰撞体不会与该骨骼碰撞,只对系统中存在的骨骼有效
weight-treshold - 表明蒙皮权重不超过该值的碰撞体不会对骨骼bone产生影响
用该值能有效减少不必要的碰撞体数量,并解决某些由蒙皮权重引发的不合理的碰撞冲突问题
margin - 默认0.1
对于per-vertex-shape 表明为每个顶点生成的碰撞球的半径大小
对于per-triangle-shape 同3ds max的cloth修改器的补偿
prenetration - 默认1
对于per-triangle-shape 若一碰撞体在不与三角面相交但仍位于三角面以下不超过prenetration的位置,则认为他们相交
同3ds max的cloth修改器的深度
注意:
如果蒙皮中有未声明的骨骼,则系统会按照当前默认值自动生成该骨骼
per-vertex-shape为每个顶点生成一个碰撞球,per-triangle-shape为每个三角形生成一个碰撞三角形
当前版本不检测per-triangle-shape之间的碰撞,可以对同一个trishape附加多个碰撞体,然后用tag过滤碰撞来代替
per-triangle-shape之间的碰撞已被支持,但是本质上是当碰撞检测时,优先级较高的那个会转换成per-vertex-shape
建议对身体部分使用per-triangle-shape,对其他部分使用per-vertex-shape
现在能正确处理per-triangle-shape之间的碰撞,但是代价相对较高
物理插件使用的是GridBroadphaseDetection,每个Cell大小是5*5*5,如果一个碰撞体的大小超过了一个cell,则可能导致碰撞检测出错或者性能大幅度下降之类的问题。解决方案仍在考虑中
由于上面的那个原因,所有的per-vertex-shape的半径都会被自动限制在2.5以内
约束部分
generic-constraint/generic-constraint-default
bodyA, bodyB - 约束链接的两个骨骼名字
frameInA/frameInB - 表示连接点的位置
frameInA表示的是连接点相对于骨骼A的变换
frameInB表示的是连接点相对于骨骼B的变换
二者只需出现一个,系统会根据模型计算另一个的值
如果同时指定的话,后面的会覆盖前面的
useLinearReferenceFrameA - 表示线性约束的计算是相对于A还是B,默认false表示线性约束计算相对于B进行
linearLowerLimit - 表示线性约束下界,默认(1, 1, 1)
linearUpperLimit - 表示线性约束上界,默认(-1, -1, -1)
angularLowerLimit - 表示旋转约束下界,默认(1, 1, 1)
angularUpperLimit - 表示旋转约束上界,默认(-1, -1, -1)
linearStiffness/angularStiffness - 对应弹簧硬度,默认(0, 0, 0)
linearDamping/angularDamping - 对应弹簧阻尼,默认(0, 0, 0)
linearEquilibrium/angularEquilibrium - 弹簧中心位置,默认(0, 0, 0)
注意:
如果约束试用了未声明的骨骼,则系统会按照当前默认值自动生成该骨骼
如果约束的下界>上界,则表示该约束无效,比如默认值就表示不对两者进行任何坐标/旋转上的约束
可以使用generic-constraint-default对默认值进行修改,用法同bone-default
stiffsping-constraint/stiffspring-constraint-default
minDistanceFactor - 最小距离倍率,默认1(最小距离=最小距离倍率*初始距离)
maxDistanceFactor - 最大距离倍率,默认1
stiffness - 弹簧强度
damping - 弹簧阻尼
equilibriumFactor - 弹簧中心位置倍率,默认0.5(弹簧中心位置=最小距离*弹簧中心位置倍率 + 最大距离*(1-弹簧中心位置倍率 ))
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
评分
-
12
查看全部评分
-
|