分类:Godot 引擎
学习路径:由浅入深,按顺序阅读效果最好(共 149 篇)
-
61. Godot Physics 3D 的 step 流程:space 到 broad phase 到 solver
一次物理迭代的内部步骤:兑现排队查询、施加重力、八叉树 broad phase 出候选对、窄相生成接触流形、按 island 迭代求解。基于 servers/physics_3d 源码(4.x)逐阶段拆,附冲量求解的数学。
-
62. Jolt 接入 Godot 4.4 始末:PhysicsServer3D 是怎么被替换的
Jolt 从社区 GDExtension 插件变成 4.4 的官方内置物理引擎,靠的是 PhysicsServer3DManager 的服务器注册机制。基于 4.4 源码看接入点、JoltSpace3D 的 step 流程,以及两个引擎的行为差异。
-
63. Jolt 的 broad phase:四叉树与 JobSystem 的适配
Jolt 的四叉树 broad phase 用"多棵层级树 + 层间迁移"把更新成本摊销进每个 step,配合 ObjectLayer/BroadPhaseLayer 双重过滤压缩候选 pair,再由 JobSystem 并行收集。这篇拆它的结构、为什么大规模场景更快,以及 Godot 适配层要兜的底。
-
64. 刚体模拟:RigidBody3D 的质心与惯量张量
质心和惯量不是手填的参数,而是从碰撞形状 × 密度自动推导的:加权质心、平行轴定理、形状公式一套组合。这篇给完整推导,以及 Godot 只存对角惯量、丢掉陀螺项的代价。
-
65. 连续碰撞检测:Godot Physics 与 Jolt 的差异
高速物体穿墙的本质是离散采样:一步位移超过物体尺寸,碰撞就被采样间隔吞掉。Godot 用射线/形状扫掠把位移钳到接触点,Jolt 用 speculative contact 把预测位移内的接触提前生成、交给求解器限速。这篇给两种方案的机制、数学和取舍。
-
66. 碰撞层与掩码:32 位位运算的设计
layer/mask 的本质是一对 32 位整数加一次双向 AND,热路径成本约等于零。真正的设计点在语义上:非对称检测、与 broad phase 剪枝的配合,以及"全挤在第 1 层"背后的隐性 O(n²)。
-
67. 射线检测的调用路径:intersect_ray 一路到 broad phase
intersect_ray 看似一次函数调用,实际穿过了命令刷新、broad phase 线段剔除、逐形状窄相求交三层。这篇沿 servers/physics_3d 的源码把每一层做的事和开销讲清楚,帮你判断"这条射线到底贵在哪"。
-
68. CharacterBody3D 的 move_and_slide:剩余滑动向量的推导
move_and_slide 不是黑盒魔法,它的核心是一次"碰撞 → 削速度 → 继续走"的迭代循环。这篇从向量推导出发,解释滑动方向怎么算、为什么要迭代、max_slides 和 floor snapping 各解决了什么问题。
-
69. 关节系统:6DOF 与 hinge 约束是怎么被求解的
关节的本质是把两个刚体的相对运动限制在约束流形上。这篇推导冲量法求解约束的核心方程,对比 Godot Physics 与 Jolt 在 6DOF/hinge 上的实现差异,说清为什么关节强度调参不像看起来那么简单。
-
70. 软体物理 SoftBody3D 的现状:能用但不快的原因
SoftBody3D 基于位置的动力学把网格顶点当粒子、边当距离约束来解。这篇讲它的求解结构为什么和刚体是两个世界、CSR 稀疏矩阵在软体里扮演的角色,以及哪些场景它撑不住。
-
71. 物理插值:从 3.x 插件到 4.x 内置,平滑是怎么来的
物理 60Hz、渲染 144Hz 时,直接渲染物理位置会让物体步进式移动。物理插值在两个物理位置间按时间比例插值出平滑轨迹。这篇讲插值的数学、Godot 4.3 内置实现做了什么、以及开启后的各种坑。
-
72. 物理帧率与渲染帧率:physics_ticks_per_second 的同步语义
physics_ticks_per_second 决定物理步长,但渲染帧和物理帧之间靠什么对齐?这篇讲固定步长累加器的实现、60 物理帧配 144 渲染帧会发生什么、max_physics_steps 的兜底逻辑,以及帧率不稳时的行为。
-
73. Area3D 的重叠检测与回调时机:body_entered 在物理帧的哪个阶段发出
Area3D 不做碰撞响应,只做"谁进来了"的记账。这篇讲 Area 与 Body 的重叠对是怎么维护的、监控回调为什么在物理步进结束后的 flush 阶段才发,以及 monitoring/monitorable 两个开关各自关掉的是哪半边。
-
74. 静态体的优化:StaticBody3D 为什么不进 solver
一万个 StaticBody3D 和一个 RigidBody3D 的物理成本差在哪?静态体不是"被 solver 跳过的刚体",而是从积分、island 构建到迭代求解都走了特殊通道。这篇讲静态体在引擎各阶段的成本分布,以及它和 kinematic 模式的区别。
-
75. Godot Physics 2D:分离轴定理与脉冲求解器,2D 比 3D 简单在哪
Godot 的 2D 物理自研且独立于 3D:凸多边形碰撞用分离轴定理,求解器砍掉了 3D 的角速度耦合。这篇讲 SAT 的几何原理、2D 冲量求解为什么简单、以及 2D 没有 Jolt 替代的现实。
-
76. NavigationServer 与物理的解耦:导航网格烘焙为什么不依赖碰撞体
NavigationServer 是独立于物理服务器的第三套查询系统:烘焙走 Recast 体素化,运行时查询走 Detour。物理碰撞体和导航网格只是"数据源的一种",两者解耦让导航可以来自任意几何。这篇讲烘焙的数据流、运行时查询路径,以及两套系统接缝处的坑。
-
77. 物理调试绘制与性能开销:打开"显示碰撞形状"后引擎在干什么
编辑器里勾上 Visible Collision Shapes 后,物理数据要经过两条完全不同的通路变成屏幕上的线框:节点侧走缓存的 debug mesh,服务器侧走每帧现算的 immediate 顶点流。这篇拆解两条通路各自的开销构成。
-
78. Jolt 的确定性模拟与回放:帧同步游戏能用 Jolt 吗
帧同步要求同一输入序列产生完全一致的模拟结果,而浮点加法不满足结合律、多线程求解器的迭代顺序不固定,两头都在破坏确定性。这篇讲清 Jolt 在 Godot 里做到确定性回放需要什么条件,以及哪些条件是引擎给不了的。
-
79. 大规模刚体性能实测:一千个盒子的帧率曲线
用同一个 1000 刚体盒子的压测场景对比 Godot Physics 和 Jolt:帧率差异主要不来自 solver,而来自 broadphase 和休眠唤醒的调度。附测试场景的搭建方法和曲线解读。
-
80. GDScript 编译管线:从 tokenizer 到字节码 VM
一行 print() 从源码文本到被执行,要经过 parser、analyzer、compiler 三段管线,最后变成 GDScriptFunction 里的 int 数组字节码。基于 4.2 源码拆解每个阶段产出什么。