编注:本系列教程基于Katax Emperore与Devin Sherry的《Unreal Engine Physics Essentials》一书整理并补充,同时将相关引擎操作与参数说明从原4.7.6更新到4.22。Part 2包含内容如下:(1)Physics Assets的创建;(2)Physics Assets编辑器详解。本系列适用于UE4初学阶段或美术向的参量功能查询。转载请标明出处。
教程系列目录:
Part 1:数学与物理基础
呆晒晒:UE4物理精粹Part 1:数学与物理基础zhuanlan.zhihu.comPart 2:Physics Assets Tool(11.11更新)
Part 3:碰撞(11.13更新)
Part 4:约束(11.15更新)
Part 5:物理阻尼与摩擦(11.17更新)
Part 6:实践A:基础载具蓝图实现(11.19更新)
Part 7:实践B:基础破碎效果实现(11.21更新)
本篇教程配套资源:
引擎自带Third Person案例
通过Physics Assets,我们可以学习如何通过游戏世界中存在的物理规律来模拟现实。它是一种动画表现,但比传统动画更具逻辑性。
一、Physics Assets的创建
UE4中,Physics Assets是基于Skeletal Mesh资产的,用于定义其所使用的物理和碰撞。Physics Assets由两部分组成:Physical Body和Constraint,并构成一个独立的Ragdoll个体(除了人型Ragdoll,还包括载具等形式)。其创建方式有三种:
1.1在导入Skeletal Mesh资产时创建
向UE4中导入Skeletal Mesh时,在FBX Import Option中,通过勾选Create Physics Asset可以自动创建对应Physics Asset。但引擎自动创建的Physics Assets在Physics Bodies分布及约束设置等方面表现不尽理想,故除非需要大量创建且精度要求不高,否则不建议直接使用自动生成资产。
1.2直接新建资产
通过Content Browser->Add New->Physics->Physics Asset,并指定Skeletal Mesh可创建对应Physics Asset。过程中需要进行创建设置:
Min Bone Size-仅创建骨骼长度大于该值的Physics Body。 Primitive Type-创建Physics Body时使用的几何体形状。其可选项包括Box、Capsule、Sphere、Tapered Capsule*(4.20引进,仅用于布料,不用在刚体中)、Single Convex Hull(每骨骼生成1个凸包体)和Multi Convex Hull(每骨骼生成多个凸包体)。 Vertex Weighting Type*-将模型顶点近似为Physics Body时,它们对于骨骼的映射方式。其可选项包括Any Weight(任意权重)和Dominant Weight(所主导的权重)。
Auto Orient to Bone-是否将所创建的Physics Body与其所属骨骼的朝向对齐。 Walk Past Small Bones*-是否直接忽略小骨骼,而非与临近骨骼进行融合。 Create Body for All Bones-强制为每个骨骼都创建Physics Body。 Disable Collisions by Default-默认条件下是否禁用Bodies间的碰撞。 Min Weld Size*-小于该值的Shape会被融合到最高层级Body中 Hull Count-当Primitive Type为Multi Convex Hull时,每个骨骼的最大包体生成数。 Max Hull Verts-当Primitive Type为Single Convex Hull或Multi Convex Hull时,每个包体的最大顶点数。 Create Constrains-是否在临近的Bodies之间创建约束 Angular Constraint Mode-角约束的模式:Free/Limited/Locked。
1.3通过已有的Skeletal Mesh资产创建
右击需要创建Physics Asset的Skeletal Mesh(可多选),在弹出菜单的Skeletal Mesh Actions->Create->Physics Asset->Create中可以创建所需资产,其设置与1.2节一致。
需要注意的是,Skeletal Mesh Actions->Create->Physics Asset->Create and Assign操作会自动将生成的Physics Asset赋予对应的Skeletal Mesh。
二、Physics Assets编辑器详解
编注:Physical Animation Profile及Linear/Angular Motor有关内容详见后续更新。
Physics Assets中有三个主要成分:Shape、Body和Constraint。其主要联系在于,一个或者多个Shape对应一个Body,而Contraint决定了Bodies之间的运动关系。
Body Physics Type是物理模拟中的重要属性。分为Default、Kinematic和Simulated三类。该参数可以在Skeleton Tree的Body右键菜单或者细节面板中设置。
Default:跟随父部件的设置。 Kinematic:跟随骨骼的动画数据。 Simulated:跟随物理模拟数据。
2.1 工具栏
Save-保存当前设置。 Browse-在当前的Content Browse中定位该资源。 Preview Mesh-修改主操作视图中的Mesh。 Preview Animation-选定预览动画。 Reference Pose-清除当前骨骼上所有修改,恢复到默认姿态(此处为APose)。 Create Asset-创建相关资产:除了BlendSpace、AimOffset和常规Anim Assets,此处可以根据物理模拟结果的Pose创建相关Anim Sequence或者Pose Asset。 Enable/Disable Collision-开启/关闭所选Bodies之间的碰撞。 Physical Material-为所有Bodies指定物理材质。 内置约束预设-为当前所选中的约束设置其内置类型:球关节型类约束(全方向自由旋转)、铰链型约束(单方向旋转自由)、固定约束(全方位约束)和骨骼型约束(基本符合生物生理性的常用设置)。
Simulate-开启模拟:可选全骨骼模拟、当前选中骨骼模拟和无重力环境模拟。
2.2 骨骼层级图
展示了全部的骨骼层级与对应的Physics Bodies与约束信息。
Filtering Flattens Hierarchy-将层级结构全部展平。 Hide Parents When Filtering-在搜索时是否显示搜索结果的Parents。 Show Bodies-在层级图中显示Bodies。 Show Constraints-在层级图中显示约束。 Show Primitives-在层级图中显示原始Shape(Box、Sphere、Capsule等)。 Show All Bones-在层级图中显示所有骨骼(非当前Mesh的骨骼图标为灰色圆圈)。 Show Mesh Bones-仅显示用于当前Mesh的骨骼。 Show LOD Bones-显示用于LOD展示的骨骼。 Show Weighted Bones-仅显示对顶点有权重影响的骨骼(用于IK控制的骨骼会隐藏)。 Hide Bones-在层级图中隐藏所有骨骼。
Copy Selected Bone Name-复制当前骨骼名称,常用于填写蓝图中交互信息等。 Reset Selected Bone Transforms-重置所选骨骼Transform信息。 Add Preview Asset-给当前骨骼增加预览资产。 Remove All Attached Assets-移除所有骨骼上绑定的预览资产。 Add/Replace Bodies-根据Tools面板中的设置,新增或替换当前骨骼的Bodies。 Add Shapes-新增原始Shape。 Select All Bodies-选择Skeleton Tree中所有Bodies。 Select All Constraints-选择Skeleton Tree中所有约束。 Toggle Selection Type(Ctrl+T)-选择类型的快速切换:如果当前所选为Body,则切换到对应的Constriant,反之亦然。(这个操作在骨骼右键菜单中是无效的。)
Regenerate Bodies-根据Tools面板中的设置重新生成Bodies。 Add Shape-增加Body名下的Shape。 Collision-下分焊接(Weld)操作与设置碰撞操作:焊接操作允许将所选的多个Bodies的Shape移动到最高层级的Body下,故该命令可执行的前提为所选Bodies存在层级关系。设置碰撞关系命令与工具栏中Enable/Disable Collision命令相同。 Constraint-新建Body之间的约束关系,注意只能是父->子单向创建。 Physics Type-设置Body Physics Type或者统一设置子Body的Physics Type。 Physical Material-为该Body指定Physical Material。 Copy/Paste Properties-将Body的属性复制给另一个Body(包括所属Shape等),仅支持同一Physics Asset内的操作。 Delete/Delete All Bodies Below-删除该Body/删除所有子Body ☆Mirror-将当前Body的Shape及其设置镜像到对称Body上。约束轴向需要调整。 Assign/Unassign*-将Body指定到Physical Animation Profile中/从中取消。 ☆Copy Collision From StaticMesh-从StaticMesh文件中导入Collision,用于部分非规则碰撞体的导入。
Snap-吸附:将Constraint吸附到对应的Skeleton上,同时朝向也会被统一。
Reset-重置约束轴。用于约束轴的朝向重置。
☆ Axes and Limits-约束轴与约束范围设置,可在选中约束的情况下使用快捷键快速设置:数字键1-3分别表示三个轴向在Limited和Locked之间的切换;数字键4表示轮流激活约束轴;字母Q键表示轮流切换约束轴朝向。
Convert-设置约束预设:与工具栏中的约束预设相同。 Copy/Paste Properties-将约束的属性赋值给另一个约束(包括轴朝向与约束范围)。 Delete-删除约束。 Assign/Unassign*-将Body指定到Physical Animation Profile中/从中取消。
2.3约束关系图表
约束关系图表直观展示了Physics Asset中Body之间的约束联系。每个节点的右键展示菜单与Skeleton Tree中相同。Body节点的输出引脚可以新建子约束;约束节点按照“子节点:父节点”的格式来显示两个Body之间的从属关系。当设置了Physical Animation Profile时,透明节点表示了未接入任何Profile中的节点。
2.4 细节面板
2.4.1 Body细节面板
Body的细节面板由Physics、Collision和Body Setup三部分组成。
MassInKg-以千克为单位的Body质量,默认情况下是基于物理材质和Body的体积自动计算的,必要时可以实现覆写。 Linear/Angular Damping-线性/角阻尼率设置,可用于模拟在水体或者泥浆中的运动。注:刚体的线性动量或者角动量的减损程度是由阻尼率(Damping Rate)来控制的。PhysX SDK中定义了线性阻尼与角阻尼两个参量来描述这种变化 [1]。当物体运动时,物体会受到的线性阻尼力。类似地,物体所受到的阻尼扭矩。Enable Gravity-开启Body的重力影响。 Physics Type-设置Body的物理类型。 Double Sided Geometry-SceneQuery时是否开启双面设置。常用于需要被双面扫描的Plane或者单面的面片(注:PhysX在PxScene中使用Scene Query来检测场景中的碰撞。Query有三种类型: Raycasts(射线检测), sweeps(扫描检测)和overlaps(重叠检测) [2])。 Simple Collision Physical Material-为Body的简单碰撞(即涉及Basic Shape和吐包体的碰撞)应用物理材质,定义了摩擦力与密度等数据。 Start Awake-当Simulate Physics开启时,是否在游戏初始化时就在模拟状态(比如,如果为F,设置为受重力的Cube会一直保持悬浮直到外力来干扰。) Center Of Mass Offset-质心偏移量。 Mass Scale-该Body的质量缩放系数。 Max Angular Velocity-最大角速度。 Sleep Family-定义该Body多长时间停止模拟物理。该参数包括两种预设:Normal和Sensitive。Normal是最常用的设置,但是往往停止得非常突然,有可能在物体圆弧运动或者钟摆运动的最高点错误地停止模拟物理;而Sensitive的睡眠阈值更低,正可以弥补这些情形,比如用于钟摆和台球。 Generate Wake Events-是否在物体开始模拟或者停止模拟时触发Wake/Sleep事件。 Max Depenetration Velocity-最大穿透速度:和其他Mesh存在穿插时,物理引擎会在运行时尝试将其分开,这个速度值就是用户限定的分开时最大速度。
Inertia Tensor Scale-惯性张量的缩放系数:对于同一物体,不同的旋转轴具有不同的转动惯量,除非物体关于所有轴都对称。惯性张量则是针对某物体的转动惯量的概括,一般依照质心为参考。数值越大表示围绕该轴越难发生旋转。 Walkable Slope Override-可行走斜坡的参量覆写:包括Walkable Slope Behavior和Walkable Slope Angle两个部分。Walkable Slope Behavior分为Unchanged(忽略Walkable Slope Angle)、Increase(增加可行走坡度阈值)、Decrease(降低可行走坡度阈值)和Unwalkable(不可爬坡)。默认Character Movement Component Walkable Floor Angle为45°。
Custom Sleep Threshold Multiplier-自定义睡眠阈值增益:当Sleep Family=Custom时,会在Natural Sleep Threshold的基础上乘这个增益值,值越大越容易进入休眠。 Stabilization Threshold Multiplier*-稳定性阈值增益:值越大越稳定,但有可能在低速时失去动量。为0时即为稳定性禁用。 Position/Velocity Solver Iteration Count-解算器的迭代数量,数值越高越消耗CPU,但模拟表现更稳定。
Simulation Generates Hit Events-在物理模拟时,物体被撞击是否触发事件。 Phys Material Override*-物理材质覆写。 Collision Response-该Physics Body是否与外界或其他Bodies产生碰撞反应。
Use CCD-是否开启Continuous Collision Detection(连续碰撞检测):开启的话会增加CPU消耗,但能使物理碰撞更加精确。
Skip Scale from Animation-是否忽略来自动画中的缩放数据:针对呼吸等微妙的缩放动画,可以开启此项以保持物理碰撞不变。 Primitives*-Body下属所有Base Shape的属性设置:包括坐标、旋转轴、尺寸、名字、是否参与重量计算等。 Bone Name-Body所属的骨骼的名字。 Consider for Bounds*-是否将此Body考虑进Skeletal Mesh的包围盒计算。
2.4.2 Constraint细节面板
Joint Name-该约束的关节名称。 Constraint Bone 1/2-Child/Parent骨骼。 Disable Collision-是否关闭该约束所涉及的Bodies之间的碰撞。 Enable Projection-在一些极端运动条件下(两个物体的距离或者旋转的误差过大时),PhysX的动力学解算器无法准确计算约束结果。PhysX提供了Kinematic Projection来使其重新对齐(尽管这是违反约束条件的)。这种Projection不属于物理过程,不会保留动量信息,也不会遵循碰撞体的几何形状。除非伪影问题严重影响模拟质量,否则不建议开启 [3]。距离误差和旋转误差默认分别为0.1个单位和10个单位。 Projection Linear/Angular Tolerance*-投影的距离/旋转容限。 Parent Dominates-Constraint中Parent是否受Child的运动影响。
X/Y/Z Motion-沿着指定轴的线性约束设置:无约束/受限约束/不可移动。 Limit-受艰距离。随着设置为Limited的轴的增加,受限范围依次从线、圆变化到球体。 Scale Linear Limits*-是否允许缩放线性受限距离:开启时会受到Parent的缩放值影响。 Soft Constraint-是否开启软约束(类弹簧) Stiffness-软约束的硬度值。 Damping-软约束的阻尼系数。 Restitution-恢复系数:在约束关系被破坏时的恢复系数。数值为1时表示以相同速度反弹,0表示立刻停止。仅在至少有一个轴为Limited且软约束关闭时开启。 Contact Distance-关节被分离的极限距离。越大的值越耗性能。仅在至少有一个轴为Limited时开启。 Linear Breakable-是否可用线性力破坏关节。 Linear Break Threshold-破坏距离约束所需的力的阈值。
Swing 1/ Swing 2/Twist Motion-沿指定轴的旋转约束:无约束/受限旋转/不可旋转。 Swing 1/ Swing 2/Twist Limit-受限约束范围。 Soft Constraint-是否开启软约束(类弹簧) Stiffness-软约束的硬度值。 Damping-软约束的阻尼系数。 Restititution-恢复系数:在约束关系被破坏时的恢复系数。数值为1时表示以相同速度反弹,0表示立刻停止。仅在至少有一个轴为Limited且软约束关闭时开启。 Contact Distance-关节被分离的极限距离。越大的值越耗性能。仅在至少有一个轴为Limited时开启。 Angular Breakable-是否可用角向力破坏关节。 Angular Break Threshold-破坏关节所需扭矩阈值。
2.5 Tools面板
Tools面板与创建Physics Asset面板参数相同,见本章1.2。
拓展资料:
Rigid Body Dynamicsdocumentation.help Joint Basicsdocs.nvidia.com历史读物:
呆晒晒:Gears of War 4中的高性能动画技术zhuanlan.zhihu.com参考
- ^Rigid Dynamics-NVIDIA PhysX SDK Guide https://documentation.help/NVIDIA-PhysX-SDK-Guide/RigidDynamics.html
- ^Scene Queries-NVIDIA PhysX SDK 3.4.0 Documentation https://docs.nvidia.com/gameworks/content/gameworkslibrary/physx/guide/Manual/SceneQueries.html
- ^Joint Basics-NVIDIA PhysX SDK 3.4.0 Documentation https://docs.nvidia.com/gameworks/content/gameworkslibrary/physx/guide/Manual/Joints.html