跳到主要内容

灯光

AmbientLight

环境光,没有方向,无法产生阴影。

环境光其实就是简单地给物体添加颜色,公式为:

// 这里的颜色计算是 RBG 通道上的值分别对应相乘
// 例: rgb(0.64,0.64,0.64) = rgb(0.8,0.8,0.8) * rgb(0.8,0.8,0.8) * 1
color = materialColor * light.color * light.intensity;

环境光作用不是那么大,它主要是让物体看起来不那么黑。

HemisphereLight

半球光,有两个方向的光源,一个从天空照射下来,一个从地面照射上来。

物体的法线朝上则会接受天空的光源,朝下则会接受地面的光源,其他方向会使用这两者的渐变。

半球光可以作为环境光的替代。

DirectionalLight

常用来模拟阳光。

DirectionalLight 一般会设置 position 属性和 target.position 属性,来确定光源的方向。

可以把 DirectionalLight 看做一条线,positiontarget.position 是这条线的两端。

通过设置这两端的位置,可以确定光源的方向。

PointLight

点光源,从一个点向四周发射光线。

可以看做成 DirectionalLight 的升级版,DirectionalLight 是从一点到另一个点,而 PointLight 是从一个点到其他所有点。

SpotLight

聚光灯,从一个点向一个方向发射光线,像手电筒一样。

聚光灯实际上有 2 个锥形,一个内锥形,一个外锥形:

The 2 cones of a SpotLight

内锥形是聚光灯的实际照射范围,外锥形是聚光灯的照射范围的边缘。

penumbra 定义了内锥形和外锥形之间的过渡区域。

RectAreaLight

矩形区域光,类似于家里天花板上的长条形日光灯。