标签:物理引擎
-
Chaos 碰撞检测:FImplicitObject 层级与窄相位
拆解 Chaos 的碰撞几何体系:FImplicitObject 类型族、BroadPhase 到 NarrowPhase 的管线、GJK/EPA 在 Chaos 里的具体形态,源码基于 UE5.3。
-
Jolt 的 broad phase:四叉树与 JobSystem 的适配
Jolt 的四叉树 broad phase 用"多棵层级树 + 层间迁移"把更新成本摊销进每个 step,配合 ObjectLayer/BroadPhaseLayer 双重过滤压缩候选 pair,再由 JobSystem 并行收集。这篇拆它的结构、为什么大规模场景更快,以及 Godot 适配层要兜的底。
-
Chaos Cloth 布料:XPBD 的约束求解
从 XPBD 公式到 FClothingSimulationSolver:Chaos Cloth 的粒子-约束模型、面板参数怎么映射到物理系数、自碰撞为什么这么贵,源码基于 UE5.3。
-
Chaos 约束系统:关节与 PBD 投影
从数学上拆解 Chaos 为什么用位置级求解处理关节约束:PBD/XPBD 的投影公式、刚度与迭代数的关系、swing-twist 关节流形的实现,源码基于 UE5.3。
-
刚体模拟:RigidBody3D 的质心与惯量张量
质心和惯量不是手填的参数,而是从碰撞形状 × 密度自动推导的:加权质心、平行轴定理、形状公式一套组合。这篇给完整推导,以及 Godot 只存对角惯量、丢掉陀螺项的代价。
-
Godot Physics 2D:分离轴定理与脉冲求解器,2D 比 3D 简单在哪
Godot 的 2D 物理自研且独立于 3D:凸多边形碰撞用分离轴定理,求解器砍掉了 3D 的角速度耦合。这篇讲 SAT 的几何原理、2D 冲量求解为什么简单、以及 2D 没有 Jolt 替代的现实。
-
异步物理与 GT/PT 解耦:Fixed Timestep 的代价
物理跑在独立线程、以固定步长推进,渲染帧率不再拖住物理——但解耦不是免费的。这篇讲 UE5.1+ 的 AsyncPhysicsTickEnabled 架构、Dirty Properties 机制和固定步长换来的三个代价,源码基于 UE5.3。
-
Chaos Destruction:GeometryCollection 的碎裂模拟
GeometryCollection 怎么从静态簇演化成一地下刚体:Cluster 层级、字段(Field)驱动的断裂判定、损伤传播与休眠簇的启用,源码基于 UE5.3。
-
大规模刚体性能实测:一千个盒子的帧率曲线
用同一个 1000 刚体盒子的压测场景对比 Godot Physics 和 Jolt:帧率差异主要不来自 solver,而来自 broadphase 和休眠唤醒的调度。附测试场景的搭建方法和曲线解读。
-
Jolt 接入 Godot 4.4 始末:PhysicsServer3D 是怎么被替换的
Jolt 从社区 GDExtension 插件变成 4.4 的官方内置物理引擎,靠的是 PhysicsServer3DManager 的服务器注册机制。基于 4.4 源码看接入点、JoltSpace3D 的 step 流程,以及两个引擎的行为差异。
-
-
射线检测的调用路径:intersect_ray 一路到 broad phase
intersect_ray 看似一次函数调用,实际穿过了命令刷新、broad phase 线段剔除、逐形状窄相求交三层。这篇沿 servers/physics_3d 的源码把每一层做的事和开销讲清楚,帮你判断"这条射线到底贵在哪"。
-
PhysicsServer3D 抽象:为什么物理和场景树是解耦的
RigidBody3D 这样的物理节点只是 RID 的持有者,所有计算都发生在 PhysicsServer3D 服务器里,还能跑在独立线程上。这篇从接口形状、线程模型和查询纪律三个角度讲清这个抽象的动机、收益和代价。
-
关节系统:6DOF 与 hinge 约束是怎么被求解的
关节的本质是把两个刚体的相对运动限制在约束流形上。这篇推导冲量法求解约束的核心方程,对比 Godot Physics 与 Jolt 在 6DOF/hinge 上的实现差异,说清为什么关节强度调参不像看起来那么简单。
-
CharacterBody3D 的 move_and_slide:剩余滑动向量的推导
move_and_slide 不是黑盒魔法,它的核心是一次"碰撞 → 削速度 → 继续走"的迭代循环。这篇从向量推导出发,解释滑动方向怎么算、为什么要迭代、max_slides 和 floor snapping 各解决了什么问题。
-
软体物理 SoftBody3D 的现状:能用但不快的原因
SoftBody3D 基于位置的动力学把网格顶点当粒子、边当距离约束来解。这篇讲它的求解结构为什么和刚体是两个世界、CSR 稀疏矩阵在软体里扮演的角色,以及哪些场景它撑不住。
-
Chaos 岛(Island)管理:约束图分岛与并行求解
拆解 Chaos 的 island 机制:约束图怎么划分、休眠判定怎么做、为什么它是物理并行化省 CPU 的关键,源码基于 UE5.3。
-
物理帧率与渲染帧率:physics_ticks_per_second 的同步语义
physics_ticks_per_second 决定物理步长,但渲染帧和物理帧之间靠什么对齐?这篇讲固定步长累加器的实现、60 物理帧配 144 渲染帧会发生什么、max_physics_steps 的兜底逻辑,以及帧率不稳时的行为。
-
Chaos Vehicle:车辆物理模块结构
从 ChaosVehicleManager 到悬挂射线和轮胎摩擦模型:UE 载具系统的模块划分、关键参数背后的物理含义、以及为什么联机载具手感最难调,源码基于 UE5.3。
-
连续碰撞检测:Godot Physics 与 Jolt 的差异
高速物体穿墙的本质是离散采样:一步位移超过物体尺寸,碰撞就被采样间隔吞掉。Godot 用射线/形状扫掠把位移钳到接触点,Jolt 用 speculative contact 把预测位移内的接触提前生成、交给求解器限速。这篇给两种方案的机制、数学和取舍。
-
碰撞层与掩码:32 位位运算的设计
layer/mask 的本质是一对 32 位整数加一次双向 AND,热路径成本约等于零。真正的设计点在语义上:非对称检测、与 broad phase 剪枝的配合,以及"全挤在第 1 层"背后的隐性 O(n²)。
-
Area3D 的重叠检测与回调时机:body_entered 在物理帧的哪个阶段发出
Area3D 不做碰撞响应,只做"谁进来了"的记账。这篇讲 Area 与 Body 的重叠对是怎么维护的、监控回调为什么在物理步进结束后的 flush 阶段才发,以及 monitoring/monitorable 两个开关各自关掉的是哪半边。
-
Jolt 的确定性模拟与回放:帧同步游戏能用 Jolt 吗
帧同步要求同一输入序列产生完全一致的模拟结果,而浮点加法不满足结合律、多线程求解器的迭代顺序不固定,两头都在破坏确定性。这篇讲清 Jolt 在 Godot 里做到确定性回放需要什么条件,以及哪些条件是引擎给不了的。
-
静态体的优化:StaticBody3D 为什么不进 solver
一万个 StaticBody3D 和一个 RigidBody3D 的物理成本差在哪?静态体不是"被 solver 跳过的刚体",而是从积分、island 构建到迭代求解都走了特殊通道。这篇讲静态体在引擎各阶段的成本分布,以及它和 kinematic 模式的区别。
-
物理插值:从 3.x 插件到 4.x 内置,平滑是怎么来的
物理 60Hz、渲染 144Hz 时,直接渲染物理位置会让物体步进式移动。物理插值在两个物理位置间按时间比例插值出平滑轨迹。这篇讲插值的数学、Godot 4.3 内置实现做了什么、以及开启后的各种坑。
-
Godot Physics 3D 的 step 流程:space 到 broad phase 到 solver
一次物理迭代的内部步骤:兑现排队查询、施加重力、八叉树 broad phase 出候选对、窄相生成接触流形、按 island 迭代求解。基于 servers/physics_3d 源码(4.x)逐阶段拆,附冲量求解的数学。
-
物理调试绘制与性能开销:打开"显示碰撞形状"后引擎在干什么
编辑器里勾上 Visible Collision Shapes 后,物理数据要经过两条完全不同的通路变成屏幕上的线框:节点侧走缓存的 debug mesh,服务器侧走每帧现算的 immediate 顶点流。这篇拆解两条通路各自的开销构成。