跳到主要内容

鱼眼渲染

PlayCanvas 支持为高斯泼溅和无限天空盒应用鱼眼桶形畸变,实现超广视野、沉浸式 360 度视图及“小行星”风格,同时普通网格与 UI 仍使用标准直线投影。

强鱼眼投影的高斯泼溅场景

查看实时示例:打开 Settings,将 fisheye 从 0 拖到 1,结合更高 cameraFov 和不同 HDRI 环境,重现穹顶与小行星外观。

查看实时示例

原理​

效果由两个范围为 [0, 1] 的滑块控制:

0 为标准透视,增加时桶形畸变更强,有效视野更宽。两者设置相同值,可让天空与数据共享投影,形成无缝广角效果。

注意

仅影响高斯泼溅和无限天空,网格、精灵、UI 等仍用标准投影,不受畸变。目前不支持普通网格鱼眼畸变。

因此最适合主要由高斯泼溅和天空组成的场景。混入普通网格时,未扭曲网格和扭曲数据会明显不匹配,几何位置无法对齐。

要求与限制​

  • 仅透视相机:正交无效。
  • 天空盒:仅 SKYTYPE_INFINITE,不影响穹顶或盒式天空。
  • 首次编译:首次启用会编译新变体,有少量一次性开销;之后在零与非零间切换即时完成。
  • 排序:建议启用 Scene.gsplat.radialSorting,避免超广视野下默认深度排序的伪影。

基本用法​

同时对数据和天空启用以保持匹配:

// Apply a moderate fisheye effect (0 = off, 1 = maximum distortion)
app.scene.gsplat.fisheye = 0.5;
app.scene.sky.fisheye = 0.5;

// Recommended when using fisheye to avoid splat sorting artifacts
app.scene.gsplat.radialSorting = true;

禁用时都设回 0:

app.scene.gsplat.fisheye = 0;
app.scene.sky.fisheye = 0;

效果配方​

超广视野​

少量鱼眼结合高 FOV,可得到自然广角,适合运动相机、VR 风格预览或普通透视太窄的室内电影镜头。

camera.camera.fov = 120;
app.scene.gsplat.fisheye = 0.3;
app.scene.sky.fisheye = 0.3;

鱼眼穹顶​

提高值可将无限天空盒投影为穹顶,适合环境预览和 HDRI 检查。

camera.camera.fov = 140;
app.scene.gsplat.fisheye = 0.8;
app.scene.sky.fisheye = 0.8;

小行星​

fisheye = 1 结合广 FOV 和向下倾斜相机,投影包裹成经典“小行星”。

camera.camera.fov = 320;
app.scene.gsplat.fisheye = 1;
app.scene.sky.fisheye = 1;

另请参见​