42 lines
1.9 KiB
Markdown
42 lines
1.9 KiB
Markdown
---
|
||
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方案:异步+分发器模式
|