形状
当身体模拟各种类型的身体行为时,形状表示身体所占据的空间量。物理模拟的对象通常具有一个主体和一个或多个形状,这些形状允许对象彼此碰撞(因此,形状通常称为碰撞形状)。具有形状的物体也会在重力作用下掉落,从静态表面反弹或沿其滑动。没有分配单一形状的物体的行为类似于虚拟物体,可以使用关节连接到其他物体,但是不会碰撞并且不受重力的影响。
基本形状类型如下:
- 简单图元。它们非常快速且内存高效。应尽可能使用简单的原语。
- 复杂的碰撞形状,由三角形组成。这些形状较慢,对内存的要求更高。
简单的原语使碰撞计算更容易,同时保持高性能和准确性。凸包可提供更高的精度,但是,这种类型的形状无法进行连续碰撞检测。因此,不应该将凸包用于快速移动的对象。
形状的数量应尽可能保持低。否则,繁琐的物理计算会降低性能。
没有身体就无法创建形状,并且在世界坐标中没有自己的位置。始终将其分配给主体并相对于它定位。
也可以看看#
编程实现:
- Shape class
- ShapeSphere class
- ShapeCapsule class
- ShapeCylinder class
- ShapeBox class
- ShapeConvex class
- 物理视频教程的片段说明了形状的概念。
形状参数#
所有形状,无论其类型如何,均具有以下通用参数
Enabled | 一个标志,指示是否启用了形状。 |
Continuous | 一个标志,指示是否对形状启用了连续碰撞检测。 连续碰撞检测仅适用于球形和胶囊形。 |
Mass | 形状的质量。改变质量会影响密度,密度是通过将质量除以形状体积而得出的。如果有几种形状分配给主体(例如一组凸包) |
Density | 形状的密度。更改密度会影响质量,质量是通过将形状体积乘以密度来计算的。 |
Friction | 形状的摩擦系数。定义形状表面的粗糙度。值越高,形状滑动的趋势越少。
如果对象包含 surface 和形状(均具有指定的摩擦参数),则仅使用形状的参数。 |
Restitution | 恢复形状的系数。定义碰撞时形状的弹性。
如果对象包含 surface 和形状(都具有指定的恢复参数),则仅使用形状的参数。 |
Position | 形状在 body 坐标中的位置。 |
Rotation | 在 body 的坐标中旋转形状。 |
Physics Intersection mask | Physics Intersection形状的位掩码。 |
Collision mask | 形状的碰撞位掩码。此蒙版用于指定形状与其他形状的碰撞。 |
Exclusion mask | 形状的排除位掩码。此蒙版用于防止形状与其他形状发生碰撞。 |
我們的物理視頻教程包含形狀參數的概述,並闡明瞭如何使用Exclusion和Collision蒙版。
添加形状#
要通过 UnigineEditor 添加形状,请执行以下步骤:
- Open the World Hierarchy window
- 选择要为其分配物理形状的对象。
- 转到菜单中的Physics标签Parameters窗口,然后为选定的对象分配物理主体:刚性主体,布娃娃主体或虚拟主体。
- 在下面的Shapes部分中,选择适当的形状类型,然后单击Add。
- 设置必要的形状参数。
您可以通过选中Helpers面板→Physics项目→Shapes选项(应启用Visualizer)来启用形状的可视化。
领域#
球体是最简单,最快的形状,因为它只有一个参数:半径。连续碰撞检测可用于球形。因此,即使在高速移动时也避免穿过其他物体。
将球形用于任何任意网格可确保始终检测到其碰撞。
要使形状适合您的对象,可以调整球体的 Radius 。
胶囊#
胶囊也是一种非常快速的碰撞形状,具有连续碰撞检测功能。胶囊便于拉长物体(支柱等)和类人动物角色,因为它使它们可以平稳地上下楼梯,而不会在每个步骤中绊脚(如果步骤不太高)。它还可以确保角色的肢体不会意外卡在某处。
要使形状适合您的对象,您可以调整胶囊的半径和高度。
圆筒#
圆柱可用于近似具有平坦端部的细长形状(例如,杆,塔等)。类似于盒子形状。
要使形状适合您的对象,可以调整圆柱的半径和高度。
框#
盒子是一个长方体形状,可用于近似各种对象的体积。它适用于墙壁,门,楼梯,机械零件,车身以及许多其他物体。每个尺寸的盒子形状的长度都可以任意选择。
为使形状适合您的对象,您可以沿每个轴调整框的大小:Size X, Size Y, Size Y。
凸包#
Convex hull是所有形状中最慢的,用于具有复杂几何形状的对象。创建的形状将始终是凸形的,即,在生成凸包时,将忽略网格的孔和腔。而是将它们包含在形状体积中。凸形是可以包围近似网格顶点的最小形状。
要生成凸包,请指定一个近似误差值:
使用Approximation error参数可以减少所创建形状的顶点数量。顶点数量少的简单且粗糙的凸包处理速度更快,因此,建议将顶点数量保持尽可能低。
- 通过值 0 ,形状精确地复制了网格;它的全部体积都封闭起来。
- 值越高,所创建的形状中的顶点越少,但是跳过的细节越多。
近似错误= 0
|
近似误差= 0.1
|
自动生成#
要近似复杂的凹形对象并从其体积中排除腔,请使用组自动生成的凸形壳。
要添加一组自动生成的形状,请指定以下参数:
Recursion depth确定网格分解的程度。如果提供 0 或负值,则只会创建一个形状。值更高,将生成更多凸形
Approximation error可以减少所生成形状的顶点数量。顶点数量少的简单且粗糙的凸包处理速度更快,因此,建议将顶点数量保持尽可能低。
- 通过值 0 ,形状精确地复制了网格;它的全部体积都封闭起来。
- 值更高,创建的形状中存在少个顶点,但是跳过了更多详细信息。
Merging threshold确定分解后合并凸形的体积阈值,可用于减少生成的形状的数量:较高的值,较小的凸形是