首页 / three.js / API 文档
PointLight
先看结论
点光源。从一点向四周发光,强度随距离衰减,用于灯泡、路灯、 设备指示灯这类有明确位置的光源。
new THREE.PointLight(color, intensity, distance, decay)
构造参数
| 参数 | 默认 | 说明 |
|---|---|---|
color | 0xffffff | 光的颜色 |
intensity | 1 | 强度,按坎德拉解释 |
distance | 0 | 影响范围上限,0 表示不限制 |
decay | 2 | 衰减指数,2 为物理正确的平方反比 |
属性
| 属性 | 说明 |
|---|---|
isPointLight | 恒为 true |
color | 光色 |
intensity | 强度 |
distance | 影响范围 |
decay | 衰减指数 |
power | 光通量,单位流明;读写时会按强度换算 |
castShadow | 是否投射阴影 |
shadow | LightShadow 实例,控制阴影贴图与偏移 |
示例
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)。