渲染器
PlayCanvas 提供多种高斯泼溅渲染管线,称为渲染器,决定排序和光栅化方式。它是全场景设置,默认自动选择最适合设备的方案。
可用渲染器
CPU 排序光栅化
GSPLAT_RENDERER_RASTER_CPU_SORT
- WebGL 2 和 WebGPU 均支持,WebGL 自动选择。
- 后台 Web Worker 在 CPU 排序,再光栅化。
- 支持全部功能,包括 XR 和自定义着色器。
- 排序异步,极快相机运动时可能暂时显示略旧顺序,直到下一次完成。
GPU 排序光栅化
GSPLAT_RENDERER_RASTER_GPU_SORT
- 仅 WebGPU,其设备自动选择;WebGL 回退 CPU。
- GPU 每帧剔除并排序,避免 Worker 往返,降低延迟,更适合大量单元。
- 支持完整功能,包括 XR 与自定义。
选择渲染器
通过全局 app.scene.gsplat 设置:
// Request the GPU sorting renderer (WebGPU only; falls back to CPU sorting on WebGL)
app.scene.gsplat.renderer = pc.GSPLAT_RENDERER_RASTER_GPU_SORT;
可选:
- pc.GSPLAT_RENDERER_AUTO:默认,WebGPU 用 GPU 排序,WebGL 用 CPU。
- pc.GSPLAT_RENDERER_RASTER_CPU_SORT:CPU 排序。
- pc.GSPLAT_RENDERER_RASTER_GPU_SORT:仅 WebGPU 的 GPU 排序。
要求 WebGPU 的方案在 WebGL 上回退 CPU。读取 currentRenderer 可确认回退后的实际方案:
if (app.scene.gsplat.currentRenderer === pc.GSPLAT_RENDERER_RASTER_GPU_SORT) {
// GPU sorting is active on this device
}
排序
按相机深度从后到前绘制,执行位置取决于渲染器:
- CPU:Worker 异步排序并上传 GPU。相机短时大幅变化时,重算期间可能有短暂延迟。
- GPU:每帧在 GPU 排序,与相机运动同步。
无论哪种,所有组件始终参与全局排序,而非各自独立,确保跨组件深度正确,消除重叠和跳变。参见渲染架构。
深度缓冲考虑
GSplatComponent 渲染时不写深度缓冲,因此通常不能直接使用依赖回读或利用深度的功能。例如景深后处理通常需要深度,常规情况下不兼容。
可生成近似网格,在独立图层只写深度、不写颜色,以支持深度效果,同时保留泼溅画质。