经纬志
首页 / three.js / API 文档

PointLight

先看结论

点光源。从一点向四周发光,强度随距离衰减,用于灯泡、路灯、 设备指示灯这类有明确位置的光源。

最后验证 2026-11-03 · three.js 0.160.0 · 更新 2026-10-29 · 引用本文
new THREE.PointLight(color, intensity, distance, decay)

构造参数

参数默认说明
color0xffffff光的颜色
intensity1强度,按坎德拉解释
distance0影响范围上限,0 表示不限制
decay2衰减指数,2 为物理正确的平方反比

属性

属性说明
isPointLight恒为 true
color光色
intensity强度
distance影响范围
decay衰减指数
power光通量,单位流明;读写时会按强度换算
castShadow是否投射阴影
shadowLightShadow 实例,控制阴影贴图与偏移

示例

const lamp = new THREE.PointLight(0xffd08a, 40, 60, 2);
lamp.position.set(12, 8, -4);

lamp.castShadow = true;
lamp.shadow.mapSize.set(1024, 1024);
lamp.shadow.bias = -0.002;
lamp.shadow.camera.near = 0.5;
lamp.shadow.camera.far = 60;

scene.add(lamp);

// 用一个自发光球体表示灯罩
const bulb = new THREE.Mesh(
  new THREE.SphereGeometry(0.4, 16, 12),
  new THREE.MeshBasicMaterial({ color: 0xffd08a })
);
bulb.position.copy(lamp.position);
scene.add(bulb);

强度单位

从 r155 起 three.js 默认使用物理光照单位,intensity 按坎德拉(cd)解释,并按距离平方衰减。这意味着室内的灯 强度常在几十到几百之间,而不是 1 到 2。 觉得光太暗时先确认单位,再考虑提高数值。

power 与 intensity 是同一物理量的两种表达, 前者单位为流明,读写会自动换算。用现成的灯具参数表时, 直接设置 power 更省心。

阴影开销

每盏投射阴影的点光源都要额外渲染一张立方体贴图, 相当于六个方向的深度图。场景里同时开三盏以上,开销成倍增长。 室外场景通常只用一盏平行光投射阴影,室内的点光源只保留 距离相机最近的几盏。

distance 为 0 会让远处物体也被照到。没有范围限制时, 光照计算在整幅画面上进行,远处物体可能出现异常亮斑。 给一个略大于实际影响半径的 distance, 既限制范围也便于裁剪。

引用本文

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