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

查看实时示例:打开 Settings,将 fisheye 从 0 拖到 1,结合更高 cameraFov 和不同 HDRI 环境,重现穹顶与小行星外观。
查看实时示例
原理
效果由两个范围为 [0, 1] 的滑块控制:
Scene.gsplat.fisheye:扭曲高斯泼溅。Sky.fisheye:扭曲无限天空盒。
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;