1.9 KiB
1.9 KiB
title, source, url, date, tags
| title | source | url | date | tags | |||||
|---|---|---|---|---|---|---|---|---|---|
| GPU的BVH以及排序相关实现心得(史上最简洁GPU原理论述) | 游戏开发技术教程 (微信公众号) | https://mp.weixin.qq.com/s/FJxTDw9KdVwZx0RfojdYCg | 2026-05-06 |
|
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内共享
关键见解
- GPU完全可以做条件分支计算,前提是同一warp内的线程走相同分支
- Compute Shader本质上是低级的GPGPU编程语言,能力远不止"shader"
- BVH每一帧都重新构造以处理运动物体并防止树木退化
- 双调排序实现简单,几行shader代码就能搞定
- 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方案:异步+分发器模式