灯光的种类:在场景中添加灯光后, 灯光照射在物体上产生明暗,光亮和阴影, 从而让物体显示的更加立体有光泽
three.js 中, 有 6 种基础类型的灯光, 他们都继承于 Three.Light
灯光类型 灯光名称 是否支持阴影 是否作用于全局 是否有照射目标 AmbientLight 环境光,氛围光 否 是 无 DirectionalLight 平行光 是 否 有 HemisphereLight 半球光源,户外光源 否 是 无 PointLight 点光源 有 否 有 RectAreaLight 矩形面光源 否 否 无 SpotLight 聚光灯光源 是 否 有
关于阴影的进一步补充说明:
- 之前的事例中, 当场景上有反光物体且有灯光时, 物体会产生明暗, 但是请注意:这个物体显示出的明暗并不是真正的 阴影
- 这个 物体显示出的明暗 并不是完全符合我们日常的 光影明暗,这是因为 我们目前所有的示例使用的都是 简单光照模型, 也就是说光照射在物体后 并不并不进行漫反射,所以渲染出的 明暗 并不完全自然合理
- 默认渲染器 并不会渲染阴影, 迷人支持阴影的灯光也不会投射 阴影, 若想产生真正的阴影, 还需要开启 阴影渲染和投射
灯光的作用于阴影
AmbientLight 环境光, 氛围光: 通常仅作为 基础光线, 一般需要与其他灯光配合使用,不能产生阴影,也无需指定坐标位置, 仅需设置颜色和强度
DirectionalLight 平行光:最为经常使用的光源, 光纤 都是平行向着一个方向发射,经常用来模拟太阳光照射到某个物体上的光照效果
HemisphereLight 半球光源:更加真实的模拟自然光源, 提供 天空 地面 漫反射光线。一共接收 3 个参数: 第一个: 天空光线颜色,第二个: 地面反射光颜色, 第三个: 光的反射强度
PointLight: 点光源: 类似生活中的灯泡, 光纤 没有固定方向, 朝着四周散射, 点光源对应的辅助对象 PointLightHelper 只有一个 菱形的光源形状,并没有 光 的 发射线条
RectAreaLight 矩形面光源: 与 DirectionalLight 模拟太阳光不同, 光源形状为一个矩形, 可以模拟出明亮的窗口或者 矩形照明光源
- 只有 MeshStandardMaterial 和 MeshPhysicalMaterial 材质 才支持 RectAreaLight光源
- RectAreaLight 对应的辅助对象, RectAreaLightArea 引入方式和 其他 光辅助对象 引入方式不同。其他光辅助对象 都是在 three 中 使用之前无需引入, 可以直接使用, RectAreaLight 在使用之前需要引入才可以使用 import { RectAreaLightHelper } from 'three/examples/jsm/helpers'
SpotLight 聚光灯 类似与生活中的 聚光灯效果