刚体编辑器
本文档中的刚体层级如下图所示:
概述
刚体编辑器(Rigidbody Editor)用于生产模型的刚体资源,编辑及调试模型刚体的物理效果。
编号 | 说明 | |
---|---|---|
1 | 顶部工具栏(Top Toolbar) | 提供了删除、保存、模拟刚体、导入物理碰撞、重置相机位置的功能。 |
2 | 树形视图(Tree View)面板 | 用于显示刚体和刚体包含的碰撞体节点;提供新增和删除碰撞体的菜单功能。 |
3 | 场景(Scene)面板 | 用于显示模型,观察刚体模拟效果;提供对碰撞体位置、旋转、缩放等编辑功能。 |
4 | 刚体信息(RigidBody Detail)面板 | 提供刚体属性编辑功能。 |
可进行刚体编辑的文件类型
后缀名 | 说明 |
---|---|
.xmod | 模型资源文件 |
编辑器保存的刚体文件类型
保存刚体编辑后,编辑器会输出以下两种格式的刚体资源。
后缀名 | 说明 |
---|---|
.cobj | INI格式的刚体配置文件。保存刚体引用的物理材质文件路径、碰撞预设等信息。 |
.nxx | XML格式的刚体配置文件。保存刚体碰撞及模拟相关的所有属性。 |
快捷键
快捷键 | 说明 |
---|---|
1 | 拖动编辑坐标轴,修改选中碰撞体的位置。 |
2 | 拖动编辑坐标轴,修改选中碰撞体的旋转。 |
3 | 拖动编辑坐标轴,修改选中碰撞体的缩放。 |
4 | 切换本地/世界空间编辑。 |
5 | 选中场景空白位置拖动,改变模型高度。 |
6 | 选中场景空白位置拖动,改变模型旋转。 |
Shift | 拖动编辑坐标轴操作过程中按下Shift,可对碰撞体的位置改变做更精细的调整。 |
Ctrl + S | 保存当前编辑的刚体。 |
Delete | 删除当前选中的碰撞体。 |
F | 向鼠标指向位置发射一个动态刚体小球。 |
打开刚体编辑器
方法一
在资源预览(Resource Preview )窗口中找到模型文件或者刚体文件。
双击模型文件 打开模型编辑器(Model Editor)。
在模型编辑器(Model Editor)中点击 按钮切换到刚体编辑。
刚体编辑器(Rigidbody Editor):
方法二
在资源预览(Resource Preview)窗口中,双击任意类型的刚体文件(.cobj/.nxx/.nxb),打开刚体编辑器(Rigidbody Editor)。
新建刚体
在场景(Scene)面板中点击空白处,在刚体信息(RigidBody Detail)面板中找到重建刚体(Rebuild Rigid)选项。
属性 | 说明 |
---|---|
刚体类型(Rigid Type) | 新建刚体的类型。
|
碰撞体类型(Collider Type) | 新建刚体的碰撞体类型。
|
网格体LOD(Mesh LOD) | 选择生成的碰撞体参照的顶点数据的LOD。 |
逐模型节点创建碰撞体(Create Collider Per Model Node) | 开启后,根据模型中每一个模型节点的网格体顶点单独生成一个碰撞体;反之则根据总体网格体顶点生成一个碰撞体。 |
触发器(Trigger) | 新建为触发器刚体。 |
重新创建(Rebuild) | 重新创建刚体。 |
在重建刚体(Rebuild Rigid)选项下选择合适的刚体类型(Rigid Type)和碰撞体类型(Collider Type),然后点击重新创建(Rebuild)按钮。
将上述碰撞体类型(Collider Type)按照性能或者碰撞精确度从大到小排序:
排序方式 | |
---|---|
按性能排序 | 球形几何体 > 胶囊几何体 > 盒子几何体 > 凸包网格体几何体 > 三角形网格体几何体 |
按碰撞精度排序 | 三角形网格体结合体 > 凸包网格体几何体 > 球形几何体 =胶囊几何体 = 盒子几何体 |
新建完毕后,在左侧的树形视图(Tree View)面板中可以看到两个不同颜色的树节点。
节点 | 说明 |
---|---|
蓝色的 box | 刚体节点 |
黄色的 box | 碰撞体节点 |
添加碰撞体
可为刚体添加多个不同的碰撞体。
在树形视图(Tree View)面板中选中刚体节点,鼠标右击 ,选择添加碰撞体(Add Collider)。
在弹出的窗口中进行参数设置后点击确定(OK)按钮完成添加。从指定模型节点创建碰撞(Create From Model Nodes)列表中显示的是当前模型的模型节点,每一个模型节点都包含一组模型顶点数据,可以选择任意一个模型节点来创建刚体碰撞体。
添加完成后即可在树形视图(Tree View)面板和场景(Scene)面板中观察到新附加的碰撞体。
删除碰撞体
删除刚体中不需要的碰撞体。
方法一
从树形视图(Tree View)面板选中需要删除的碰撞体节点,鼠标右击,选择删除碰撞体(Delete Collider),然后在弹出的窗口中点击确定(OK)按钮,即可删除选中的碰撞体。
方法二
在场景(Scene)面板中选择需要删除的碰撞体,按快捷键Delete,然后在弹出的窗口中点击确定(OK)按钮,即可删除选中的碰撞体。
编辑碰撞体
通过编辑碰撞体,可调整碰撞体的位置、旋转、缩放,以及模型的位置及旋转。
切换坐标轴编辑模式
在场景(Scene)面板中选择碰撞体,显示编辑坐标轴。
点击场景(Scene)面板中按钮可切换坐标轴的编辑模式。
也可以通过按下相对应的快捷键(1/2/3/4)来切换坐标轴的编辑模式。
快捷键 | 说明 |
---|---|
1 | 拖动坐标轴改变碰撞体位置。 |
2 | 拖动坐标轴改变碰撞体旋转。 |
3 | 拖动坐标轴改变碰撞体缩放。 |
4 | 切换世界空间坐标系和本地空间坐标系。 |
Shift | 按住Shift拖动可以更精确的修改碰撞体位置/旋转/缩放。 |
调整模型的位置和旋转
当光标放置于场景(Scene)面板中的空白位置处,在平移模式下,鼠标点击并上下拖动,可以上下移动模型;在旋转模式下,鼠标点击并左右拖动,可以左右旋转模型。
点击场景(Scene)面板中按钮可切换模型的编辑模式。
也可以通过按下相应的快捷键(5/6),来切换模型的平移或旋转模式。
快捷键 | 说明 |
---|---|
5 | 上下平移模型位置 |
6 | 左右旋转模型角度 |
编辑刚体属性
通过编辑不同的刚体属性,在物理模拟时可得到不同的物理效果。
在树形视图(Tree View)面板中,选中要进行编辑的刚体。右侧的刚体信息(RigidBody Detail)面板中,会显示刚体属性的设置项。
编辑设置
属性 | 说明 |
---|---|
显示模型(Show Model) | 可以用于隐藏模型来观察刚体碰撞。 |
显示参与模拟的碰撞体(Show Simulate Collider) | 用于开关显示参与物理模拟的几何体信息。 |
显示参与场景查询的碰撞体(Show Scene Query Collider) | 用于开关显示参与场景碰撞查询的几何体信息。 |
显示无效的碰撞体(Show Invalid Collider) | 用于开关显示不参与模拟且不参与碰撞检测的几何体信息。 |
播放模型动画(Play Model Anim) | 用于播放/停止模型动画。 |
通用刚体属性
属性 | 说明 |
---|---|
刚体类型(Rigid Type) | 刚体类型 |
名称(Name) | 刚体名称 |
启用模拟(Enable Simulate) | 指定该刚体是否参与物理模拟。 如果启用模拟(Enable Simulate)== false,刚体不会参与物理模拟。具体表现为与其他参与模拟物体无碰撞,模型位置也不会受到物理的控制。 该设置项并不影响刚体受场景碰撞查询检测。 |
启用控制约束(Enable Control Constraint) | 创建一个关节来约束刚体的运动。(仅支持布娃娃编辑) |
刚体属性
属性 | 说明 |
---|---|
质量(Mass) | 刚体质量。单位为Kg,该值设置的过小或者为0时,模拟会出现抖动或者穿透等现象。 |
无重力(No Gravity) | 无重力(No Gravity) == true时,刚体不再受场景重力影响。 |
CCD | 连续碰撞检测。当刚体运动速度过快,发生类似“隧道效应”穿透其他刚体时,才需要开启该选项。 |
最小位置迭代次数(Minimum Position Iterations) | 该属性定义了刚体受约束控制时的解析精度。 如果刚体受约束控制,发生抖动等不正常表现时,可适当增加位置迭代次数,使刚体变现的更加稳定。 |
最小速度迭代次数(Minimum Velocity Iterations) | 该属性定义了刚体发生碰撞时的解析精度。 如果两个碰撞物体的反弹表现的过于剧烈,可适当增加速度迭代次数,这会使两个物体的分离速度趋近于材质弹性系数定义的结果。 |
质心位置X/Y/Z(只读)(Center Of Mass X/Y/Z (Read Only)) | 这是一个只读属性,用于显示质心在刚体本地空间中的位置。 |
质心偏移X/Y/Z(Center Of Mass Offset X/Y/Z) | 用于偏移刚体质心坐标。 |
惯性张量缩放(Inertia Tensor Scale X/Y/Z) | 刚体原本的惯性系数与刚体质量和重心位置相关。该系数在刚体原有惯性系数基础上进行缩放。 惯性越大,运动状态就越不容易发生改变。 |
支配组(Dominance Group) | 当前定义了0到10号支配组。1到10号支配组之间存在支配关系,数字越大支配等级越高。0号组与其他所有组的支配等级相同。 支配等级高的刚体,相对于等级低的刚体,质量是无限大的。 |
动态属性
属性 | 说明 |
---|---|
运动学刚体(Kinematic) | 如果运动学刚体(Kinematic) == true,当前刚体类型切换为运动学刚体。 如果运动学刚体(Kinematic)== false,当前刚体类型切换为动态刚体。 |
焊接到(Weld To) | 将布娃娃的骨骼焊接到另一个骨骼上,用于代替固定关节的功能(该属性用于布娃娃编辑)。 |
最大角速度(Max Angular Speed) | 刚体的最大角速度不会大于该值。 |
线性阻尼(Linear Damping) | 影响刚体线性速度的衰减速率。线性阻尼越大,刚体会越快的停止线性运动。 |
角阻尼(Angular Damping) | 影响刚体角速度的衰减速率。角阻尼越大,刚体会越快的停止旋转。 |
睡眠阈值(Sleep Threshold) | 这是一个刚体动能阈值,当刚体动能低于该值时,刚体进入睡眠计时,计时结束刚体进入睡眠状态。 |
稳定阈值(Stable Threshold) | 当刚体的质量归一化动能(mass-normalized kinetic energy)低于该阈值时,物体将趋于稳定。这里的稳定指的是场景中大量物体间相互作用的稳定性。 |
编辑碰撞体属性
在场景(Scene)面板或者树形视图(Tree View)面板中,选中要进行编辑的碰撞体。右侧的刚体信息(RigidBody Detail)面板中,会显示相应的属性设置项。
属性 | 说明 |
---|---|
碰撞体名称(Collider Name) | 碰撞体名称 |
碰撞体索引(Collider Index) | 碰撞体索引 |
设为触发器(禁用模拟)(Trigger (Disable Simulate)) | 当设为触发器(禁用模拟)(Trigger (Disable Simulate)) == true时,碰撞体会被转换为触发器碰撞体,当有其他碰撞体进入触发器碰撞体内部时,会产生触发器事件。 |
参与模拟(禁用触发器)(Simulate (Disable Trigger)) | 碰撞体参与物理模拟 |
参与场景查询(Scene Query) | 碰撞体参与场景碰撞查询 |
双面网格体(Double-Sided) | 仅当碰撞体类型为三角形网格体几何体(Triangle Mesh Geometry )时才有效。 双面网格体可以在Mesh内部做场景碰撞查询时,检测到背面三角形的面法线。 |
接触偏移(Contact Offset) | 当两个两个碰撞体距离小于接触偏移(Contact Offset)时,两个物体会产生碰撞。 接触偏移(Contact Offset)必须大于静止偏移(Rest Offset)。 |
静止偏移(Rest Offset) | 两个碰撞体的静止距离,等于它们静止偏移(Rest Offset)属性之和。 静止偏移(Rest Offset)等于0时,两个物体会刚好贴合在一起。 静止偏移(Rest Offset)大于0有利于两个物体相互平滑的滑动,因为这样可以将不规则表面对滑动的影响减到最小。 |
几何体
只有在几何体类型(Geometry Type)为胶囊几何体(Capsule Geometry)、球形几何体(Sphere Geometry)、盒子几何体(Box Geometry)时才会显示此设置项,并且根据几何体类型的不同,几何体(Geometry )显示的属性也会不同。
胶囊几何体
属性 | 说明 |
---|---|
胶囊体半径(Capsule Radius) | 胶囊体半径 |
胶囊体半高(Capsule Half Height) | 胶囊体半高 |
球形几何体
属性 | 说明 |
---|---|
球体半径(Sphere Radius) | 球半径 |
盒子几何体
属性名 | 说明 |
---|---|
盒子长(X)(Box Length (X)) | 盒子长 |
盒子宽(Y)(Box Width (Y)) | 盒子宽 |
盒子高(Z)(Box Height (Z)) | 盒子高 |
坐标
属性 | 说明 |
---|---|
本地空间位置(Local Position) | 碰撞体在刚体本地空间内的位置 |
本地空间角度(Local Angle) | 碰撞体在刚体本地空间内的角度 |
材质
属性 | 说明 |
---|---|
材质文件(Material File) | 物理材质文件路径。 碰撞体会应用物理材质文件中指定的材质属性。 如果未指定物理材质文件,碰撞体才会应用下列材质属性。 |
动态摩擦(Dynamic Friction) | 动摩擦力系数 |
静态摩擦(Static Friction) | 静摩擦力系数 |
摩擦力组合模式(Friction Combine Mode) | 摩擦力组合模式 |
恢复力(Restitution) | 弹性系数 |
恢复力组合模式(Restitution Combine Mode) | 弹性系数组合模式 |
摩擦力/恢复力组合模式
两个不同材质物体碰撞后,两个物体之间生效的组合模式为序号大的混合模式。
finalCombineMode = maximum(material0.combineMode, material1.combineMode)
序号 | 名称 | 说明 |
---|---|---|
1 | 取平均值(Average) | (a + b) / 2 |
2 | 取最小值(Min Value) | minimum(a,b) |
3 | 相乘(Multiply) | a * b |
4 | 取最大值(Max Value) | maximum(a,b) |
事件回调
属性 | 说明 |
---|---|
接触事件(Notify Contact Event) | 当刚体与其他物体碰撞时,是否触发碰撞事件。 |
穿透事件(Notify Overlap Event) | 当刚体穿透其他物体时,是否触发穿透事件。 两物体之间的碰撞响应结果必须都为重叠(Overlap),才能成功触发穿透事件。 |
睡眠事件(Notify Sleep Event) | 当刚体陷入睡眠或者被唤醒时,是否触发睡眠事件。 |
碰撞过滤
属性 | 说明 |
---|---|
碰撞预设(Collision Preset) | 碰撞预设名称。 |
碰撞通道(Collision Channel) | 碰撞通道。 |
碰撞响应(Collision Response) | 对其他碰撞通道类型的碰撞响应。 |
保存/删除/模拟刚体
顶部工具栏提供了相应的按钮功能。
按钮名称 | 说明 |
---|---|
删除(Delete) | 清空已编辑的刚体,并删除资源文件。 |
另存为(Save As) | 另存为当前编辑的刚体。 |
保存(Save) | 保存当前编辑的刚体。 |
模拟(Simulate) | 模拟当前编辑的刚体。 |
凸包分解
点击场景(Scene)面板空白处,可在刚体信息(RigidBody Detail)面板中看到凸包分解(Convex Decomposition)的相关属性。凸包数过多,分解精度过高,都会严重影响碰撞生成的速度。
属性 | 说明 |
---|---|
最大凸包数量(Max Hulls) | 模型中每一个网格体可生成的最大凸包数量。 |
凸包最大顶点数(Max Hull Verts) | 分解出的每一个凸包可生成的最大顶点数量。 |
凸包精确度(Hull Precision) | 生成凸包顶点的精确度,数值越大,生成的凸包越精确。 |
重新创建(Rebuild) | 根据当前设置生成碰撞。 |
默认(Default) | 恢复默认设置。 |