经纬志
首页 / deck.gl / API 文档

AmbientLight

先看结论

环境光。没有位置和方向,从各个角度均匀照亮物体,决定阴影面、背光面的亮度底线。

最后验证 2026-11-03 · deck.gl 9.0 · 更新 2026-10-29 · 引用本文
new deck.AmbientLight({ color, intensity })

参数

参数默认说明
color[255, 255, 255]RGB 数组,取值 0 到 255
intensity1.0强度倍率,大于 1 会过曝

属性

属性说明
color光的颜色,RGB 数组
intensity强度
type恒为 'ambient',用于区分光源类型

示例

var ambient = new deck.AmbientLight({
  color: [235, 240, 255],
  intensity: 1.1
});

var lightingEffect = new deck.LightingEffect({
  ambientLight: ambient,
  directionalLights: [
    new deck.DirectionalLight({
      color: [255, 250, 235],
      intensity: 2.0,
      direction: [-3, -9, -1]
    })
  ]
});

强度怎么定

环境光太强时,所有面亮度接近,体块失去立体感,画面像贴纸; 太弱时背光面接近纯黑,建筑的层次被吃掉。 常见做法是把环境光控制在 0.8 到 1.2,让平行光承担主要的明暗对比。 夜间场景反而要压低环境光,只留低强度的冷色,突出灯火效果。

环境光与材质的 ambient 系数相乘。材质写成 ambient: 0.1 时,即使环境光强度为 3,表面也只有 0.3 的亮度贡献。

v9 的不可变更新

光源对象本身可以直接改属性,但 deck.gl 9 的图层实例不可变。 光源调整后要让画面生效,通常把图层 clone 一份再 deckgl.setProps,否则 effect 的变更可能不会触发重绘:

ambient.intensity = 0.6;

deckgl.setProps({
  effects: [lightingEffect],
  layers: deckgl.props.layers.map(function (layer) {
    return layer.clone({});
  })
});

一个场景只放一个环境光。LightingEffect 的 ambientLight 是单个对象而不是数组。需要两种色温混合时, 调整 color 与 intensity,不要试图构造多个环境光叠加。

引用本文

经纬志(2026)。《AmbientLight》。https://www.jingweizhi.com/deckgl/api/ambient-light.html(访问日期 2026-11-03)。