分类:Godot 引擎
学习路径:由浅入深,按顺序阅读效果最好(共 149 篇)
-
41. RenderingDeviceDriver 的诞生:4.3 拆出驱动层解决了什么问题
4.3 把 RenderingDevice 里"懂 Vulkan"的部分下沉成 RenderingDeviceDriver,让上层只剩资源与命令簿记;这次拆分给 D3D12/Metal 后端铺了路,也让 barrier 推导能在驱动层统一做。
-
42. Vulkan 后端初始化:instance、device 与 queue 的选择逻辑
vulkan_context.cpp 按四层递进初始化 Vulkan:instance 选验证层、physical device 按能力打分挑卡、logical device 凑齐扩展和队列族;读懂选择逻辑能解释大半"启动失败 / 用了核显"的问题。
-
43. compute shader 管线:用 RenderingDevice 写第一个 GPGPU 程序
RD 的 compute list 把 GPGPU 压缩成"编译 SPIR-V、建 uniform set、begin/dispatch/end"三步;workgroup 尺寸与 dispatch 网格的关系是新手最容易算错的地方,本文用一个粒子求和例子走通全流程。
-
44. descriptor set 与 UniformSet 的缓存策略:绑定资源时的哈希查表
uniform_set_create 不急着建 Vulkan descriptor set,先对完整绑定内容算哈希查缓存;命中一次查表省下 vkAllocateDescriptorSets,这是高 draw call 场景下绑定期开销的主要来源。
-
45. GPU 内存分配子系统:内存池与 staging buffer 的上传路径
RD 的显存来自 Vulkan Memory Allocator 的池化分配,CPU 到 GPU 的上传统一走 staging buffer 中转;贴图加载慢和 device lost 两类问题,根子常在这两条路径的配额上。
-
46. 屏障与同步:RD 怎么隐藏 Vulkan 的 pipeline barrier
Vulkan 的 pipeline barrier 是手写渲染代码时最容易出错的部分。这篇拆 Godot 4.x 的 RenderingDevice 如何记录每个资源的读写历史、在列表结束时自动推导屏障,以及它保留下来的三个显式同步口(barrier / compute_list_add_barrier / sync)。
-
47. shader 编译链:GLSL 到 SPIR-V 再到 RD 反射
从 .glsl 文件进仓库到 RD 能用的 shader RID,中间隔着构建期 glslang 编译、SPIR-V 字节码打包进 .gen.h、运行期反射解析 UBO 布局三步。这篇按 Godot 4.x 的真实链路逐段讲,包括用户脚本能走的 shader_create_from_source 路径。
-
48. RenderingDevice 多线程提交的限制与坑
RD 的类上挂着 _THREAD_SAFE_CLASS_,方法级互斥没问题,但"同时只能有一个活动列表"和"submit 顺序即 GPU 顺序"两条约束决定了它不能被当成自由的多线程图形 API。这篇列四条实战规则,以及每条背后的源码依据。
-
49. 从 RD 到 RDD 的抽象开销实测
4.3 把 RenderingDevice 拆成 RD + RDD 两层后,每次资源操作多走一次虚函数。这篇用一个空操作循环和一次真实抓帧估算这笔开销的量级,结论是:调用开销在 1% 以下,真正的成本在别处。
-
50. Forward+ 的 cluster shading:光源如何被分配到 cluster
Forward+ 用"屏幕 tile × 深度切片"的三维网格给每个像素预筛光源,把逐像素遍历全部光源的 O(n) 降到 O(1)。这篇给 cluster 索引的数学推导、光源影响域的 AABB 求交,以及 Godot 4.x 的具体参数来源。
-
51. ClusterBuilder 的 CPU/GPU 分工:每帧光源剔除的真实成本
Godot 4.x 的 ClusterBuilderRD 同时带着 CPU 路径和 compute shader 路径两套光源入桶实现,按设备和配置选路。这篇拆两条路径的实现差异、选择逻辑,以及每帧剔除在 profiler 里到底占多少。
-
52. Mobile 渲染器:tile-based GPU 上省带宽的设计取舍
Godot 4 的 Mobile 渲染器和 Forward+ 共享 RD 抽象层,却砍掉了 cluster shading 和一堆屏幕空间效果。砍掉的东西对应的是移动端 GPU 的物理约束:tile 内存容量和外部带宽。这篇按"带宽账本"的思路解释每一项取舍。
-
53. Compatibility 渲染器:GLES3 的 fallback 路径
Compatibility 渲染器不走 RD,而是 Godot 3.x 血统的 GLES3 光栅器直通驱动层。这篇讲它的代码从哪来、为什么不走 RD、哪些特性被静默降级,以及 WebGL2 这个最苛刻目标带来的约束。
-
54. 渲染驱动多后端:Vulkan/D3D12/Metal 的统一入口
4.3 拆出 RenderingDeviceDriver 后,D3D12 和 Metal 后端在 4.4 起陆续落地。这篇讲 RDD 的职责边界、三个后端文件的翻译策略,以及渲染上下文为什么也要单独拆一层。
-
55. RenderSceneBuffers 与帧缓冲管理:分辨率改变时哪些资源重建了
每个视口的 color/depth/velocity 缓冲都归 RenderSceneBuffersRD 管,配置变更时整套 RID 销毁重建。这篇拆配置结构、重建的触发链与成本,以及 XR 多视角下的 buffer 布局。
-
56. LOD 与遮挡剔除的实现现状:Godot 在这块还缺什么
Godot 4.x 的剔除全部发生在 CPU 侧的 RendererSceneCull:视锥、距离、网格 LOD、Portal/Room 都有,但没有 GPU 遮挡查询和节点级自动 LOD。这篇梳理现状的边界,以及每个缺口对应的自救方案。
-
57. ParticlesProcessMaterial 的 GPU 模拟:粒子数据全程不进 CPU
GPUParticles3D 的粒子状态全生命周期住在 GPU buffer 里:发射、运动、碰撞、排序都由 compute shader 完成,CPU 只发 dispatch。这篇拆 ParticlesStorage 的 buffer 布局、粒子模拟 shader 的每帧流程,以及为什么"读回粒子位置"这类需求很贵。
-
58. decal 与 fog volume 的 cluster 参与:它们怎么挤进光源剔除体系
Forward+ 渲染器把 ClusterBuilderRD 模板实例化了两次:一次给光源,一次给 decal。fog volume 走的却是另一条路——向相机空间的体雾 3D 纹理注入密度。这篇拆两者的参与方式、片元侧的消费逻辑和各自的限额行为。
-
59. 渲染排错实战:Vulkan validation layer 加 RenderDoc 抓帧
黑屏、花屏、自定义 RenderingDevice 代码出了错,标准排查流程是两步:先用 validation layer 把 API 错误排掉,再用 RenderDoc 抓帧定位到具体 pass。这篇给完整流程、典型报错怎么读,以及 Godot 特有的几个坑。
-
60. PhysicsServer3D 抽象:为什么物理和场景树是解耦的
RigidBody3D 这样的物理节点只是 RID 的持有者,所有计算都发生在 PhysicsServer3D 服务器里,还能跑在独立线程上。这篇从接口形状、线程模型和查询纪律三个角度讲清这个抽象的动机、收益和代价。