资讯详情

资讯详情

JoltPhysics CMake 配置避坑指南:6 个参数决定你的物理模拟能否顺利跑起来

JoltPhysics CMake 配置避坑指南6 个参数决定你的物理模拟能否顺利跑起来【免费下载链接】JoltPhysicsA multi core friendly rigid body physics and collision detection library. Written in C. Suitable for games and VR applications. Used by Horizon Forbidden West and Death Stranding 2.项目地址: https://gitcode.com/GitHub_Trending/jo/JoltPhysicsmake编完一运行 UnitTests 就Illegal instruction或链接器报file format not recognized——多半不是代码问题而是 JoltPhysics多核刚体物理与碰撞检测库的 CMake 选项和环境没对上。见到 Illegal instruction 和 file format not recognized 时先做什么Illegal instruction说明 Jolt 默认开启了 AVX2 等指令集而你的 CPU 不支持先用lscpu看 flags再把对应USE_*选项关掉重新配置。ld: libJolt.a: error adding symbols: file format not recognized说明 Jolt 静态库开了 LTO 链接时优化你的工程却没开对象文件格式对不上。 Build 目录的 README 的 Errors 一节还列了 RTTI、bitcode 等几类链接错误遇到第三种报错先查那里。三步最小路径从源码到跑通 UnitTests前置依赖CMake 3.20GCC 或 ClangC17。只要跑物理逻辑就不需要任何图形 SDK要跑 Samples 则需装完整版 Vulkan SDKJolt 用它里面的 dxc 交叉编译 HLSL 着色器到 Vulkan/Metal。git clone https://gitcode.com/GitHub_Trending/jo/JoltPhysics cd JoltPhysics/Build ./cmake_linux_clang_gcc.sh Release # ← 生成 Linux_Release 目录 cd Linux_Release make -j$(nproc) ./UnitTests # ← 全绿即环境可用构建类型有 Debug、Release 和 Distribution最后一种是可发布版本去掉了 profiler 与 debug renderer。Windows 用户在 Build 目录双击cmake_vs2022_cl.bat生成 VS 解决方案即可。接入现有工程只需两行API 启动顺序注册分配器、注册类型、TempAllocator、JobSystem、按 60Hz 调Update在 HelloWorld/HelloWorld.cpp 里有完整示例注意任何 Jolt 头文件之前必须先包含Jolt/Jolt.hadd_subdirectory(JoltPhysics) # ← 指向 JoltPhysics 仓库根目录 target_link_libraries(YourProject Jolt)6 个决定构建结果与帧率的 CMake 参数以下参数都在 CMakeLists.txt 中定义配置时传-D即可覆盖默认值。参数默认值开启/关闭的影响建议场景DOUBLE_PRECISIONOFFON位置全部改用 double支持大得多的世界尺度OFFfloat性能更高⚠️ 世界尺度 100 km 时开启会改变全部浮点行为两端必须同步重编CROSS_PLATFORM_DETERMINISTICOFFONx86 与 ARM 上逐帧结果一致内部自动禁用 FMADD 等快速数学路径损失少量性能联网锁步、录像回放INTERPROCEDURAL_OPTIMIZATIONONONRelease/Distribution 启用 LTO静态库产物是 LTO 位码OFF普通目标文件性能略降打包 XCFramework 时关直接链接保留JPH_BUILD_SHARED_LIBS跟随BUILD_SHARED_LIBSON动态库你的工程侧会定义JPH_SHARED_LIBRARYOFF静态库插件式接入开游戏本体建议关USE_ASSERTSOFFDebug 自动开ON所有配置都启用JPH_ENABLE_ASSERTS调试期开发布关USE_AVX2同族USE_AVX、USE_SSE4_1等ONOFF回退到更低指令集避免旧 CPU 触发非法指令新硬件全开旧 CPU 逐个关开CROSS_PLATFORM_DETERMINISTIC后USE_FMADD会被忽略不要再去手动调浮点行为。游戏、服务端、嵌入式分别怎么调 SIMD、精度与线程游戏客户端满血 SIMD Distribution所有USE_*指令集选项保持 ON发布用 Distribution 构建类型等同 Release 但去掉 profiler 和 debug renderer。 Broadphase 按层各自建一棵包围体树把静态与动态物体分成两层静态树就不用每帧重建构建完成后跑一遍 PerformanceTest/ 的多个压力场景在自己机器上验证帧时间。服务端锁步对局的位级确定性加-DCROSS_PLATFORM_DETERMINISTICON世界再大就再叠-DDOUBLE_PRECISIONON脚本提供--deterministic --double简写。 锁步对局里物体运动质量要统一设为MotionQuality::DiscreteLinearCast 做连续扫描检测跨平台的浮点顺序难以对齐JobSystemThreadPool的线程数不影响模拟结果服务端可以开到 1。嵌入式与旧硬件按目标 CPU 的lscpuflags 降级指令集如-DUSE_AVX2OFF -DUSE_AVXOFF -DUSE_FMADDOFFARM 目标用-DCROSS_COMPILE_ARMON -DCROSS_COMPILE_ARM_TARGETaarch64-linux-gnu交叉编译必须用 clang。 嵌入式建议同时关掉用不到的特性ENABLE_OBJECT_STREAMOFF、JPH_USE_VKOFF、JPH_USE_DX12OFF、JPH_USE_MTLOFF库体积会明显缩小。故障速查6 个报错一行修复错误现象根因一行解法ld: libJolt.a: ... file format not recognizedJolt 用 LTO 构建静态库你的 target 没开 LTO对自己 target 执行set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ON)LNK2001: unresolved external symbol ... JPH::ConvexShape::...库与你的代码 debug renderer 宏不一致Debug/Release 有、Distribution 无统一构建类型或两边设DEBUG_RENDERER_IN_DEBUG_AND_RELEASEOFFundefined symbol: typeinfo for JPH::DebugRendererJolt 默认关 RTTI你的工程开着-DCPP_RTTI_ENABLEDON或在自己工程关掉 RTTI运行期Illegal instructionCPU 不支持默认开启的 SIMD 指令集lscpu查 flags逐个关闭对应USE_*选项重编Unknown header: 0xb17c0deLTO 对象内含 LLVM bitcodeXCFramework 打包不认-DINTERPROCEDURAL_OPTIMIZATIONOFFCMake 提示 Cannot build Samples because...缺 Vulkan/DirectX/Metal 图形 SDK装完整 SDK含 dxc或先用-DTARGET_SAMPLESOFF只构库✅ 参数组合没有最正确只有最贴你的部署目标改完任何参数重跑一次./UnitTests再交付。深入架构可看 Docs/Architecture.md。【免费下载链接】JoltPhysicsA multi core friendly rigid body physics and collision detection library. Written in C. Suitable for games and VR applications. Used by Horizon Forbidden West and Death Stranding 2.项目地址: https://gitcode.com/GitHub_Trending/jo/JoltPhysics创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →