经纬志
首页 / three.js / 使用示例

物理光照

三盏功率完全相同的点光源,分别挂在 2.5、6、11 个单位的灯杆上。 地面出现三个亮度差异巨大的光斑,左下角把照度按距离的衰减次方算给你看。

three.js 0.160.0 · 更新 2026-10-28
源码与运行效果
运行效果

强度单位变了

0.160 默认使用物理光照单位:PointLight 的强度是坎德拉, 照度按 1 / 距离² 衰减。decay 为 2 就是平方反比, 调到 1 则是线性衰减,可用滑杆直接对照。

过去那套写意强度(强度 1 就足够亮)已经不再适用。灯要照亮十米外的地面, 强度得给到几百,与真实世界里的灯泡参数同量级。 从旧项目迁移时,几乎所有灯光强度都要乘上几十倍。

参数取值说明
intensity380 cd滑杆 20 – 400 再乘 2.1
decay2.0平方反比,可调到 0.6
distance00 表示不做截断
灯高2.5 / 6 / 11照度相差约二十倍

为什么暗部还能看见

场景里只放了一盏极弱的半球光,强度 0.9 的百分之一量级, 它不参与物理衰减计算,负责把纯黑区域抬到可辨认的层次。 真实照明设计里,环境光就是干这个的:不制造光影,只保证轮廓可读。

灯具数量与衰减要一起算。平方反比下,照度随高度衰减得很快, 要照亮同一片地面,灯高一倍强度就得四倍。 城市夜景里密集的低杆灯往往比少量高杆灯更有效。