This page has been translated automatically.
视频教程
界面
要领
高级
实用建议
专业(SIM)
UnigineEditor
界面概述
资源工作流程
设置和首选项
项目开发
调整节点参数
Setting Up Materials
设置属性
照明
Sandworm
使用编辑器工具执行特定任务
如何擴展編輯器功能
嵌入式节点类型
Nodes
Objects
Effects
Decals
光源
Geodetics
World Nodes
Sound Objects
Pathfinding Objects
Players
编程
基本原理
搭建开发环境
使用范例
C++
C#
UnigineScript
UUSL (Unified UNIGINE Shader Language)
Plugins
File Formats
Materials and Shaders
Rebuilding the Engine Tools
GUI
双精度坐标
应用程序接口
Containers
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Objects-Related Classes
Networking Functionality
Pathfinding-Related Classes
Physics-Related Classes
Plugins-Related Classes
IG Plugin
CIGIConnector Plugin
Rendering-Related Classes
创建内容
内容优化
Materials
Material Nodes Library
Miscellaneous
Input
Math
Matrix
Textures
Art Samples
Tutorials
注意! 这个版本的文档是过时的,因为它描述了一个较老的SDK版本!请切换到最新SDK版本的文档。
注意! 这个版本的文档描述了一个不再受支持的旧SDK版本!请升级到最新的SDK版本。

Rope Body

Rope body 可以对绳索、电缆、电线等进行物理模拟。绳索可以固定到以下类型的物体上:

要将绳索固定到物体上使其自由悬挂,或将多个物体绑在一起,请使用 Particles jointRope body 可以撕成 Cloth body。绳索增强了模拟环境的真实感,并在替代动画时节省了游戏美术师的时间。但是,这种类型的身体的模拟成本相当高,强烈建议使用距离优化以避免性能下降。

注意
Rope body 只能分配给 Mesh Dynamic 对象。

也可以看看#

网格要求#

Rope body 唯一可接受的网格类型是圆柱体。您可以使用标准的原始圆柱体来创建绳索。本案例的流程如下:

  1. 在菜单栏中单击 Create -> Primitive -> Cylinder
  2. 为圆柱体指定所需的绳索参数(长度,半径),例如:

    Create Cylinder

  3. 点击 OK 并将圆柱体放置在世界的某个地方。它被创建为一个 静态网格 对象。对象本身可以被删除,但是它的网格仍然在 data/ 件夹中可用。
  4. 创建一个动态网格 对象,并使用圆柱体网格。
  5. 将绳子体分配 给创建的动态网格对象。

质量弹簧仿真模型#

Rope body 被建模为位于网格顶点的一组点质量(粒子)。每个粒子都用球体形状表示,并通过位于网格边缘的内部弹簧接头与其他粒子连接在一起。一方面,内部关节允许重新创建网格拓扑,另一方面可以限制拉伸和折叠。

Mass-Spring Simulation Model

每个粒子都以位置、质量和速度为特征,并具有恒定的球形,并具有一组半径.总数大量的全身的能量在他们中间平均分布。根据牛顿第二定律,粒子可以通过力量冲动由内关节和外力施加(碰撞,重力、空气阻力、风力等)。

不计算粒子的自碰撞和不同绳体之间的碰撞。但是,如果选中 Collision 框,绳索会通过与其他物理物体碰撞来与环境相互作用。它在接触情况下的行为由以下参数控制摩擦归还.选择性的物理交互可通过相应的位掩码.

因此,Rope body 可以被视为刚性粒子的约束系统,因此与 Rigid body 共享一些参数:

粒子半径#

正如已经提到的,每个粒子都是一个具有设定半径的球体。因此,粒子使用连续碰撞检测.绳子永远不会平放在地上或紧紧地粘在表面上。总是有一个等于粒子半径的间隙。

由于不计算粒子之间的碰撞,因此在设置半径时不应考虑它们:

  • 对于更稳健的行为,更高的值更可取。但是,太大的半径可能会导致与环境的不正确交互(绳索抽搐或炸毁)。
  • 较低的值会减少 Rope body 和表面之间的间隙。但是,半径太小会导致碰撞处理不佳。
注意
物体可以通过绳子,当粒子半径很小,绳子是拉伸.原因是仅对位于绳网顶点的粒子球体进行连续碰撞检测。

关节求解器迭代#

迭代次数控制着绳内节解的精度。此数字表示每个关节求解的次数物理框架.关节以随机顺序求解,以提供更可预测的拉伸结果。

  • 迭代次数少可加快模拟速度。然而,在这种情况下,绳子更容易拉伸,看起来更有弹性。最小值为 1
  • 大量的迭代提供了更准确的约束解决方案。在这种情况下,绳子看起来更硬。最大值为 16

    注意
    增加迭代次数是相当昂贵的,并且在某些时候不再带来明显的好处,因此应将其保持在合理的成本效益范围内。

增加迭代次数可能有助于避免绳索抽搐。

拉伸和折叠#

绳索可能会因拉伸折叠而变形。这些变形由两种类型的关节约束控制:

通过这些类型的约束,可以获得所需的绳索外观和感觉,并模拟各种不同的可变形材料,从硬金属线到弹性橡胶绳。

线性恢复#

线性恢复决定了绳子粒子可以相互拉开多远。它强制使用绳索接头来恢复原始网格顶点之间的距离:

  • 1的最大值,粒子回弹力很大,绳子很难拉伸。它提供了坚硬的非拉伸绳索的效果,例如金属丝。
  • 值越低,颗粒越容易彼此远离并且绳索的可拉伸性和弹性越大,例如橡胶绳。

    注意
    0 和接近零的值是不允许的,因为它们会导致模拟不稳定和绳子爆炸。

角度恢复#

角度恢复决定了由粒子形成的绳索三角形之间可能的角度。它通过强制关节保持原始网格的三角形之间的角度来约束绳索的折叠:

  • 通过 1 的最大值,角度趋于保持并且绳索抵抗折叠。绳子看起来很硬。

    注意
    最大值可能会提供不稳定的行为。
  • 通过 0 的最小值,无论网格的原始拓扑如何,绳索都可以轻松地向任何方向折叠和弯曲。
注意

如果绳索太有弹性和弹性,请尝试以下方法之一:

  • 将线性恢复设置为 1
  • 增加关节求解器的数量迭代.
  • 使用顶点较少的网格。

运动刚性#

Rigidity 参数是绳索运动的附加约束,使其更硬和更不灵活。为此,每个绳索粒子的线速度和角速度根据为所有粒子插值的总速度进行校正。

  • 0 的最小值,使绳索有弹性、柔韧且容易变形。
  • 1 的最大值,使绳索更硬,不易变形。

撕裂#

当绳索被拉伸或折叠超过其弹性极限时,它会撕裂并撕成碎片。撕裂是由施加力或与物理身体碰撞引起的,取决于绳索的刚度(由控制线性角度恢复参数)。绳索仅沿绳索三角形的边缘撕裂,分裂网格顶点并复制粒子。

注意
如果撕裂的绳子掉在一个平面上,它们会引起 Z-fighting。

线性阈值距离#

线性阈值设置距离限制伸展绳子。当两个粒子彼此远离的距离超过此限制时,连接它们的关节会断裂并出现撕裂。

  • 如果设置为无穷大 (inf),绳索会被拉伸而不会撕裂。该值是默认设置的。

角度阈值角度#

与线性阈值相同,角度阈值表示最大角度折叠绳索相对于其初始状态。

  • 如果设置为无穷大 (inf),绳索会折叠而不撕裂。该值是默认设置的。

    注意
    建议保持角度阈值低于或等于 180 度。

优化仿真#

更新每一帧远离相机的大量物体,这些物体几乎无法区分或观察为质量是一种资源浪费。

为了提高性能并避免过度负载,可以对绳索进行模拟更新了降低的帧率.当玩家离开 Update Distance Limit 指定的区域时,绳索停止更新并静态冻结。

下面给出的一组帧速率使您能够指定在对象可见、仅其阴影可见或根本不可见时应更新绳索模拟的频率。

Parameters -> Physics 选项卡 → Periodic Update 部分
FPS When Object Is Rendered To Viewport 对象渲染到视口时的更新速率值。
FPS When Only Object Shadows Are Rendered 当对象本身在视锥体之外时更新速率值,并且只有它的阴影被渲染到视口。
FPS When Object Is Not Rendered At All 当对象及其阴影都未渲染到视口时更新速率值。
Update Distance Limit 对象应更新到的距离相机的距离。
注意
这些值不是固定的,引擎可以随时调整以确保最佳性能。

此功能使用默认设置启用,可确保最佳性能,并且可以在 UnigineEditor 中或通过 API 在运行时针对每个对象进行调整。

警告
请注意,在应用程序的逻辑中应仔细考虑对对象使用降低的更新帧速率,因为这可能会导致渲染 Mesh SkinnedMesh Dynamic 的各种问题(由于未对齐而闪烁,例如在将绳索连接到 Mesh Skinned 的情况下)。

分配绳体#

通过将 Rope body 分配给对象统一编辑器执行以下步骤:

  1. 打开 World Hierarchy 窗口。
  2. 选择一个动态网格要为其分配 Rope body 的对象。

    注意
    确保对象的网格满足要求
  3. 转到 Parameters 窗口中的 Physics 选项卡并分配一个物理身体通过选择 Body -> Rope 到选定的对象。

    Adding a body

  4. 如有必要,设置主体的名称并更改其他参数。

系绳#

Rope attached to a Mesh Skinned

连接到动画角色的绳索

绳索可以连接到以下类型的身体:

要将绳索连接到身体,请使用 Particles joint。在 Rigid body(静态或动态)和 Dummy body 的情况下,固定粒子保持固定在它们的位置,并跟随用它拉动绳索的附加对象的变换。

  1. 选择 Rigid body, RagDoll bodyDummy body
  2. 添加 Particles joint
  3. 指定 Rope body
  4. 使用 Particles jointThresholdSize 参数调整固定区域。
注意
为了确保稳定的模拟,重要的是设置适当的绳索和附着体的质量。不平衡的质量可能会导致绳索接头抽搐。

附加到蒙皮网格#

令人信服的模拟 Mesh Skinned 角色上的绳索需要不同的方法。为了跟随骨骼变换,在 Particles joint 区域中找到的绳索的每个顶点都映射到最近的 Mesh Skinned 顶点(最多由粒子关节的 Threshold 参数指定的距离)。

注意
不建议将绳索直接连接到 Mesh Skinned 字符,因为拓扑不同可能会导致视觉伪影。相反,最好在 Mesh Skinned 角色上创建一个相同的绳索表面,使其不可见并在其上附加一条物理绳索。

例如,我们需要创建一根绳子,它粘在 Mesh Skinned 角色的手上,而绳子的其余部分则悬垂并松散地移动。它是通过以下步骤完成的:

  1. 创建 Mesh Skinned 时,添加与需要固定的剪裁部分相同的绳段表面。在我们的例子中,它是手中的绳索部分。
  2. 添加 Mesh Skinned 具有布娃娃分配的机构。确保启用绳段表面。
  3. 添加单独的动态绳索网格并将其位置与 Mesh Skinned 角色同步。关闭物理模拟 (CTRL + SPACE) 和分配Rope body
  4. Rope bodyRagDoll body。如果粒子关节的 Threshold 距离设置得足够低,则物理绳索将自动仅附加到绳索段表面(即手)。之后,绳段表面被简单地禁用并且根本不提供任何负载。
最新更新: 2022-10-10
Build: ()