UE4.21前的版本采用的是NVIDIA的PhysX做为其默认的物理引擎,用于计算3D世界的碰撞查询与物理模拟。自4.21版本开始改物理调用接口,但这并不是闲来重构代码,果然在2019GDC大会上放出了正在自建Chaos物理系统的消息,从4.22预览版中已经可以看到相关代码,官方预计4.23就可以开始使用,还是值得期待的。

最近打算重点研究下物理系统,知乎上已经有相当不错的研究报告了,强烈推荐看的是:

Jerish:《Exploring in UE4》物理模块浅析[原理分析]​zhuanlan.zhihu.com

作者自己是花了很多功夫研读代码写成的,虽是浅析也非常详细。

此外还有:

祖年:UE4物理介绍​zhuanlan.zhihu.com

以及代码贴得比较多的:

UE4物理引擎模块分析​www.jianshu.com

也都值得看看。

我自己再写这块地方,自然会做到与几位前辈有区分度,也希望大家读后会有不同的体会。还是以问答的方式来阐述,会比较清晰些。

1. 什么是游戏中的物理系统?

游戏物理主要是解决两个问题,其一是碰撞查询(Query),比如我面前有一堵墙,我还可以走多远就会被撞到;其二是物理模拟(Simulation),比如游戏角度死亡后身体该如何倒下,飞驰的载具被路上的矮石墩碰到后如何表现等。

2. UE4是如何建立物理系统的?

目前版本还是依赖于第三方的PhysX,UE4自身提供PrimitiveComponent,拥有BodyInstance,上面记录了PhysX所需要的物理数据,会将这些信息传递给PhysX所创建的物理世界,然后由PhyX进行处理,并得到其返回的结果。

那么既然物理的结果涉及到UE4和三方PhysX,那出了问题该怎么查,自然就有如下问题了。

3. 如何Debug物理系统?

对于UE4,可以在跑起的游戏中按`(键盘左上角ESC的正下方)呼出控制台,然后单击show collision(会自动联想,差不多的时候按TAB键就补全了),如下图:

回车后就可以看到世界里面多了线条型的盒子,如下图:

这就是UE4里面提供给PhysX处理前的碰撞信息,我们称之为碰撞盒,它大致包住了物体模型。碰撞盒可以做的很简单(如上图用物体轮廓包围盒),也可以做的很复杂(如直接用物体模型本身三角面片),这个下一章就说。

对于PhyX,它对于UE4来说就是一个提供输入然后获取输出的黑盒,不过可以通过NVIDIA提供的PhysX Visual Debugger(PVD)来进行可视化调试,下载地址如下:

PhysX Visual Debugger​developer.nvidia.com

需要注册账户才可以下载,安装成功后会看到软件的图标如下:

运行界面如下:

什么也没有,别急,我们在编辑器里跑起游戏,呼出控制台,然后输入pvd connect,如下:

过一会儿就可以按ESC停掉游戏,这时回到PVD软件窗口,就可以看到软件里面有东西显示出来了,是一个巨大的黄球,如下:

在右侧Setting栏里面把Sleeping objects给关掉,如下:

这样就可以看到与游戏内场景样子差不多的物理世界了,如下:

可以看到两个椅子,还有一个桌子,桌子上放着一个雕塑模型,这与之前在UE4里面按show collision得到的结果是一致的,是较为粗糙的轮廓包围盒,至于靠右的圆柱,那是玩家的出生点,因为有碰撞所以也会被物理世界采集到。

每一个物理对象在PhyX里面都对应一个PxRigid,如果这个对象是静态的,则是PxRigidStatic,在PVD里面绘制成红色;如果这个对象是动态的,则是PxRigidDynamic,在PVD里面绘制成黄色的。这里所有非休眠对象都是静态的,所以上图看上去都是红色的。可以选中其中的一个模型,比如左侧的椅子,可以看到左侧面板上列出了它对应的那个PxRigidStatic,id是163,如下:

展开这个PxRigidStatic,发现它有两个PxShape,展开Geometry,可以看到分别是凸包模型(ConvexMesh)与三角形模型(TriangleMesh),如下:

这实际上对应于这个椅子的两个碰撞盒,一个是简单碰撞盒凸包,一个是复杂碰撞盒模型自身三角形, 这个会在下一章节介绍。PVD软件顶上还有一个显示帧数的拖拉条,如下:

右侧数字说明在物理世界里面总共有218帧,可以拖动显示前几帧内物理世界的变化,这个在分析动态物理对象时非常有用,但本示例都是静态物理对象,所以没啥变化。

这个PVD工具非常好用(虽然会常常崩溃),在以后的章节中会经常用到,这里只要知道用pvd connect命令进行物理世界可视化即可,了解下物体的碰撞盒。那么问题来了:

4. 物体的碰撞盒是如何建立的呢?

详见:

Jerry:UE4物理模块(二)---建立物体碰撞​zhuanlan.zhihu.com

5. 两个物体靠近会发生什么呢?

详见:

Jerry:UE4物理模块(三)---碰撞查询​zhuanlan.zhihu.com

UE4物理模块(一)---概述与可视化调试的更多相关文章

  1. UE4物理模块(二)---建立物体碰撞

    在前文中介绍了什么是物理以及如何在UE4和PhysX中进行可视化调试: Jerry:UE4物理模块(一)---概述与可视化调试​zhuanlan.zhihu.com 这里调试只谈到了碰撞盒(后续还会有 ...

  2. UE4物理模块(三)---碰撞查询(下)SAP/MBP/BVH算法简介

    在上一文中介绍了碰撞查询的配置方法: Jerry:UE4物理模块(三)---碰撞查询(上)​zhuanlan.zhihu.com 本篇介绍下UE4的各种零大小的射线检测,以及非零大小(带体积)的射线检 ...

  3. UE4物理模块(三)---碰撞查询(上)

    在前一文中介绍了如何在UE4中创建简单碰撞或者直接使用其mesh表示的复杂碰撞: Jerry:UE4物理模块(二)---建立物体碰撞​zhuanlan.zhihu.com 那么在拿到碰撞之后,就可以进 ...

  4. 开源发布:VS代码段快捷方式及可视化调试快速部署工具

    前言: 很久前,我发过两篇文章,分别介绍自定义代码版和可视化调试: 1:Visual Studio 小技巧:自定义代码片断 2:自定义可视化调试工具(Microsoft.VisualStudio.De ...

  5. 使用c#反射实现接口可视化调试页面

    直接上代码,引用CommTools.dll.包括aspx显示页面和aspx.cs获取反射数据源代码 using System; using System.Collections.Generic; us ...

  6. Halcon12新特性之VS可视化调试插件

    当我们用VC\C#调试halcon代码的时候,通常会遇到一个头痛的问题,我们无法看到halcon变量的调试信息 如下图:什么鬼...什么鬼   比如我们想看一个double数值变量,我们需要 doub ...

  7. Python笔记_第二篇_面向过程_第二部分_3.模块的概述

    这部分内容是非常重要的,分模块的基本概念和一些常用模块的使用,其实常用模块使用这部分也不是太全面,后续或者有机会再通过其他材料进行讲解. 1. 模块的概述: 目前代码比较少,写在一个文件中还体现不出什 ...

  8. Linux开源模块迁移概述暨交叉编译跨平台移植总结--从《嵌入式Linux驱动模板简洁和工程实践》

    本文摘录<嵌入式Linux驱动模板简洁和工程实践>一本书"开发和调试技术". Linux强大的是,有那么多的开源项目可以使用.通常非常需要可以通过寻找相关的源模块被定义 ...

  9. UE4物理笔记

    基本 物理资源随骨骼创建,可添加到骨骼网格上. 物理材质可添加到材质或组件或物理资源上. 通过配置PrimitiveComponent组件的Collision Presets值,可实现自定义的碰撞忽略 ...

随机推荐

  1. 菜鸟nginx源码剖析数据结构篇(十一) 共享内存ngx_shm_t[转]

    菜鸟nginx源码剖析数据结构篇(十一) 共享内存ngx_shm_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csdn ...

  2. Java(8)中List的遍历方式总结

    本篇文章主要讲述了List这一集合类型在Java,包括Java8中的遍历方式,不包括其他的过滤,筛选等操作,这些操作将会在以后的文章中得到提现,由List可以类推到Set等类似集合的遍历方式. pub ...

  3. WhaleCTF之web-本地登录

    WhaleCTF之web-本地登录 前往题目 呵呵,基然对ip限制,没事,掏出burp抓包 改包 添加XFF头部 X-Forwarded-For: 127.0.0.1 发一下 不是admin,没有用户 ...

  4. eclipse memory analyzer对系统内存溢出堆文件解析(转)

    本文转之:https://blog.csdn.net/rachel_luo/article/details/8992461 前言 性能分析工具之-- Eclipse Memory Analyzer t ...

  5. windows和ubuntn互传文件

    Windows和linux(ubuntu)互传文件简便快捷的方法 现在很多开发和测试的工作环境都是Linux,但测试后期报告的处理一般都是在Windows下完成的,所以需要把结果拿到Windows下. ...

  6. LUOGU P3178 [HAOI2015]树上操作

    传送门 解题思路 树链剖分裸题,线段树维护. 代码 #include<iostream> #include<cstdio> #include<cstring> #d ...

  7. vue.js_06_vue.js的自定义指令和自定义键盘修饰符

    1.全局的自定义指令 实现:当页面刷新时,光标聚焦到搜索框中 <label> 搜索: <input type="text" class="form-co ...

  8. 深入浅出 Java Concurrency (23): 并发容器 part 8 可阻塞的BlockingQueue (3)[转]

    在Set中有一个排序的集合SortedSet,用来保存按照自然顺序排列的对象.Queue中同样引入了一个支持排序的FIFO模型. 并发队列与Queue简介 中介绍了,PriorityQueue和Pri ...

  9. dubbo入门学习(四)-----dubbo配置

    配置来源 首先,从Dubbo支持的配置来源说起,默认有四种配置来源: JVM System Properties,-D参数 Externalized Configuration,外部化配置 Servi ...

  10. 关于HTML和Css的一些总结

    HTML HTML特点与基本结构 HTML 是用来描述网页的一种语言. HTML 指的是超文本标记语言 (Hyper Text Markup Language). 超文本就是指页面内可以包含图片.链接 ...