物理

使用准备

为了在场景中启用物理,请使用在Blender场景选项卡下 Physics 面板的 Enable Physics 复选框。

_images/scene_interface_phys_enable.png

静态物理类型

可以用来限制其他物体的运动,例如与地形、墙壁碰撞等。在物理学中的此类物体的 Static 值 (默认设置) 设置应选择 Physics Type 选项。

_images/physics_panel_static.png

一个网格可以分配到一个或多个物理材质。根据 Material 面板的 Special: Collision 选项卡必须被激活。

_images/material_panel_physics.png

Ghost 选项排除物理相互作用的材质,但仍将通知应用它的接触。示例 - 检测角色坐在垂直梯子上。

_images/water_tower.png

Collision ID 的字段用于检测与指定的材质碰撞,可以留空。 Collision ID 用法的一个示例,检测地形表面的角色位于-草,沙子,木制涂层等等。

Margin 字段允许自定义在哪里网格的碰撞区域的宽度。此选项提高了物理碰撞模拟稳定性。

还有,在此面板中有一些材质物理设置。支持以下设置: Friction, Elasticity.

Collision Group 字段对应于材质属于的物理组。Collision Mask 字段定义这种材质将与之交互的所有物理组。

动态物理类型

专为刚体运动仿真。

_images/physics_dynamic.png

Object Physics 复选框必须在物体 Physics 面板下启用。Collision ID 字段用于检测与特定的物体的碰撞 (例如,用于检测FPS 角色和不同项目接近程度),可以留空。

在这样一个物体的 刚体 (旋转)或 Dynamic (不旋转)的值的物理设置可以在 Physics Type 选项选择。在 Collision Bounds 设置碰撞体类型可以选择 - 支持的类型有:BoxCapsuleSphereCylinderCone 。同时,下面的物理参数可以设置:MassDamping - 为 TranslationRotation

Collision Group 字段对应于物体所属的物理组。

Collision Mask 字段定义此物体将与之交互的所有物理组。

_images/physics_panel_dynamic.png

这类物体的材质支持 FrictionElasticity 。当多个材质广泛应用于一个单独的网格时,物理参数取自其中的第一项。

因为相机物体 Physics Type = Dynamic 参数必须使用,并且必须启用 Object Physics 复选框。

约束

物理约束用来限制物体的自由度。

_images/physics_constraints.png

向物体添加物理约束 (Rigid Body Joint) 可以在 Object Constraints 面板上执行 。受支持的类型 (Pivot Type) 是: Ball, Hinge, Cone Twist, Generic 6 DoF. 物理约束可以添加到两个相互作用的物体之一,而另一个物体作为 Target 。这两个物体可以有静态和/或动态的物理类型。在约束 (除外 Ball) ,可以设置的平移和旋转的限制。

_images/physics_constraints_panel.png

轮式的车辆

车辆的模型必须包含 6 单独的物体 - 机箱、 4 个轮子和一个方向盘。机箱的网格中心应该对应于质量的中心。车轮对和方向盘的中心网格应位于旋转轴。方向盘应该面向在本地空间的坐标 -X-旋转轴,Y-向右和 Z-向上。该物体可以具有任何名称。

_images/physics_vehicle_wheeled.png

所有的6个物体 ︰ 选择 Part,在 Vehicle Name 字段中指定相同的 id,选择正确的物体类型- Chassis, Steering Wheel, Back Right Wheel 等等。 Suspension Rest Length 设置对车轮可用。

有必要指定机箱的真实质量 (因为默认值是仅 1 公斤)。做这件事先到物理设置,选择物理类型 Rigid BodyPhysics Type 选项并指定 Mass 所需的值 (例如,1000 公斤) 字段。

底盘设置

Force Max

车辆最大驱动力。

Brake Max

最大制动系数。

Suspension Compression

阻尼系数为悬浮舒展。

Suspension Stiffness

悬架刚度系数。

Suspension Damping

悬架阻尼系数。

Wheel Friction

车轮和表面之间的摩擦系数。现实车辆它应该是 0.8 左右。但是,显著提高它能够实现更好的控制 (1000 和更多)。

Roll Influence

减少车轮的扭矩降低车辆倾覆概率 (0-无力矩、 1-真正的物理行为)。

Max Suspension Travel Cm

以厘米为单位的最大悬挂行程。

Steering Wheel 必须指定的是方向盘的最大角度 (Steering Max) 以及方向盘和轮胎转动之间的比值 (Steering Ratio). 最大方向盘转角设置值为圈。一圈等于360度。因此,如果 Steering Max 等于一以及 Steering Ratio 等于10的话,方向盘转360度前轮转36度。

在这个时候你可以导出并加载场景到引擎。我们建议您创建一个物理材质的路面。要在查看器中选择控制的物体按 Q 并选择机箱。使用 W, A, S, D 用作控件。

此外,我们可以调整 Damping of Translation and Rotation 。这将影响汽车惯性与速度。

道路路面材质的摩擦和弹性不会影响车辆的行为。

浮动物体

_images/physics_floater.png

为了使要浮在水面上 (用 Water 材质物体) 的物体,就必须使 Floater 面板启用。有两种类型的浮动物体: Main Body - 动物体本身和 Bob - 辅助bob-物体让漂浮执行。浮动物体可以有无限的多个 Bob 物体。可以是网格或 Empty 物体。

相同的浮动物体包含的一部分的所有物体必须 Floater Name 字段中都具有相同的名称。

浮动物体设置

Floating Factor

浮力系数。

Water Linear Damping

物体在水面上时线速度阻尼 (或水下)。当物体不是在水中时,则使用物理设置。

Water Rotation Damping

物体在水面上时的旋转阻尼 (或水下)。当物体不是在水中时,则使用物理设置。

浮动交通工具或叫船舶

_images/physics_boat.png

船舶使用 Vehicle 设置的一些参数和 Floater 设置的所有设置。它是必要的主要物体上 Part 类型的 Hull 设置 。类似于浮动物体船只需要辅助 Bob 物体。

船舶设置

Force Max

车辆最大驱动力。

Brake Max

最大制动系数。

Floating Factor

浮力系数。

Water Linear Damping

物体在水面上时线速度阻尼 (或水下)。当物体不是在水中时,则使用物理设置。

Water Rotation Damping

物体在水面上时的旋转阻尼 (或水下)。当物体不是在水中时,则使用物理设置。

角色

_images/physics_character_object_example.png

这个功能可以通过点击 Physics 面板上的同名标签的标题 Character 复选框被激活。

从引擎的角度来看,角色本身是一类适当的物理物体,该物体可以与其他物理物体发生碰撞或受到物理力如重力和浮力的影响。

角色物体可以使用多种API方法,由他们的名字 character 关键字容易控制。所有这些方法驻留在 physics API模块。

角色设置

_images/physics_character_settings.png

所有设置列出在这里在激活 Character 选项卡后可用。

Walk Speed

此参数设定一个角色行走的速度(以米每秒为单位)。这个参数的可能的最低值是零,而最高为10。

它的默认值是4。

Run Speed

这是奔跑角色(以米每秒为单位测得的)的速度。其值可以从零到20变化。

此参数默认设置为8。

Step Height

这是一个该角色可以超越(米)的障碍最大高度。这个参数的值可以从零到1变化。

此参数的默认值是0.250。

Jump Strength

此参数设置人物跳跃的力量。其最小值是零,而其最大值为50。

默认设置为5。

Waterline

这个参数设置的角色物体的水线。水线从物体(不是物体的网格)的物理形状的中心测量的。如果物体被浸入水在该线以下的,它会漂浮。其值可以改变从-2到2。

默认情况设置为零 。

基本角色

Blend4Web引擎有快速建立用户控制的第一人称角色的选项。这样的角色将只有非常基本的功能,但也可以没有任何编程的情况下设置。

要建立一个基本角色,请按照下列步骤操作:

  1. 选择您想要作为一个角色使用一个物体。

  2. 启用选定物体的物理和物理设置类型到 DynamicRigid Body.

  3. 启用该物体的角色选项。

  4. 创建一个新的相机或选择一个现有的和其类型设置为 Eye

现在,带有摄像头的基本角色将出现在您的场景。

该角色可大致和常规 Eye 式照相机相同的方式作为进行控制:

  • WASD键移动角色。

  • 摄像头角度由方向键控制或移动鼠标按住左按钮。

  • 按C键切换飞行模式(默认启用)。

注解

只有一个基本角色可存在于场景中。如果场景中有多个角色,该引擎将使用他们的第一个基本角色,而忽略其他。

在应用程序中的使用

物理系统是在 uranium.js 模块中实现,并分别从引擎的主要代码加载。Uranium.js 模块本身是 Bullet 物理引擎的修改版,移植在浏览器中工作。为了激活物理系统,这就需要将 uranium.jsuranium.js.mem 文件跟应用程序的源代码放在同一个目录。

另一个方法是通过使用下面的 API 方法显式指定 uranium.js 模块的加载路径 ︰

m_config.set("physics_uranium_path", ".../uranium.js");

注解

当开发应用程序 使用了SDK, 自动检测到物理引擎的路径。

如果您的应用程序不使用物理,我们建议您在Blender场景选项卡中 Physics 面板下关闭 Enable Physics 的标志。它也是可以通过调用下面的方法初始化引擎前强行禁用加载 uranium.js 模块 ︰

m_config.set("physics_enabled", false);