测试用例
PythonAPI/examples/tutorial_gbuffer.py
这是一个 高级传感器数据采集示例,用于:
- 生成一辆自动驾驶车辆
- 挂载高分辨率 RGB 摄像头
- 同时保存最终渲染图像(Final Color)和所有 GBuffer 纹理
适用于 计算机视觉研究、神经渲染、图像合成、感知算法训练 等需要底层图形数据的场景。
如下,展示下FinalColor和GBuffer-B:


🔑 主要模块解析
1. GBuffer 是什么?
- GBuffer(Geometry Buffer) 是 延迟渲染(Deferred Rendering) 中的核心概念
- 它将场景的几何与材质信息分通道存储,而非直接输出最终颜色
- CARLA 基于 Unreal Engine,天然支持 GBuffer 输出
✅ 通过 GBuffer,你可以获取:
- 场景深度(SceneDepth)
- 表面法线(GBufferB/C)
- 材质属性(金属度、粗糙度等)
- 运动矢量(Velocity)
- 屏幕空间环境光遮蔽(SSAO)
2. 主车与摄像头初始化
python
# 固定使用第一个出生点(非随机)
transform = world.get_map().get_spawn_points()[0]
vehicle = world.spawn_actor(bp, transform)
vehicle.set_autopilot(True)
# 创建 1920x1080 高分辨率 RGB 摄像头
camera_bp = blueprint_library.find('sensor.camera.rgb')
camera_bp.set_attribute('image_size_x', '1920')
camera_bp.set_attribute('image_size_y', '1080')
camera = world.spawn_actor(camera_bp, carla.Transform(carla.Location(x=1.5, z=2.4)), attach_to=vehicle)
- 使用固定出生点确保实验可复现
- 高分辨率设置(1080p)满足研究需求
- 摄像头安装在车头前方(x=1.5m, z=2.4m)
3. GBuffer 启用与监听(核心)
python
# 必须先启用 GBuffer
camera.enable_gbuffers(True)
# 注册 Final Color 回调(常规图像)
camera.listen(lambda image: image.save_to_disk('_out/FinalColor-%06d.png' % image.frame))
# 注册所有 GBuffer 通道回调
camera.listen_to_gbuffer(carla.GBufferTextureID.SceneColor, ...)
camera.listen_to_gbuffer(carla.GBufferTextureID.SceneDepth, ...)
...
camera.listen_to_gbuffer(carla.GBufferTextureID.SSAO, ...)
支持的 GBuffer 通道包括:
| 通道 | 用途 |
|---|---|
SceneColor |
最终未应用后处理的颜色 |
SceneDepth |
场景深度(可用于 3D 重建) |
SceneStencil |
模板缓冲(物体 ID 掩码) |
GBufferA/B/C/D |
核心几何/材质数据(法线、粗糙度、金属度等) |
Velocity |
屏幕空间运动矢量(用于动态模糊) |
SSAO |
屏幕空间环境光遮蔽 |
CustomDepth/Stencil |
自定义深度/模板(可用于特定物体分割) |
GBufferE/F 在简单场景中可能为空,因它们通常用于高级材质(如透明、次表面散射)。
4. 数据输出结构
所有图像按帧号保存至 _out/ 目录:
_out/
├── FinalColor-000001.png # 最终渲染图
├── GBuffer-SceneColor-000001.png
├── GBuffer-SceneDepth-000001.png
├── GBuffer-GBufferA-000001.png
...
└── GBuffer-SSAO-000001.png
✅ 每帧包含 14+ 个图像文件,形成完整的渲染数据集。
5. 资源管理
- 使用
actor_list跟踪所有生成的 Actor finally块确保退出时销毁摄像头和车辆- 运行时间延长至 10 秒(比基础示例更长,采集更多数据)
🎯 核心应用场景
| 应用领域 | 如何利用 GBuffer |
|---|---|
| NeRF / 3D 重建 | SceneDepth + SceneColor 提供深度-颜色对 |
| 语义分割 | SceneStencil 或 CustomStencil 提供实例 ID |
| 去模糊/视频插帧 | Velocity 提供运动信息 |
| 材质编辑 | GBufferB/C/D 包含 PBR 材质参数 |
| 合成数据增强 | 修改 GBuffer 后重新着色,生成新视角 |
⚠️ 注意事项
-
性能开销大
- 同时输出 14+ 通道会显著降低仿真 FPS
- 建议在离线数据采集时使用
-
磁盘空间消耗快
- 1080p × 14 通道 × 30 FPS ≈ 每秒 600MB+
- 确保
_out/目录有足够空间
-
部分通道可能为空
- 如注释所述,
GBufferE/F在可能无数据
- 如注释所述,
✅ 总结
该脚本是 CARLA 高级图形数据采集的标杆示例,展示了:
- 如何启用并监听 GBuffer 多通道输出
- 如何同步保存 最终图像 + 底层渲染数据
- 为 计算机视觉前沿研究 提供高质量合成数据源