游戏开发中的物理之碰撞形状(3D)

游戏开发中的物理之碰撞形状(3D)这是我参与更文挑战的第26天,活动详情查看: 更文挑战 本指南说明: Godot 中 3D 中可用的碰撞形状类型。 使用凸面或凹面网格作为碰撞形状。 关于 3D 碰撞的性能注意事项。 Godot 提供

这是我参与更文挑战的第26天,活动详情查看: 更文挑战

本指南说明:

Godot 中 3D 中可用的碰撞形状类型。

使用凸面或凹面网格作为碰撞形状。

关于 3D 碰撞的性能注意事项。

Godot 提供了多种碰撞形状,具有不同的性能和准确性权衡。

您可以通过添加一个或多个 CollisionShapes作为子节点来定义PhysicsBody的形状。请注意,您必须将Shape资源添加到 Inspector 停靠栏中的碰撞形状节点。

笔记

当您将多个碰撞形状添加到单个 PhysicsBody 时,您不必担心它们会重叠。它们不会相互“碰撞”。

原始碰撞形状

Godot 提供了以下原始碰撞形状类型:

  • 箱形
  • 球体形状
  • 胶囊形状
  • 圆柱体形状。它仅在使用 Bullet 物理引擎时可用。

您可以使用一个或多个原始形状来表示大多数较小对象的碰撞。但是,对于更复杂的对象,例如大船或整个关卡,您可能需要使用凸面或凹面形状。更多关于下面的内容。

我们建议对 RigidBodies 和 KinematicBodies 等动态对象使用原始形状,因为它们的行为最可靠。它们通常也提供更好的性能。

凸碰撞形状

凸碰撞形状是原始碰撞形状和凹碰撞形状之间的折衷。它们可以表示任何复杂的形状,但有一个重要的警告。顾名思义,单个形状只能表示凸形。例如,金字塔是凸的,而空心的盒子是凹的。要定义具有单个碰撞形状的凹面对象,您需要使用凹面碰撞形状。

根据对象的复杂性,您可以通过使用多个凸面形状而不是凹面碰撞形状来获得更好的性能。Godot 允许您使用 凸分解来生成与空心对象大致匹配的凸形状。请注意,这种性能优势在一定数量的凸面形状后不再适用。对于大型复杂对象,例如整个关卡,我们建议改用凹形。

通过选择 MeshInstance 并使用3D 视口顶部的Mesh菜单,您可以从编辑器生成一个或多个凸面碰撞形状。编辑器公开了两种生成模式:

  • 创建单凸面碰撞兄弟使用 Quickhull 算法。它使用自动生成的凸碰撞形状创建一个 CollisionShape 节点。由于它只生成单一形状,因此它提供了良好的性能,非常适合小物体。

  • Create Multiple Convex Collision Siblings使用 V-HACD 算法。它创建了几个 CollisionShape 节点,每个节点都有一个凸面形状。由于它生成多种形状,因此以性能为代价对凹面物体更准确。对于中等复杂度的对象,它可能比使用单个凹面碰撞形状更快。

凹面或三边形碰撞形状

凹面碰撞形状,也称为三边形碰撞形状,可以采用任何形式,从几个三角形到数千个三角形。凹形是最慢的选项,但在 Godot 中也是最准确的。您只能在 StaticBodies 中使用凹面形状。除非刚体的模式为静态,否则它们不能与 KinematicBodies 或 RigidBody 一起使用。

笔记

尽管凹面形状提供了最准确的碰撞,但接触报告可能不如原始形状精确。

当不使用 GridMaps 进行关卡设计时,凹形是关卡碰撞的最佳方法。也就是说,如果您的关卡有小细节,您可能希望将这些细节从碰撞中排除,以提高性能和游戏体验。为此,您可以在 3D 建模器中构建一个简化的碰撞网格,并让 Godot 自动为其生成碰撞形状。更多关于下面

请注意,与原始形状和凸面形状不同,凹面碰撞形状没有实际的“体积”。您可以在形状的外部和内部放置对象。

您可以通过选择 MeshInstance 并使用3D 视口顶部的Mesh菜单从编辑器生成凹面碰撞形状。编辑器公开了两个选项:

  • Create Trimesh Static Body是一个方便的选项。它创建一个包含与网格几何体相匹配的凹形的 StaticBody。

  • Create Trimesh Collision Sibling创建一个 CollisionShape 节点,其凹面形状与网格的几何形状相匹配。

笔记

假设您需要在凹形碰撞形状上制作 RigidBody滑动。在这种情况下,您可能会注意到,有时,刚体会向上颠簸。要解决此问题,请打开Project > Project Settings并启用 Physics > 3d > Smooth Trimesh Collision。

启用平滑的trimesh 碰撞后,请确保凹面形状是StaticBody 的唯一形状,并且它位于原点而没有任何旋转。这样,刚体应该在静态体上完美滑动。

也可以看看

Godot 可以为您导入的 3D 场景自动生成碰撞形状。有关更多信息,请参阅文档中的导入提示。

性能警告

您不仅限于每个 PhysicsBody 的单个碰撞形状。尽管如此,我们还是建议保持尽可能少的形状数量以提高性能,尤其是对于 RigidBodies 和 KinematicBodies 等动态对象。最重要的是,避免平移、旋转或缩放 CollisionShapes 以从物理引擎的内部优化中受益。

在 StaticBody 中使用单个未转换的碰撞形状时,引擎的宽相位算法可以丢弃不活动的 PhysicsBodies。在狭窄的阶段,然后将只需要考虑到活跃的机构的形状。如果一个 StaticBody 有很多碰撞形状,broad 阶段就会失败。较慢的窄阶段必须对每个形状执行碰撞检查。

如果遇到性能问题,您可能必须在准确性方面进行权衡。大多数游戏都没有 100% 准确的碰撞。他们找到了创造性的方法来隐藏它或以其他方式使其在正常游戏过程中不显眼。


如果你真的从这篇文章中学到了一些新东西,喜欢它,收藏它并与你的小伙伴分享。🤗最后,不要忘了❤或📑支持一下哦

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13361.html

(0)

相关推荐

  • 怎么在centos7上安装oracle_oracle数据库用命令行登陆

    怎么在centos7上安装oracle_oracle数据库用命令行登陆CentOS 7 命令行安装oracle 前言: ​ 本篇文章是使用VM中的centos7 安装oracle11g,网上找了很多教程,花了一天时间终于把oracle安装好了。大家可以看一看,全篇把文章

    2023-05-05
    143
  • dnf合成(dnf稀有装扮合成器)

    dnf合成(dnf稀有装扮合成器)

    2023-09-23
    139
  • 如何安装Python

    如何安装PythonPython3.7是目前应用最广泛的Python版本,安装方法如下:

    2024-06-25
    49
  • Redis哨兵机制总结与实践

    Redis哨兵机制总结与实践文章简介 本文将通过理论+实践的方式从头到尾总结Redis中的哨兵机制。文章内容从主从复制的弊端、如何解决弊端、什么是哨兵、哨兵监控的图形结构、哨兵监控的原理、如何配置哨兵、哨兵与主从复制的关系等方…

    2023-04-13
    152
  • 决策树 csdn_算法共有哪三种形式

    决策树 csdn_算法共有哪三种形式1. 决策树(Decision Tree)简介 1.1. 决策树的原理 决策树是属于机器学习监督学习分类算法中比较简单的一种,决策树是一个预测模型;他代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每个叶结点则对应…

    2023-07-29
    136
  • 数据库 简答题_数据库试题

    数据库 简答题_数据库试题
    第一章 数据库概述 1.简述数据管理技术发展的三个阶段以及各个阶段的特点 数据库管理技术发展经过了人工管理阶段,文件系统阶段,数据库系统阶段。 (1)人工管…

    2023-04-04
    154
  • Windows Server 2008 R2远程使用win7 Aero主题

    Windows Server 2008 R2远程使用win7 Aero主题最近使用工作室服务器的时候,“厌倦了”系统默认的主题,所以开启了win7的Aero主题。因为服务器在阿里云买了之后,没怎么配置,所以有些功能需要先安装再使用。 打开“控制面板”选择“程序-打开或关闭Windows功能”,进入服务器管理器。 选择“角色-新建角色-服务器角色-远程…

    2023-11-10
    129
  • 一文总结linux环境shell脚本获取时间的常用命令「建议收藏」

    一文总结linux环境shell脚本获取时间的常用命令「建议收藏」概述前面已经介绍了windows环境关于时间的常用命令总结,今天主要分享下linux环境shell脚本常用的一些获取时间命令。

    2023-06-24
    161

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注