> **本文回答**：`SkyLayer` 天空、渐变大气、`setFog` 雾效 —— 给 CAD/互联网地图加氛围。

## 一、SkyLayer 天空图层

```js
const sky = new vjmap.SkyLayer({
  skyType: "gradient",              // gradient / atmosphere
  skyGradient: [
    "interpolate", ["linear"], ["sky-radial-progress"],
    0.8, "rgba(135, 206, 235, 1.0)",
    1,   "rgba(0, 0, 0, 0.1)"
  ],
  skyGradientCenter: [0, 0],
  skyGradientRadius: 90,             // 0-180 度
  skyOpacity: [
    "interpolate", ["exponential", 0.1], ["zoom"],
    0, 0.3,
    22, 1
  ]
});
sky.addTo(map);
```

需要地图 `pitch > 0` 才能看到。

## 二、atmosphere 模式（模拟大气）

```js
new vjmap.SkyLayer({
  skyType: "atmosphere",
  skyAtmosphereSun: [0, 0],                  // 太阳位置 [方位角, 极角]：方位角 0 = 正北顺时针；极角 0 = 天顶、90 = 地平线（不是高度角）
  skyAtmosphereSunIntensity: 15,             // 0-100
  skyAtmosphereColor: "#fff",
  skyAtmosphereHaloColor: "#fff",
  skyOpacity: 1
}).addTo(map);
```

## 三、setFog 雾效

```js
// ⚠️ 本版 fog 规范只认 range / color / horizon-blend 三个键——
// "high-color"/"space-color"/"star-intensity" 等键不支持，会被拒（console: unknown property）。
map.setFog({
  range: [0.5, 10],          // 雾从透明到不透明的距离区间，单位 = 视口高度（地图中心处为 0，负值更靠近相机），取值 -20~20
  color: "#ffffff",          // 雾色
  "horizon-blend": 0.1       // 地平线混合（0-1）
});

// 读取：立即返回刚设置的 spec 对象（不是空对象）
const fog = map.getFog();   // { range: [0.5,10], color: "#ffffff", "horizon-blend": 0.1 }

// 移除
map.setFog(null);
```

## 四、light 光照

```js
map.setLight({
  anchor: "viewport",              // map / viewport
  color: "#ffffff",
  intensity: 0.5,
  position: [1.15, 210, 30]         // radial, azimuth, polar
});
```

影响 `fill-extrusion` 阴影方向。

## 五、组合氛围（推荐组合）

黄昏城市 3D：

```js
map.setPitch(60);
map.setBearing(-30);

map.setFog({
  range: [-1, 1.5],
  color: "#f9c9a3",
  "horizon-blend": 0.3
});

map.setLight({
  anchor: "map",
  color: "#fce1a2",
  intensity: 0.8,
  position: [1.5, 120, 25]
});

new vjmap.SkyLayer({
  skyType: "atmosphere",
  skyAtmosphereColor: "#ffaa55",
  skyAtmosphereHaloColor: "#ffddaa",
  skyAtmosphereSunIntensity: 20
}).addTo(map);
```

## 六、与互联网底图搭配

雾效和 sky 是世界空间的，对互联网底图和 CAD 栅格都生效，无需为底图单独处理。

## 七、常见坑

1. **Sky 看不见** → pitch 太小；推荐 ≥ 60。
2. **Sky 遮挡地图** → skyOpacity 按 zoom 插值（低 zoom 时降低）。
3. **fog range 用错**：range 不是 zoom 区间，而是以**视口高度**为单位的距离（地图中心为 0）。`[0.5, 10]` 表示中心稍远处开始雾化、约 10 个视口高度外全雾。另外雾随 pitch 渐显：pitch 45° 以下基本看不到，65° 以上完全生效。
4. **FPS 掉**：`skyType: "atmosphere"` 比 "gradient" 开销大；性能敏感场景用 gradient。
5. **CAD 栅格底图闪烁**：栅格 layer 在 sky 之前，记得调 `addTo` 的 before 参数。
6. **`SkyLayer` 的 set/get 全坏**：`sky.setSkyType(...)`/`getSkyType()` 等委托 `this._map.setSkyType(layerId, ...)`，而 Map 上没有这些方法 → 调用即抛 `TypeError: this._map.setSkyType is not a function`。只能用构造 options 一次配好；要改效果请 `remove()` 后重建或直接 `map.setPaintProperty(layerId, "sky-type", ...)`。
