1. WebGL 的 Uniform Buffer Object 与 Transform Feedback 在批量渲染的取舍
WebGL 的 Uniform Buffer Object 与 Transform Feedback 在批量渲染中各有哪些取舍?
- UBO 打包 uniform 减少状态切换
- Transform Feedback 实现 GPU 内数据演化
- std140 布局与回读同步代价
Uniform Buffer Object(UBO)把多个 uniform 打包进缓冲,按 block 一次性上传,减少 uniform 设置调用与状态切换,适合大量对象共享少量矩阵、材质参数的批量渲染;Transform Feedback 把顶点着色器输出捕获回缓冲(GPU 侧写回),避免 CPU 回读,适合粒子系统、骨骼动画等每帧由 GPU 更新数据的场景。取舍:UBO 要求着色器按 std140 布局对齐,数据排布需谨慎;Transform Feedback 增加管线复杂度(绑定反馈缓冲、处理容量与回读同步)。工程上常组合:UBO 管共享参数,TF 维护动态顶点数据,配合实例化绘制实现高性能批量渲染。
考察 WebGL 两类 GPU 数据管线的定位:UBO 优化参数上传与切换,Transform Feedback 实现 GPU 内数据演化;回答需对比适用场景、布局对齐与回读同步代价。