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

1.9 KiB
Raw Permalink Blame History

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
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前缀和两个过程

相关链接

技术细节

  • 实现的是2D版本BVH支持100万量级无明显卡顿
  • 使用instancing drawing渲染大量quadUnity缺省渲染太卡
  • 作者显卡有19个SM每个SM支持2048线程最高并行约4万线程
  • 碰撞结果回传CPU方案异步+分发器模式