说明
- 本文主要目的在于总结、记录和分享对 UE4 的物理进行调试的方法。
- 本文不涉及对 UE4 物理系统原理机制的探讨分析,有兴趣者可参阅 基于 PhysX 的 UE4 物理系统原理机制源码剖析 。
- 本文大部分内容原则上仅适用于 UE4 ,因为 UE5 已经废弃了 PhysX,改用 Chaos 。
源码调试
说明
- PhysX 库的 PhysXLibraryMode 必须跟 UE 引擎的 UnrealTargetConfiguration 匹配,否则可能无法正常命中断点。
- 在 PhysX.Build.cs 的 GetPhysXLibraryMode 函数中 可以看到 UnrealTargetConfiguration 与 PhysXLibraryMode 的对应关系
7mbukbef6tlakj934v1tleounl.png
- UE4.27 的 PhysX 默认用的 Profile ,对应的 UE 需要是 Test
0aep9n5940q8f6mdtfedlk8vv5.png
26cegoenqb5hrmpsa0lajobv8h.png
- 建议编译出 Checked 的 PhysX 库,配合 Debug 的 UE4 进行调试。
- 如果需要使用 Debug 的 PhysX 库的话,需要开启 bDebugBuildsActuallyUseDebugCRT ,这会导致很多其他的插件无法通过编译。
6khh9a1l1o1j20smuvei5up65l.png
环境
- 安装 VS2015。
- 记得选装对应 SDK :
WIN 10 SDK 10.0.14393.0
编译
- (可选)修改代码以屏蔽无关逻辑和报错
- 打开
BuildPhysX.Automation.cs
,注释掉[RequireP4]
3064hhk432tclhf1n9btrstktd.png
- 不改的话可能出现 P4(Perforce) 相关的报错
- (可选)生成 PhysX 的工程文件
- 通过路径
\Engine\Source\ThirdParty\PhysX3\GenerateProjects_UAT.bat
生成工程文件
- 修改配置以准备编译 Checked 的 PhysX 库
- 修改
Engine/Source/ThirdParty/PhysX3/BuildProfile_Win64.bat
,把-TargetConfigs=profile
改成-TargetConfigs=release+profile+checked
- 主要加上 checked 以编译出跟 Debug 的 UE 引擎一致的可断点调试的库,也编译 profile 库的目的在于后文提及的通过 PVD 进行可视化调试。
- 在命令行下运行
BuildProfile_Win64.bat
,编译 PhysX 库
调试
- 打开 PhysX 相关代码,设置断点。
- 解决方案中默认不会显示 PhysX 相关源码。
- 对于 Rider 等 IDE ,可通过在目录里查找 PhysX 相关代码来打开相关文件。
- 也可直接把相关代码拖到 IDE 中,进行断点设置。
- 还可以通过 UE 已有代码逐步 Debug 进入 PhysX 源码。
- 断点效果展示
- 以对 physx::NpScene::addActor 下断点为例

image.png
可视化调试
基于 UE 命令查看碰撞信息
- Eject 下的 show collision
- 在编辑器中, F8(Eject)模式下,在 viewpoint 视图的左上角点击 show 后勾选 collision 可显示碰撞信息。
1r767j4oo24bjrheteis9tkgiq.png
- 控制台下输入
show collision
命令
3rit1buu6kscho4354ml9kaf4s.png
- 控制台下输入
PXVIS COLLISION
命令
0thh1lf24v2aprl4hvkfio9tgf.png
- 控制台下更多相关命令
- 详见:
FPhysScene::ExecPxVis
3afpiev7mvva2strc9aqjljli2.png
基于 PVD 对物理进行可视化分析
效果预览
6s265072iunqh9f58itkv56qt2.png
下载
- 需要先登录(注册等不需要收费)
- 在文件列表中找到 PhysX Visual Debugger 进行下载。
4258nj7qtm13qo3id9tq2eobud.png
- 下载后安装即可(安装没什么特别要求,默认即可)
使用
- 前置条件
- PhysX 库必须在编译时开启 PX_SUPPORT_PVD 才能使用 PVD(PhysX 库的 Debug 和 Profile 版本会开启该宏)。
- 如果 PhysX 库 不满足该要求,可自行编译,方法见:源码调试
- 启动
- 需要先启动 Physx Visual Debugger 工具再连接 PVD 。
4f7und9otgrbg0t4t6uqvo0maf.png
- 连接
- 可通过命令行参数连接 Physx Visual Debugger 工具。
- 可以给可执行文件添加命令行参数“-pvd”来让其启动后自动连接 PVD
- 如对于 exe,可创建快捷方式后,右键快捷方式,在目标后添加“ -pvd”
4pe3eeb7flu0ctr4hkjt1s492v.png
- 可以在控制台输入命令来自动连接 PVD
- 效果
4plmqaa3gsc4v3k11om9upv94d.png
7v1se6j2t1mim7nqhsonabr0fn.png
- 命令
pvd CONNECT
- 连接本机正在运行的 PVD (编辑器或 standalone 均可)
pvd CONNECT x.x.x.x
- 使用默认端口 5425 连接到 ip 为 x.x.x.x 的设备上的 PVD
pvd CONNECT NODEBUG x.x.x.x
- 同上,仅用于 profile 和 meomry,不做绘制
- 断开
- 连接太久开销较大,且会增大 PVD 崩溃的概率,所以必要时可手动断开连接。
- 在控制台输入
pvd DISCONNECT
以断开(停止) UE 与 PVD 的连接。 - 默认情况下,停止游戏也会自动断开与 PVD 的连接。
使用说明
- Render
- 调试渲染选项卡显示 PhysX 所看到的世界。默认情况下提供了自由模式相机。但是,如果应用程序通过其他 API(例如 APEX)提供了带有相机的 PVD SDK,则也可以使用该相机。
5eb7vd2v0pfai0red8pgqom6d2.png
- 颜色说明
- 静态刚性(Static rigid)演员( actors)标为红色;
- PxRigidStatic
微信截图_20230731203118.png
- 休眠的动态刚性体(dynamic rigid bodies)标为橙色;
- PxRigidDynamic
微信截图_20230731203140.png
- 活动的动态刚性体用不同的绿色阴影标记;
- PxRigidDynamic
微信截图_20230731203155.png
- 运动学(kinematic)演员标为蓝色。
- 光线投射(Raycasts)呈绿色线条,击中点呈蓝色矢量。
7511pkran2hf6rvbn8vo2t4jr5.png
- 重叠场景查询(Overlap scene queries)呈绿色线条。
1edjpnak94lhls2djp07gjh2dv.png
- 边界框呈白色。
- 质心向量以红/绿/蓝色绘制。
- 速度向量呈白色箭头。
1nvf2k5e8p9kk9udfut50n49ug.png
- 关节呈绿色。
微信截图_20230731203220.png
- 粒子系统呈青色。
- 流体粒子呈蓝色。
- Thread Profiler
- 线程分析器显示与性能视图相同的性能信息,但按线程对事件进行分组。
5dt38qem2kf559qm319inph8b4.png
- Memory View
- PhysX/APEX SDK 具有分配回调,因此这两个 SDK 进行的所有分配和释放均通过 PVD SDK 记录并显示在 PVD 中。 该小部件单独显示每个帧的信息,因此只有在当前帧期间进行的分配/解除分配可见。 “文件”列显示每个分配/释放的来源,包含文件和行号信息。 “Churn”列显示此帧已分配但未释放的内存量。 “已分配”/“已释放”列以人类可读的格式显示内存量以及当前帧期间此类事件的计数
60798lg6opn28em2uitct2j353.png
- Profile
- 当 clips(3.0 以上)具有此类信息时,性能视图会显示性能信息。 该小部件提供时间(水平轴)与多个事件持续时间(垂直轴)的关系。 由于 PhysX/APEX 可以使用多个线程进行计算,因此来自这些线程的事件被组织在一级树结构中,从而允许单独分析每个线程。 事件呈现为绿色矩形条。 事件最初按事件首次出现排序。 每个条都有一个可用的上下文菜单,其中包含一个用于绘制 clips 中所有帧中条的持续时间的命令。

29flrp5efv09egkvsfcmvpqf56.png
相关链接
- UE4物理模块(一)---概述与可视化调试
- 《Exploring in UE4》物理模块浅析[原理分析]
- PhysX Visual Debugger (PVD) 官方文档
- PhysX Visual Debugger (PVD) 官方下载地址
- UE4物理介绍
- UE4物理引擎模块分析
- Using PhysX in UE5?
- UE4 编译 PhysX
- Visual Studio debugger on the PhysX code running inside UE4
- How to debug PhysX?
- Better Way To Profile PhysX In UE4
- PhysX Source Guide
- UE4之PVD调试
**声明:**本文来自公众号:GameDevLearning,转载请附上原文链接(https://mp.weixin.qq.com/s/WKzNa1tZ5rAAlkmckhDR8A)及本声明。