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

HemisphereLight

先看结论

半球光。上方给一种颜色、下方给另一种颜色,中间平滑过渡, 用来模拟天空与地面反射的环境光。

最后验证 2026-11-03 · three.js 0.160.0 · 更新 2026-10-29 · 引用本文
new THREE.HemisphereLight(skyColor, groundColor, intensity)

构造参数

参数默认说明
skyColor0xffffff朝上方向的颜色,通常是天空蓝
groundColor0xffffff朝下方向的颜色,通常是地面反射的暖灰或土色
intensity1强度倍率

属性

属性说明
isHemisphereLight恒为 true
color天空颜色,与 skyColor 是同一个值
groundColor地面颜色
intensity强度
position默认 (0, 1, 0),只用来确定「上」的方向

示例

// 晴天的环境光:上方偏蓝,地面反射偏暖
const sky = new THREE.HemisphereLight(
  0xbfd8ff,
  0x6b6255,
  1.4
);
sky.position.set(0, 60, 0);

scene.add(sky);

// 再加一盏平行光提供明确的明暗与阴影
const sun = new THREE.DirectionalLight(0xfff4e0, 2.0);
sun.position.set(-120, 180, 90);
sun.castShadow = true;
sun.shadow.mapSize.set(2048, 2048);
sun.shadow.camera.left = -200;
sun.shadow.camera.right = 200;
sun.shadow.camera.top = 200;
sun.shadow.camera.bottom = -200;
scene.add(sun);

和 AmbientLight 的区别

AmbientLight 从所有方向均匀照射,物体的上下表面亮度一样, 立体感弱。HemisphereLight 按表面法线的朝向插值: 朝上的屋顶偏天空色,朝下的檐口偏地面色, 体块会自然产生「上亮下暗」的层次,层次感比环境光更好。

不投射阴影

半球光没有明确位置,也没有 castShadow 的实际意义。 需要阴影时必须配一盏 DirectionalLight 或 PointLight。半球光只负责填充暗部, 把所有面从纯黑里拉回来。

强度不要过高

默认强度 1 已经能明显提亮暗部,室外场景常用 1 到 2, 室内可以到 3。超过之后再叠加平行光,整体会过曝, 材质细节被冲掉。先定半球光,再用平行光补对比, 比反过来调整更容易得到稳定结果。

位置只决定方向。position 改变的是「上」的方向, 不是光源所在的位置。把 y 设为负值,天空色与地面色会整体颠倒。

引用本文

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