跳到主要内容

渲染器

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 渲染时不写深度缓冲,因此通常不能直接使用依赖回读或利用深度的功能。例如景深后处理通常需要深度,常规情况下不兼容。

可生成近似网格,在独立图层只写深度、不写颜色,以支持深度效果,同时保留泼溅画质。