--- title: GPU的BVH以及排序相关实现心得(史上最简洁GPU原理论述) source: 游戏开发技术教程 (微信公众号) url: https://mp.weixin.qq.com/s/FJxTDw9KdVwZx0RfojdYCg date: 2026-05-06 tags: [GPU, BVH, ComputeShader, 碰撞检测, GPU排序] --- # GPU的BVH以及排序相关实现心得(史上最简洁GPU原理论述) ## 核心内容 作者在Unity中实现了GPU版本的BVH(Bounding Volume Tree)碰撞检测,以及双调排序和radix-sort两种GPU排序算法。 ## GPU原理简述 - **GPU架构**:grid → block → warp 三级结构 - **SIMT**:单指令多线程,一个warp默认32线程 - **分支发散(divergence)**:同一个warp内的线程必须执行相同指令,不同warp/block的线程可以独立执行不同逻辑分支 - **Bank Conflict**:同一个warp的两个线程同时访问同一bank的不同地址时,访问会被串行化 - **内存层次**:全局内存(RWStructuredBuffer)和共享内存(groupshared)— 共享内存访问速度更快,但只能在block内共享 ## 关键见解 1. GPU完全可以做条件分支计算,前提是同一warp内的线程走相同分支 2. Compute Shader本质上是低级的GPGPU编程语言,能力远不止"shader" 3. BVH每一帧都重新构造以处理运动物体并防止树木退化 4. 双调排序实现简单,几行shader代码就能搞定 5. Radix-sort效率更高,包含sweep up(reduce)和sweep down(前缀和)两个过程 ## 相关链接 - 知乎GPU BVH系列:https://zhuanlan.zhihu.com/p/707169090 - 作者的知乎专栏(游戏开发):https://zhuanlan.zhihu.com/column/c_1861690729694359552 ## 技术细节 - 实现的是2D版本BVH,支持100万量级无明显卡顿 - 使用instancing drawing渲染大量quad(Unity缺省渲染太卡) - 作者显卡有19个SM,每个SM支持2048线程,最高并行约4万线程 - 碰撞结果回传CPU方案:异步+分发器模式