Files
obsidian-notes/InBox/GPU的BVH以及排序相关实现心得(史上最简洁GPU原理论述).md
Build Bot f7310caea0 同步
2026-05-18 01:20:38 +08:00

42 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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版本的BVHBounding 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 upreduce和sweep down前缀和两个过程
## 相关链接
- 知乎GPU BVH系列https://zhuanlan.zhihu.com/p/707169090
- 作者的知乎专栏游戏开发https://zhuanlan.zhihu.com/column/c_1861690729694359552
## 技术细节
- 实现的是2D版本BVH支持100万量级无明显卡顿
- 使用instancing drawing渲染大量quadUnity缺省渲染太卡
- 作者显卡有19个SM每个SM支持2048线程最高并行约4万线程
- 碰撞结果回传CPU方案异步+分发器模式