首页 > 其他分享 >UE4中PhysX BroadPhase(碰撞检测的粗略阶段)

UE4中PhysX BroadPhase(碰撞检测的粗略阶段)

时间:2024-05-29 23:12:05浏览次数:18  
标签:pairs BroadPhase 0.000000 when 碰撞检测 UE4 MBP PhysX

PhysX的BroadPhase(碰撞检测的粗略阶段),具体是用AABB(轴向包围盒)来做碰撞检测

具体算法有两种:SAP(Single Pruning Box,单个剪枝盒)和MBP(Multi Pruning Box,多个剪枝盒)

 

SAP(Single Pruning Box,单个剪枝盒)

当场景中有大量的物体(大世界有百万级别)时,即使它们已按AABB的三个轴向xyz做了排序,一个动态物体在移动过程与它们进行AABB判断也是一个很耗时操作

 

TG_EndPhysics的卡顿与BpSAP.UpdateWork直接相关

 

 

MBP(Multi Pruning Box,多个剪枝盒)

为了解决与物体判断AABB的次数,可以使用MBP来将整个场景划分成多个块,这样动态物体只用与当前所在块中的物体进行AABB判断,大大减少BroadPhase(碰撞检测的粗略阶段)的耗时

 

全局Default Broadphase Settings

注1:勾上Use MBPOn Client,并设置MBPBounds和MBPNum Subdivs的数值

注2:MBPBounds的Min、Max缺省为0,表示区域为整个场景

注3:MBPNum Subdivs为2,即将MBPBounds划分成2x2,一共4个块

 

该配置会保存在DefaultEngine.ini中

[/Script/Engine.PhysicsSettings]

DefaultBroadphaseSettings=(bUseMBPOnClient=True,bUseMBPOnServer=False,bUseMBPOuterBounds=False,MBPBounds=(Min=(X=0.000000,Y=0.000000,Z=0.000000),Max=(X=0.000000,Y=0.000000,Z=0.000000),IsValid=0),MBPOuterBounds=(Min=(X=0.000000,Y=0.000000,Z=0.000000),Max=(X=0.000000,Y=0.000000,Z=0.000000),IsValid=0),MBPNumSubdivs=2)

 

在地图中可以覆写全局Default Broadphase Settings

 

具体代码详见:UnrealEngine\Engine\Source\Runtime\Engine\Private\PhysicsEngine\PhysScene_PhysX.cpp

void FPhysScene_PhysX::InitPhysScene(const AWorldSettings* Settings)

 

相关CVar变量

p.ForceMbpClient Forces all created scenes to use MBP on client builds
p.ForceMbpServer Forces all created scenes to use MBP on server builds
p.ForceNoKKPairs Disables kinematic-kinematic pairs. This is required when using APEX destruction to correctly generate chunk pairs - when not using destruction this speeds up the broadphase by early rejecting KK pairs.
p.ForceNoKSPairs Disables kinematic-static pairs. This makes converting from static to dynamic a little slower - but provides better broadphase performance because we early reject those pairs.
p.OverrideMbpNumSubdivisionsClient Override for number of subdivisions to perform when building MBP regions on a client, note regions are only generated when a scene is created - this will not update the scene if it's already running (0 = No override, 1>16 - Override number)
p.OverrideMbpNumSubdivisionsServer Override for number of subdivisions to perform when building MBP regions on a server, note regions are only generated when a scene is created - this will not update the scene if it's already running (0 = No override, 1>16 - Override number)

 

参考

Dive Into PhysX Broad Phase In UE4

 

标签:pairs,BroadPhase,0.000000,when,碰撞检测,UE4,MBP,PhysX
From: https://www.cnblogs.com/kekec/p/18114295

相关文章

  • UE4之宏与预编译指令定义
    在UBT中添加宏定义UnrealEngine\Engine\Source\Programs\UnrealBuildTool\Configuration\ModuleRules.cs UnrealEngine\Engine\Source\Programs\UnrealBuildTool\Configuration\UEBuildPlatform.cs UnrealEngine\Engine\Source\Programs\UnrealBuildTool\Con......
  • Unity物体之间碰撞检测的方法
    检测碰撞有两种方式,一种是利用碰撞器,另外一种就是触发器。碰撞器的种类:1.StaticCollider静态碰撞器指的是相互碰撞的两个物体没有附加刚体而只附加了Collider的游戏对象。这类对象在碰撞时会保持静止,发生碰撞时不会触发任何的方法函数。 2.RigidbodyCollider刚体碰撞器......
  • UE4 动态生成网格
    说明在游戏中动态改变网格数量和形状等,该功能是寻路功能的前期准备,即在基础移动地基上方,构建一层网格,任何移动的操作都可以基于该网格进行计算。从而在编辑器模式下能够更方便进行调试InstancedStaticMeshComponent其是一种用于优化静态网格渲染性能的技术。InstancedStaticMes......
  • UE4 C++ 攀爬功能
    UE中的TEXT()UE中使用TEXT()包含字符串后,将字符串转换为宽字符,其将被处理为支持Unicode和跨平台兼容性,而普通类型的字符串为一个窄字符类型,可能在跨平台出现问题。最主要的问题是在FString的构造函数中是接受TCHAR的所以对于FStringFNameFTEXT的构造需要传入TEXT("xxxx")。......
  • UE4 -- 实现用于网络连接的插件
    插件UE中的插件就相当于一个模块,在引擎界面点击创建新的插件后,会在项目文件夹中生成插件的文件夹,在该文件夹内,只需要像游戏项目一样编写插件逻辑,最后在插件选择界面开启该插件即可当新建插件后,UE会自动生成继承于IModuleInterface的类,说明该文件夹的内容为插件。在InsideUE4中......
  • UE4 C++ 杂
    TMap中的Find和FindRef在对蓝图节点进行C++重写时,发现UE对于TMap的Find有很多方式。首先是基础的Find,其就是返回对象类型的指针,如果不存在于TMap中其会返回nullptr接下来是FindChecked,其返回的是对象类型的引用,并且会在内部检测指针是否为空,如果没有会触发断言FindRef其......
  • ue4.26 通过材质开关控制mesh pass的blend function
    一,meshpass中blendfunction的设置方法在meshpass中设置blendfunction有如下几种方式:1,在CreateXXXProcessor(返回FXXXProcessor)中: 2,FXXXProcessor::AddMeshBatch中: 3,FXXXProcessor::Process中: 4,RenderXXX中: 二,材质开关访问途径我们知道,访问材质开关有以下几种......
  • UE4之StaticMesh和SkeletalMesh类关系图
    StaticMesh类关系图StaticMesh渲染数据结构 SkeletalMesh类关系图 USkinnedMeshComponent::CreateRenderState_Concurrent函数voidUSkinnedMeshComponent::CreateRenderState_Concurrent(FRegisterComponentContext*Context){LLM_SCOPE(ELLMTag::SkeletalMesh......
  • UE4 寻路
    寻路就是对图的遍历,目前主要处理对可转换为二维矩阵的方格图遍历DFS与BFS两种最基础的遍历方式,DFS采用回溯思想,将从起点开始沿着一个方向搜索,直到超出界限(回溯)或者到达目的地(返回结果)//只考虑上下左右四个方向vector<vector<pair{int,int}>>res;vector<pair{int,int}......
  • UE4纯C++实现游戏中快捷栏之创建快捷栏UI
    作为一个在游戏界面中显示的快捷栏,我们需要在游戏运行时就显示出快捷栏UI,故我们创建两个Widget。1.SlAiGameHUDWidget:负责游戏中界面UI的整体显示2.SlAiShortcutWidget:负责快捷栏部件的显示与逻辑然后我们通过:1.将GameHUDWidget添加进视口:在GameHUD文件中添加Game......