首页 / three.js / API 文档
HemisphereLight
先看结论
半球光。上方给一种颜色、下方给另一种颜色,中间平滑过渡, 用来模拟天空与地面反射的环境光。
new THREE.HemisphereLight(skyColor, groundColor, intensity)
构造参数
| 参数 | 默认 | 说明 |
|---|---|---|
skyColor | 0xffffff | 朝上方向的颜色,通常是天空蓝 |
groundColor | 0xffffff | 朝下方向的颜色,通常是地面反射的暖灰或土色 |
intensity | 1 | 强度倍率 |
属性
| 属性 | 说明 |
|---|---|
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)。